RELATEDTABLE ทำ context transition คืนตารางของแถวฝั่ง Many ที่เกี่ยวข้องกับแถวปัจจุบัน โดยใช้ Relationship ในโมเดล เป็นทางลัดของ CALCULATETABLE แต่ Microsoft ไม่แนะนำใช้แล้ว
=RELATEDTABLE(<Table>)
=RELATEDTABLE(<Table>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Table | table | Yes | ชื่อตารางฝั่ง Many ที่ต้องการคืนแถวที่เกี่ยวข้อง (ต้องมี Relationship กับตารางปัจจุบัน) |
เช่นจำนวนธุรกรรมต่อหนึ่งลูกค้า
เช่นรวมยอดขายต่อหนึ่งลูกค้าโดยใช้ SUMX บน RELATEDTABLE(Sales)
จำนวนธุรกรรม/ลูกค้า = AVERAGEX( Customer, COUNTROWS(RELATEDTABLE(Sales)) )จำนวนธุรกรรม/ลูกค้า =
AVERAGEX(
Customer,
COUNTROWS(RELATEDTABLE(Sales))
)
ได้ค่าเฉลี่ยจำนวนแถวของ Sales ต่อ 1 ลูกค้า
Total Sales by Category = SUMX( RELATEDTABLE(InternetSales_USD), InternetSales_USD[SalesAmount_USD] )Total Sales by Category =
SUMX(
RELATEDTABLE(InternetSales_USD),
InternetSales_USD[SalesAmount_USD]
)
แสดงยอดขายรวมของแต่ละหมวดหมู่สินค้า เช่น Bikes: $28,318,144.65
# RELATEDTABLE - ใช้ Relationship เพียงอย่างเดียว Total = SUMX(RELATEDTABLE(Sales), Sales[Amount]) # CALCULATETABLE - ยืดหยุ่นกว่า เพิ่มเงื่อนไขได้ Total = SUMX…# RELATEDTABLE - ใช้ Relationship เพียงอย่างเดียว
Total = SUMX(RELATEDTABLE(Sales), Sales[Amount])
# CALCULATETABLE - ยืดหยุ่นกว่า เพิ่มเงื่อนไขได้
Total = SUMX(
CALCULATETABLE(Sales, Sales[Year]=2024),
Sales[Amount]
)
RELATEDTABLE คืนแถวจากความสัมพันธ์เท่านั้น ขณะ CALCULATETABLE สามารถเพิ่มตัวกรองได้
RELATEDTABLE เป็นฟังก์ชันเก่าและเป็นทางลัดของ CALCULATETABLE ที่ไม่มีความยืดหยุ่น ใช้ CALCULATETABLE แทนจะเขียนได้ชัดเจนกว่าและสามารถเพิ่มเงื่อนไขเพิ่มเติมได้ Microsoft แนะนำให้ใช้ CALCULATETABLE ในแทนใหม่ทั้งหมด
RELATED คืนค่าเดี่ยวจากตารางฝั่ง One (Many → One) ส่วน RELATEDTABLE คืน “ตารางของแถว” จากตารางฝั่ง Many (One → Many)
ทำได้เมื่อมี row context ที่เหมาะสม (เช่นอยู่ภายใน iterator อย่าง AVERAGEX/SUMX) เพราะ RELATEDTABLE อาศัย context transition จากแถวปัจจุบัน
ให้ใช้ CALCULATETABLE เสมอในโค้ดใหม่ RELATEDTABLE เป็นเพียงทางลัดแบบ CALCULATETABLE() โดยไม่มีเงื่อนไขเพิ่มเติม ถ้าต้องการความชัดเจนและความยืดหยุ่น ใช้ CALCULATETABLE ทั้งหมด
RELATEDTABLE คืน “ตารางของแถวที่เกี่ยวข้อง” จากตารางฝั่ง Many โดยอาศัย Relationship ในโมเดล ใช้เมื่อคุณอยู่บนตารางฝั่ง One (เช่น Product Category) แล้วต้องการดึงแถวที่เกี่ยวข้องจากตารางฝั่ง Many (เช่น Sales) เพื่อใช้กับ iterator อย่าง SUMX/COUNTROWS
Technical Detail: RELATEDTABLE ทำ “context transition” – เปลี่ยนจาก row context เป็น filter context โดยใช้ Relationship เป็นตัวกำหนดตัวกรอง ฟังก์ชันนี้เป็นทางลัดของ CALCULATETABLE(table) แบบไม่มีเงื่อนไขเพิ่มเติม
หลังสำคัญ: Microsoft ไม่แนะนำใช้ RELATEDTABLE แล้ว แนะนำให้ใช้ CALCULATETABLE แทน เพราะมีความยืดหยุ่นกว่า สามารถเพิ่มเงื่อนไขตัวกรองได้ และสื่อความหมายชัดเจนกว่า ถ้าเห็น RELATEDTABLE ในโค้ดเก่า ให้พิจารณาแปลงเป็น CALCULATETABLE
ส่วนตัวผมว่า RELATEDTABLE ยังมีประโยชน์ในการอ่านและทำความเข้าใจ context transition ของ DAX แต่ไม่ควรเขียนโค้ดใหม่ด้วยมันแล้ว ใช้ CALCULATETABLE นั่นแหละถ้าจะเก่ง DAX ต้องเข้าใจ context transition ก่อนเพราะมันคือ “ปัญญา” ของ DAX เลยก็ว่าได้ 😎