USERELATIONSHIP ช่วยให้คุณใช้ relationship ที่ไม่ใช่ active หรือเปลี่ยน relationship ที่ใช้ในการคำนวณ เหมาะสำหรับสถานการณ์เช่น sales data ที่มีหลาย date columns (OrderDate, ShippingDate, DeliveryDate)
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| columnName1 | Column | คอลัมน์ที่เป็น foreign key (หลายรายการ) ของ relationship ที่ต้องการใช้ ต้องเป็นคอลัมน์จริง ไม่ใช่ expression |
| columnName2 | Column | คอลัมน์ที่เป็น primary key (หนึ่งรายการ) ของ relationship ที่ต้องการใช้ ต้องเป็นคอลัมน์จริง ไม่ใช่ expression |
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 อื่นๆ ได้
ถ้ามีวันที่ OrderDate เป็น Active Relationship แต่ต้องการดูยอดขายตาม DeliveryDate ชั่วคราว
ใช้ Date Table เดียวกันแต่มีหลายความสัมพันธ์กับ Fact Table เพื่อดูยอดขายตามวันที่สั่งซื้อ, วันที่จัดส่ง, วันที่ชำระเงิน พร้อมๆ กัน
ใน Sales table มี OrderDate (active) และ ShippingDate (inactive) ทั้งคู่เชื่อมต่อ Date table ด้วย USERELATIONSHIP เราอ้างถึง ShippingDate แทน OrderDate ที่ default
ใช้ VAR เก็บค่าอันดับแรกจาก OrderDate แล้วค่าอันดับสอง ShippingDate แล้วหาผลต่าง ทำให้เห็นว่าในช่วงเวลานี้มีออร์เดอร์เท่าไหร่แต่ส่งมากขนาดไหน
USERELATIONSHIP ทำงานได้ดีเมื่อรวมกับ ALL() เป็นการเลือก date relationship และแล้วลบ filter date ทั้งหมดออก
เมื่อ Date table แสดงหลายบทบาท (order date, ship date, delivery date) ใช้ USERELATIONSHIP สำหรับแต่ละวาระ DAX จะ activate relationship ที่ต้องการเท่านั้น
ใช้ได้ทั้งคู่ ไม่ว่า relationship จะ active หรือ inactive ก็ตาม เพราะ USERELATIONSHIP ระบุ relationship โดยอ้างอิงคอลัมน์ของมันเองตามคำจำกัดความของ relationship
ใช้ได้เฉพาะใน CALCULATE, CALCULATETABLE, และ time-intelligence functions เช่น TOTALMTD, TOTALYTD เนื่องจากฟังก์ชันเหล่านี้ยอมรับ filter predicates
USERELATIONSHIP ที่อยู่ใน CALCULATE ชั้นในสุด (innermost) จะมีลำดับความสำคัญมากกว่า ถ้าปะทะกัน USERELATIONSHIP ตัวชั้นในจะชนะ
ใช้ได้ แต่ 1-to-1 relationship ระหว่างตาราง A และ B จะ activate เฉพาะทิศทางเดียว ถ้าต้องการทั้งสองทิศทาง ต้องใช้ USERELATIONSHIP สองครั้ง
ใช่ ห้ามใช้กับ Row-Level Security (RLS) ที่กำหนดบน table ที่มี relationship ต้องการใช้ และสูงสุด 10 nested USERELATIONSHIP functions ต่อสูตร
ฟังก์ชันที่ผู้เขียนโยงไว้กับ USERELATIONSHIP จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
ALL มีพฤติกรรมแตกต่างกัน 2 แบบ: ใช้เป็น Table Expression จะคืนทุกแถวในตาราง หรือทุกค่าในคอลัมน์ โดยไม่สนใจ Filter ใดๆ เหมาะสำหรับใช้ร่วมกับ FILTER, COUNTROWS, SUMMARIZE หรือใช้เป็น CALCULATE Modifier เพื่อลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ทำให้สามารถคำนวณ Grand Total หรือหาเปอร์เซ็นต์เทียบกับยอดรวมได้
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 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 ได้ดีกว่า
CROSSFILTER กำหนดทิศทางการกรองข้ามความสัมพันธ์ระหว่าง 2 คอลัมน์ชั่วคราว (มักใช้ใน CALCULATE) เพื่อควบคุมการไหลของตัวกรองหรือปิดการกรองข้ามในบางการคำนวณ
RELATED คืนค่า scalar value (ค่าเดี่ยว) จากคอลัมน์ในตารางที่มีความสัมพันธ์แบบ many-to-one โดยอาศัย relationship ที่กำหนดไว้ในโมเดล ฟังก์ชันนี้ต้องการ row context และสามารถ traverse relationship chain ข้ามหลายขั้นได้ตราบใดที่ทุก relationship อยู่ในทิศทางเดียวกัน
TREATAS เป็นเสมือนการสร้าง "virtual relationship" โดยไม่ต้องแก้โมเดล ช่วยให้ส่งเงื่อนไขข้ามตารางที่ไม่เชื่อมกัน หรือเมื่อต้องการส่งหลายคีย์พร้อมกัน
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่