NATURALJOINUSAGE ทำให้ table expression ถูกเพิ่มเข้าไปในตัวกรอง (filter context) แบบ natural join โดยจับคู่ตามคอลัมน์ชื่อเดียวกัน เป็นฟังก์ชันที่ออกแบบสำหรับการใช้งานขั้นสูงในโมเดลแบบประกอบ (composite models) และ SUMMARIZECOLUMNS
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| Table | table | ตารางหรือ table expression ที่จะเพิ่มเข้าไปในตัวกรองแบบ natural join หลักใช้ร่วมกับ SUMMARIZECOLUMNS ในโมเดลแบบประกอบ |
NATURALJOINUSAGE เป็นฟังก์ชันที่เพิ่ม table expression เข้าไปในตัวกรองแบบ natural join ซึ่งหมายความว่ามันจะจับคู่คอลัมน์โดยยึงตามชื่อเดียวกันแทนที่จะระบุความสัมพันธ์ได้อย่างชัดเจน บ่อยครั้งที่ผู้ใช้ DAX ทั่วไปจะไม่ต้องสัมผัสฟังก์ชันนี้โดยตรง เพราะมันถูกออกแบบมาสำหรับสถานการณ์ขั้นสูง โดยเฉพาะในโมเดลแบบประกอบ (composite models) ที่ต้องเขียน SUMMARIZECOLUMNS ไปยังแหล่งข้อมูลอื่น
ที่เจ๋งคือ NATURALJOINUSAGE ทำให้คุณบอก Power BI ได้ว่า “ฉันต้องการให้จับคู่ตามชื่อเดียวกัน ไม่ใช่ความสัมพันธ์ที่กำหนดไว้” เหมาะสำหรับปัญหาที่ชั้นสูงเช่นการทำงานข้ามโมเดล หรือเมื่อคุณต้องการควบคุมวิธีการจับคู่ข้อมูลอย่างแม่นยำ
ส่วนตัวผม มักพูดว่า NATURALJOINUSAGE เป็นเครื่องมือ “นำได้” (opt-in) ไม่ใช่เครื่องมือที่ส่วนใหญ่ต้องใช้ทุกวัน ถ้าคุณกำลังเขียน SUMMARIZECOLUMNS ในโมเดลแบบประกอบ และพบว่าการจับคู่ไม่ถูกต้อง นั่นคือช่วงเวลาที่ NATURALJOINUSAGE อาจช่วยได้
ทำให้ table expression ไปกรองตารางอื่นผ่านคีย์ชื่อเดียวกัน
ใช้เป็นตัวกรองใน CALCULATE เพื่อเปลี่ยนบริบทตัวกรองด้วย semantics แบบ natural join
ตัวอย่างนี้สมมติว่า ExternalTable มีคอลัมน์ชื่อเดียวกับ LocalProducts เช่น [Category] NATURALJOINUSAGE บอกให้ SUMMARIZECOLUMNS จับคู่ตามชื่อเดียวกัน ไม่ใช่ความสัมพันธ์
ใช้ VALUES() เพื่อสร้าง table ของหมวดหมู่ที่เลือก แล้วปล่อยให้ NATURALJOINUSAGE จับคู่ตามชื่อ [Category]
เลือกฟังก์ชันตามว่าคุณต้องการตารางข้อมูล (NATURALINNERJOIN) หรือตัวกรองสำหรับการคำนวณ (NATURALJOINUSAGE)
NATURALJOINUSAGE ถูกออกแบบให้ใช้เป็นตัวกรองใน SUMMARIZECOLUMNS เท่านั้น โดยเฉพาะเมื่อ SUMMARIZECOLUMNS ส่งคำค้นหาไปยังโมเดลอื่นในโมเดลแบบประกอบ (composite models) ถ้าคุณพยายามใช้กับฟังก์ชันอื่น มันอาจไม่ได้ผลตามที่คาดหวัง
TREATAS ใช้เพื่อจับคู่ค่าโดยตำแหน่ง (positional matching) โดยไม่สำคัญชื่อคอลัมน์ ส่วน NATURALJOINUSAGE จับคู่ตามชื่อคอลัมน์เดียวกัน (semantic matching) TREATAS มีประโยชน์มากกว่าในการใช้งานทั่วไป ส่วน NATURALJOINUSAGE เป็นตัวเลือกสำหรับสถานการณ์ขั้นสูง
ขึ้นอยู่กับสิ่งที่คุณต้องการ ถ้าคุณต้องการตารางที่ join แล้ว ให้ใช้ NATURALINNERJOIN ถ้าคุณกำลังเขียน SUMMARIZECOLUMNS ในสภาพแวดล้อมโมเดลแบบประกอบและต้องการควบคุมวิธีการจับคู่ระหว่างแหล่งข้อมูล ให้ใช้ NATURALJOINUSAGE
ไม่ แนะนำให้ใช้ NATURALJOINUSAGE กับ row context ฟังก์ชันนี้ออกแบบมาสำหรับ filter context ของ SUMMARIZECOLUMNS โดยเฉพาะในโมเดลแบบประกอบ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ NATURALJOINUSAGE จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
NATURALINNERJOIN ทำ inner join ระหว่าง LeftTable และ RightTable โดยใช้คอลัมน์ชื่อเดียวกันเป็นคีย์การจับคู่ คืนผลลัพธ์เฉพาะแถวที่จับคู่ได้ทั้งสองตาราง และมักใช้ร่วมกับ SELECTCOLUMNS เพื่อจัดชื่อคอลัมน์ให้ตรงกัน
NATURALLEFTOUTERJOIN ทำ left outer join ระหว่าง LeftTable และ RightTable โดยใช้คอลัมน์ชื่อเดียวกันเป็นคีย์ เก็บทุกแถวของตารางซ้ายไว้ทั้งหมด และเติมคอลัมน์จากตารางขวาเมื่อจับคู่ได้ (ไม่จับคู่จะเป็น BLANK)
สร้างตารางใหม่โดยเลือกเฉพาะคอลัมน์ที่ต้องการจากตารางต้นฉบับและเพิ่มคอลัมน์ที่คำนวณได้ ต่างจาก ADDCOLUMNS ตรงที่ SELECTCOLUMNS เริ่มจากตารางว่างแล้วเพิ่มเฉพาะคอลัมน์ที่ระบุ ทำให้สามารถปรับโครงสร้างตารางและเลือกข้อมูลที่จำเป็นได้อย่างยืดหยุ่น
SUMMARIZECOLUMNS เป็นฟังก์ชันหลักสำหรับสร้างตารางสรุปผล โดยจัดกลุ่มตามคอลัมน์ที่กำหนด พร้อมเพิ่มคอลัมน์คำนวณจากเมเชอร์ และสามารถใส่เงื่อนไขกรองได้ทันที
TREATAS เป็นเสมือนการสร้าง "virtual relationship" โดยไม่ต้องแก้โมเดล ช่วยให้ส่งเงื่อนไขข้ามตารางที่ไม่เชื่อมกัน หรือเมื่อต้องการส่งหลายคีย์พร้อมกัน
VALUES ดึงค่าที่ไม่ซ้ำจากคอลัมน์ หรือดึงแถวทั้งหมดจากตาราง โดยรวมแถว BLANK ที่เกิดจากข้อผิดพลาดของความสัมพันธ์ (Referential Integrity Violations) ส่วน DISTINCT จะไม่รวมแถว BLANK นี้
FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่