NATURALJOINUSAGE ทำให้ table expression ถูกเพิ่มเข้าไปในตัวกรอง (filter context) แบบ natural join โดยจับคู่ตามคอลัมน์ชื่อเดียวกัน เป็นฟังก์ชันที่ออกแบบสำหรับการใช้งานขั้นสูงในโมเดลแบบประกอบ (composite models) และ SUMMARIZECOLUMNS
=NATURALJOINUSAGE(<Table>)
=NATURALJOINUSAGE(<Table>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Table | table | Yes | ตารางหรือ table expression ที่จะเพิ่มเข้าไปในตัวกรองแบบ natural join หลักใช้ร่วมกับ SUMMARIZECOLUMNS ในโมเดลแบบประกอบ |
ทำให้ table expression ไปกรองตารางอื่นผ่านคีย์ชื่อเดียวกัน
ใช้เป็นตัวกรองใน CALCULATE เพื่อเปลี่ยนบริบทตัวกรองด้วย semantics แบบ natural join
VAR ResultTable = SUMMARIZECOLUMNS( ExternalTable[Category], ExternalTable[Year], NATURALJOINUSAGE(FILTER(LocalProducts, LocalProducts[Active] = TRUE)), "Sales"…VAR ResultTable =
SUMMARIZECOLUMNS(
ExternalTable[Category],
ExternalTable[Year],
NATURALJOINUSAGE(FILTER(LocalProducts, LocalProducts[Active] = TRUE)),
"Sales", [TotalSales]
)
RETURN ResultTable
ตารางที่ก็อปรวม sales จากแหล่งข้อมูลภายนอก และใช้ natural join เพื่อจับคู่กับผลิตภัณฑ์ที่ใช้งานอยู่ในโมเดลภายใน
VAR FilteredCategories = VALUES(Product[Category]) VAR ResultTable = SUMMARIZECOLUMNS( ExternalTable[Category], NATURALJOINUSAGE(FilteredCategories), "Count", C…VAR FilteredCategories = VALUES(Product[Category])
VAR ResultTable =
SUMMARIZECOLUMNS(
ExternalTable[Category],
NATURALJOINUSAGE(FilteredCategories),
"Count", COUNTA(ExternalTable[ID])
)
RETURN ResultTable
ตารางที่นับรายการใน ExternalTable โดยกรองให้เหลือเฉพาะหมวดหมู่ที่มีอยู่ในโมเดลปัจจุบัน
-- NATURALINNERJOIN: คืนค่าเป็นตารางข้อมูล VAR JoinedTable = NATURALINNERJOIN( SELECTCOLUMNS(TableA, "ID", TableA[ID], "Name", TableA[Name]), SELECTCOLUMNS(Tabl…-- NATURALINNERJOIN: คืนค่าเป็นตารางข้อมูล
VAR JoinedTable =
NATURALINNERJOIN(
SELECTCOLUMNS(TableA, "ID", TableA[ID], "Name", TableA[Name]),
SELECTCOLUMNS(TableB, "ID", TableB[ID], "Value", TableB[Value])
)
-- NATURALJOINUSAGE: ใช้เป็นตัวกรองใน SUMMARIZECOLUMNS
VAR FilteredResult =
SUMMARIZECOLUMNS(
TableA[ID],
NATURALJOINUSAGE(SELECTCOLUMNS(TableB, "ID", TableB[ID])),
"Total", SUMX(TableA, TableA[Value])
)
RETURN FilteredResult
NATURALINNERJOIN ให้ตารางผลลัพธ์ของการ join แต่ NATURALJOINUSAGE ใช้ table expression เป็นตัวกรอง
NATURALJOINUSAGE ถูกออกแบบให้ใช้เป็นตัวกรองใน SUMMARIZECOLUMNS เท่านั้น โดยเฉพาะเมื่อ SUMMARIZECOLUMNS ส่งคำค้นหาไปยังโมเดลอื่นในโมเดลแบบประกอบ (composite models) ถ้าคุณพยายามใช้กับฟังก์ชันอื่น มันอาจไม่ได้ผลตามที่คาดหวัง
TREATAS ใช้เพื่อจับคู่ค่าโดยตำแหน่ง (positional matching) โดยไม่สำคัญชื่อคอลัมน์ ส่วน NATURALJOINUSAGE จับคู่ตามชื่อคอลัมน์เดียวกัน (semantic matching) TREATAS มีประโยชน์มากกว่าในการใช้งานทั่วไป ส่วน NATURALJOINUSAGE เป็นตัวเลือกสำหรับสถานการณ์ขั้นสูง
ขึ้นอยู่กับสิ่งที่คุณต้องการ ถ้าคุณต้องการตารางที่ join แล้ว ให้ใช้ NATURALINNERJOIN ถ้าคุณกำลังเขียน SUMMARIZECOLUMNS ในสภาพแวดล้อมโมเดลแบบประกอบและต้องการควบคุมวิธีการจับคู่ระหว่างแหล่งข้อมูล ให้ใช้ NATURALJOINUSAGE
ไม่ แนะนำให้ใช้ NATURALJOINUSAGE กับ row context ฟังก์ชันนี้ออกแบบมาสำหรับ filter context ของ SUMMARIZECOLUMNS โดยเฉพาะในโมเดลแบบประกอบ
NATURALJOINUSAGE เป็นฟังก์ชันที่เพิ่ม table expression เข้าไปในตัวกรองแบบ natural join ซึ่งหมายความว่ามันจะจับคู่คอลัมน์โดยยึงตามชื่อเดียวกันแทนที่จะระบุความสัมพันธ์ได้อย่างชัดเจน บ่อยครั้งที่ผู้ใช้ DAX ทั่วไปจะไม่ต้องสัมผัสฟังก์ชันนี้โดยตรง เพราะมันถูกออกแบบมาสำหรับสถานการณ์ขั้นสูง โดยเฉพาะในโมเดลแบบประกอบ (composite models) ที่ต้องเขียน SUMMARIZECOLUMNS ไปยังแหล่งข้อมูลอื่น
ที่เจ๋งคือ NATURALJOINUSAGE ทำให้คุณบอก Power BI ได้ว่า “ฉันต้องการให้จับคู่ตามชื่อเดียวกัน ไม่ใช่ความสัมพันธ์ที่กำหนดไว้” เหมาะสำหรับปัญหาที่ชั้นสูงเช่นการทำงานข้ามโมเดล หรือเมื่อคุณต้องการควบคุมวิธีการจับคู่ข้อมูลอย่างแม่นยำ
ส่วนตัวผม มักพูดว่า NATURALJOINUSAGE เป็นเครื่องมือ “นำได้” (opt-in) ไม่ใช่เครื่องมือที่ส่วนใหญ่ต้องใช้ทุกวัน ถ้าคุณกำลังเขียน SUMMARIZECOLUMNS ในโมเดลแบบประกอบ และพบว่าการจับคู่ไม่ถูกต้อง นั่นคือช่วงเวลาที่ NATURALJOINUSAGE อาจช่วยได้