Thep Excel

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

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

=USERELATIONSHIP(<columnName1>, <columnName2>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
7/10

Difficulty
5/10

Usefulness
7/10

Syntax & Arguments

=USERELATIONSHIP(<columnName1>, <columnName2>)

Argument Type Required Default Description
columnName1 Column Yes คอลัมน์ที่เป็น foreign key (หลายรายการ) ของ relationship ที่ต้องการใช้ ต้องเป็นคอลัมน์จริง ไม่ใช่ expression
columnName2 Column Yes คอลัมน์ที่เป็น primary key (หนึ่งรายการ) ของ relationship ที่ต้องการใช้ ต้องเป็นคอลัมน์จริง ไม่ใช่ expression

How it works

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

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

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

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

Examples

เปลี่ยนจาก OrderDate เป็น ShippingDate
Shipped Amount = CALCULATE( SUM(Sales[Amount]), USERELATIONSHIP(Sales[ShippingDate], 'Date'[Date]) )
ใน Sales table มี OrderDate (active) และ ShippingDate (inactive) ทั้งคู่เชื่อมต่อ Date table ด้วย USERELATIONSHIP เราอ้างถึง ShippingDate แทน OrderDate ที่ default
DAX Formula:

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

Result:

ยอดขายตามวันที่ส่ง แทนวันที่สั่งซื้อ

ใช้กับหลาย 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 แล้วหาผลต่าง ทำให้เห็นว่าในช่วงเวลานี้มีออร์เดอร์เท่าไหร่แต่ส่งมากขนาดไหน
DAX Formula:

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

Result:

ความแตกต่างระหว่างยอดขายที่สั่งกับที่ส่งจริง

กับ All() เพื่อ compare across date
Current 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 ทั้งหมดออก
DAX Formula:

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')
)

Result:

สามารถเปรียบเทียบเดือนปัจจุบันกับสะสมทั้งหมด

สำหรับการแมป Role-Playing Dimensions
Delivery 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 ที่ต้องการเท่านั้น
DAX Formula:

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())

Result:

เปอร์เซ็นต์ของ 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

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 อื่นๆ ได้

Leave a Reply

Your email address will not be published. Required fields are marked *