Thep Excel

USERELATIONSHIPเลือกใช้ relationship ที่ไม่ใช่ active

USERELATIONSHIP ช่วยให้คุณใช้ relationship ที่ไม่ใช่ active หรือเปลี่ยน relationship ที่ใช้ในการคำนวณ เหมาะสำหรับสถานการณ์เช่น sales data ที่มีหลาย date columns (OrderDate, ShippingDate, DeliveryDate)

fx
=USERELATIONSHIP(<columnName1>, <columnName2>)

ความนิยม7/10
ความยาก5/10
ประโยชน์7/10

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
columnName1 Column คอลัมน์ที่เป็น foreign key (หลายรายการ) ของ relationship ที่ต้องการใช้ ต้องเป็นคอลัมน์จริง ไม่ใช่ expression
columnName2 Column คอลัมน์ที่เป็น primary key (หนึ่งรายการ) ของ relationship ที่ต้องการใช้ ต้องเป็นคอลัมน์จริง ไม่ใช่ expression

Additional Notes

USERELATIONSHIP เป็นฟังก์ชันที่ช่วยให้คุณ override relationship ที่ active อยู่และใช้ relationship อื่นแทน ซึ่งสำคัญมากเวลาตาราง Data Model มีหลาย relationship ระหว่างสองตารางเดียวกัน

ที่เจ๋งคือ USERELATIONSHIP ทำงานได้ทั้งกับ active และ inactive relationship ดังนั้นจึงไม่ต้องแก้ relationship ในตัวแบบเสมอไป ถ้าคุณมี Sales table ที่เชื่อมต่อ Date table ผ่าน OrderDate, ShippingDate, และ DeliveryDate ก็สามารถสร้าง measure สำหรับแต่ละวันได้โดยไม่ต้องแก้ model

ส่วนตัวผมคิดว่า USERELATIONSHIP ช่วยให้ Data Model ยืดหยุ่นมากขึ้น เพราะเราไม่จำเป็นต้องเปลี่ยน active relationship ทั้งหนึ่ง ซึ่งอาจส่งผลต่อ report อื่นๆ ได้

How it works

วิเคราะห์ยอดขายตามวันที่จัดส่ง (Delivery Date)

ถ้ามีวันที่ OrderDate เป็น Active Relationship แต่ต้องการดูยอดขายตาม DeliveryDate ชั่วคราว

เปรียบเทียบยอดขายหลายช่วงเวลา

ใช้ Date Table เดียวกันแต่มีหลายความสัมพันธ์กับ Fact Table เพื่อดูยอดขายตามวันที่สั่งซื้อ, วันที่จัดส่ง, วันที่ชำระเงิน พร้อมๆ กัน

Examples

เปลี่ยนจาก OrderDate เป็น ShippingDateShipped Amount = CALCULATE( SUM(Sales[Amount]), USERELATIONSHIP(Sales[ShippingDate], 'Date'[Date]) )

ใน Sales table มี OrderDate (active) และ ShippingDate (inactive) ทั้งคู่เชื่อมต่อ Date table ด้วย USERELATIONSHIP เราอ้างถึง ShippingDate แทน OrderDate ที่ default

fx
Shipped Amount =
CALCULATE(
SUM(Sales[Amount]),
USERELATIONSHIP(Sales[ShippingDate], 'Date'[Date])
)

ผลลัพธ์ยอดขายตามวันที่ส่ง แทนวันที่สั่งซื้อ
ใช้กับหลาย relationship ในสูตรเดียวOrder vs Ship Variance = VAR OrderAmount = CALCULATE(SUM(Sales[Amount]), USERELATIONSHIP(Sales[OrderDate], 'Date'[Date])) VAR ShipAmount = CALCULATE(SUM(Sales[A…

ใช้ VAR เก็บค่าอันดับแรกจาก OrderDate แล้วค่าอันดับสอง ShippingDate แล้วหาผลต่าง ทำให้เห็นว่าในช่วงเวลานี้มีออร์เดอร์เท่าไหร่แต่ส่งมากขนาดไหน

fx
Order vs Ship Variance =
VAR OrderAmount =
CALCULATE(SUM(Sales[Amount]),
USERELATIONSHIP(Sales[OrderDate], 'Date'[Date]))
VAR ShipAmount =
CALCULATE(SUM(Sales[Amount]),
USERELATIONSHIP(Sales[ShippingDate], 'Date'[Date]))
RETURN
OrderAmount – ShipAmount

ผลลัพธ์ความแตกต่างระหว่างยอดขายที่สั่งกับที่ส่งจริง
กับ All() เพื่อ compare across dateCurrent Month Orders = CALCULATE( SUM(Sales[Amount]), USERELATIONSHIP(Sales[OrderDate], 'Date'[Date]), 'Date'[MonthYear] = MAX('Date'[MonthYear]) ) All Time Ord…

USERELATIONSHIP ทำงานได้ดีเมื่อรวมกับ ALL() เป็นการเลือก date relationship และแล้วลบ filter date ทั้งหมดออก

fx
Current Month Orders =
CALCULATE(
SUM(Sales[Amount]),
USERELATIONSHIP(Sales[OrderDate], 'Date'[Date]),
'Date'[MonthYear] = MAX('Date'[MonthYear])
)

All Time Orders =
CALCULATE(
SUM(Sales[Amount]),
USERELATIONSHIP(Sales[OrderDate], 'Date'[Date]),
ALL('Date')
)

ผลลัพธ์สามารถเปรียบเทียบเดือนปัจจุบันกับสะสมทั้งหมด
สำหรับการแมป Role-Playing DimensionsDelivery Time = VAR DeliveryAmount = CALCULATE(SUM(Sales[Amount]), USERELATIONSHIP(Sales[DeliveryDate], 'Date'[Date])) VAR OrderAmount = CALCULATE(SUM(Sales[Amo…

เมื่อ Date table แสดงหลายบทบาท (order date, ship date, delivery date) ใช้ USERELATIONSHIP สำหรับแต่ละวาระ DAX จะ activate relationship ที่ต้องการเท่านั้น

fx
Delivery Time =
VAR DeliveryAmount =
CALCULATE(SUM(Sales[Amount]),
USERELATIONSHIP(Sales[DeliveryDate], 'Date'[Date]))
VAR OrderAmount =
CALCULATE(SUM(Sales[Amount]),
USERELATIONSHIP(Sales[OrderDate], 'Date'[Date]))
RETURN
IF(OrderAmount > 0,
DIVIDE(DeliveryAmount, OrderAmount, 0),
BLANK())

ผลลัพธ์เปอร์เซ็นต์ของ delivery ต่อ order ในวันเดียวกัน

FAQs

USERELATIONSHIP ใช้ได้กับ inactive relationship หรือ active relationship เท่านั้น?+

ใช้ได้ทั้งคู่ ไม่ว่า relationship จะ active หรือ inactive ก็ตาม เพราะ USERELATIONSHIP ระบุ relationship โดยอ้างอิงคอลัมน์ของมันเองตามคำจำกัดความของ relationship

ใช้ USERELATIONSHIP ได้กับ function อะไรบ้าง?+

ใช้ได้เฉพาะใน CALCULATE, CALCULATETABLE, และ time-intelligence functions เช่น TOTALMTD, TOTALYTD เนื่องจากฟังก์ชันเหล่านี้ยอมรับ filter predicates

ถ้าใช้ USERELATIONSHIP หลายตัวในสูตรเดียว ตัวไหนจะ override?+

USERELATIONSHIP ที่อยู่ใน CALCULATE ชั้นในสุด (innermost) จะมีลำดับความสำคัญมากกว่า ถ้าปะทะกัน USERELATIONSHIP ตัวชั้นในจะชนะ

ใช้ USERELATIONSHIP ได้กับ 1-to-1 relationship หรือไม่?+

ใช้ได้ แต่ 1-to-1 relationship ระหว่างตาราง A และ B จะ activate เฉพาะทิศทางเดียว ถ้าต้องการทั้งสองทิศทาง ต้องใช้ USERELATIONSHIP สองครั้ง

มี limitation ในการใช้ USERELATIONSHIP หรือไม่?+

ใช่ ห้ามใช้กับ Row-Level Security (RLS) ที่กำหนดบน table ที่มี relationship ต้องการใช้ และสูงสุด 10 nested USERELATIONSHIP functions ต่อสูตร

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ USERELATIONSHIP จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้USERELATIONSHIPRelationship
Filter (3)
ALL

ALL มีพฤติกรรมแตกต่างกัน 2 แบบ: ใช้เป็น Table Expression จะคืนทุกแถวในตาราง หรือทุกค่าในคอลัมน์ โดยไม่สนใจ Filter ใดๆ เหมาะสำหรับใช้ร่วมกับ FILTER, COUNTROWS, SUMMARIZE หรือใช้เป็น CALCULATE Modifier เพื่อลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ทำให้สามารถคำนวณ Grand Total หรือหาเปอร์เซ็นต์เทียบกับยอดรวมได้

CALCULATE

CALCULATE เป็นฟังก์ชันหลักที่สำคัญที่สุดใน DAX ใช้สำหรับ evaluate expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน สามารถเพิ่มตัวกรองใหม่ ลบตัวกรองเดิม หรือแทนที่ filter ที่มีอยู่ได้ รองรับทั้ง Boolean expression และ table expression เป็น filter arguments พร้อม filter modifier functions เช่น REMOVEFILTERS, ALL, ALLEXCEPT, KEEPFILTERS เพื่อควบคุมการกรองอย่างละเอียด มีพฤติกรรมพิเศษคือ context transition ที่เปลี่ยน row context เป็น filter context โดยอัตโนมัติ ทำให้เป็นเครื่องมือหลักในการสร้าง measure ที่ซับซ้อนและ calculated column ที่ต้องใช้ aggregation

CALCULATETABLE

CALCULATETABLE evaluate table expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน แล้วคืนค่าเป็น table (ตาราง) ซึ่งแตกต่างจาก CALCULATE ที่คืนค่าเป็น scalar value รองรับ filter arguments 3 รูปแบบ: Boolean expression, table expression, และ filter modifier functions (REMOVEFILTERS, ALL, KEEPFILTERS, USERELATIONSHIP, CROSSFILTER) มีพฤติกรรมเหมือน CALCULATE ในทุกแง่มุมของการจัดการ filter context รวมถึง context transition แต่เหมาะสำหรับการสร้าง intermediate table ที่ถูกกรองแล้วส่งต่อให้ iterator functions หรือใช้ใน calculated table มักมี performance ดีกว่า FILTER ใน simple filtering scenarios เพราะ DAX engine สามารถทำ cardinality estimation และ optimization ได้ดีกว่า

Relationship (2)
CROSSFILTER

CROSSFILTER กำหนดทิศทางการกรองข้ามความสัมพันธ์ระหว่าง 2 คอลัมน์ชั่วคราว (มักใช้ใน CALCULATE) เพื่อควบคุมการไหลของตัวกรองหรือปิดการกรองข้ามในบางการคำนวณ

RELATED

RELATED คืนค่า scalar value (ค่าเดี่ยว) จากคอลัมน์ในตารางที่มีความสัมพันธ์แบบ many-to-one โดยอาศัย relationship ที่กำหนดไว้ในโมเดล ฟังก์ชันนี้ต้องการ row context และสามารถ traverse relationship chain ข้ามหลายขั้นได้ตราบใดที่ทุก relationship อยู่ในทิศทางเดียวกัน

Table manipulation (1)
TREATAS

TREATAS เป็นเสมือนการสร้าง "virtual relationship" โดยไม่ต้องแก้โมเดล ช่วยให้ส่งเงื่อนไขข้ามตารางที่ไม่เชื่อมกัน หรือเมื่อต้องการส่งหลายคีย์พร้อมกัน

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่