| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| table | table | ตารางที่ต้องการล้างตัวกรอง |
ALLCROSSFILTERED เป็นฟังก์ชันที่ใช้ล้างตัวกรองทั้งหมดออกจากตารางที่ระบุ รวมถึงตัวกรองที่ไหลเข้ามาจากตารางอื่นผ่าน Weak Relationships หรือ Bidirectional Cross-filtering นี่คือจุดต่างสำคัญกับ ALL ที่เพิ่งล้างตัวกรองปกติในตารางนั้น
ที่เจ๋งคือเมื่อคุณมี Many-to-Many Relationship หรือ Bidirectional Filter โมเดลจะ propagate filters ไปตามลูกศรแบบ cross-filtering ปัญหามักเกิดตอนคำนวณ Grand Total หรือต้องการข้อมูลทั้งหมด ยกตัวอย่าง ถ้ากรองโดย ColorGroup ผ่าน M2M relationship ALL จะให้ 135 products แต่ ALLCROSSFILTERED จะให้ 2,517 products ทั้งหมดเลย
ส่วนตัวผมใช้ ALLCROSSFILTERED บ่อยมากในโมเดลซับซ้อน ถ้าคำนวณ Grand Total ผิดเพี้ยนหรือข้อมูลไม่ครอบคลุม ลองใช้อันนี้ดูครับ ไม่ต้องสงสัย 😎
เมื่อต้องการหายอดรวมทั้งหมดเพื่อคำนวณ Ratio โดยไม่ต้องการให้ Slicer ใดๆ (แม้แต่จากตารางที่สัมพันธ์กันแบบ Many-to-Many หรือ Bi-directional) ส่งผลกระทบ
ตัวหารใช้ ALLCROSSFILTERED('Product') เพื่อล้างตัวกรองที่กระทำต่อ Product รวมถึงตัวกรองที่ไหลมาจากความสัมพันธ์ ทำให้ได้ยอดรวม "ทุกสินค้า" อย่างสม่ำเสมอแม้โมเดลมีความสัมพันธ์ซับซ้อน
ALLCROSSFILTERED('Product') จะลบตัวกรองที่กระทำต่อ Product ทั้งหมด รวมถึงตัวกรองที่เกิดจากการไหลผ่าน Relationship ทำให้ Product ไม่สามารถลดทอนแถวของ Sales ในการคำนวณนี้ได้
ตัวอย่างนี้แสดงว่า ALLCROSSFILTERED ใช้ใน CALCULATE เท่านั้น ไม่สามารถใช้เดี่ยวๆ ถ้า ALL กับ ALLCROSSFILTERED ให้ผลต่างกัน แสดงว่าโมเดลมี cross-filtering
ALL เป็นได้ทั้ง Table Function (คืนค่าตาราง) และ Modifier ส่วน ALLCROSSFILTERED เป็นได้แค่ Modifier เท่านั้นใน CALCULATE ในแง่ filter context ทั้งคู่ล้าง filter แต่ ALLCROSSFILTERED ล้างเพิ่มเติม – มันลบตัวกรองที่ผ่านมาจาก weak relationships หรือ bidirectional filter ซึ่ง ALL ไม่ทำ ยกตัวอย่าง ALL อาจให้ 135 products แต่ ALLCROSSFILTERED อาจให้ 2,517 ทั้งหมด
ไม่ได้ ALLCROSSFILTERED รับ argument เป็นตารางเท่านั้น หากต้องการล้างเฉพาะคอลัมน์ ให้ใช้ ALL(ColumnName) แทน ALLCROSSFILTERED ใช้ได้เมื่อต้องล้างทั้งตาราง
REMOVEFILTERS ล้าง filter จากคอลัมน์เฉพาะ ส่วน ALLCROSSFILTERED ล้างทั้งตารางรวมถึง cross-filter จากความสัมพันธ์ อีกอย่าง REMOVEFILTERS ใช้กับคอลัมน์ได้แต่ ALLCROSSFILTERED เฉพาะตาราง
ฟังก์ชันที่ผู้เขียนโยงไว้กับ ALLCROSSFILTERED จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
ALL มีพฤติกรรมแตกต่างกัน 2 แบบ: ใช้เป็น Table Expression จะคืนทุกแถวในตาราง หรือทุกค่าในคอลัมน์ โดยไม่สนใจ Filter ใดๆ เหมาะสำหรับใช้ร่วมกับ FILTER, COUNTROWS, SUMMARIZE หรือใช้เป็น CALCULATE Modifier เพื่อลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ทำให้สามารถคำนวณ Grand Total หรือหาเปอร์เซ็นต์เทียบกับยอดรวมได้
ALLEXCEPT ใช้สำหรับ “ล้างตัวกรองเกือบทั้งหมด” โดยคงตัวกรองไว้เฉพาะคอลัมน์ที่ระบุ เหมาะกับการคำนวณ Sub-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 ได้ดีกว่า
FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน
REMOVEFILTERS ลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ใช้ได้ใน CALCULATE เท่านั้น เทียบเท่า ALL เมื่อใช้เป็น CALCULATE Modifier แต่ชัดเจนและอ่านโค้ดง่ายกว่า แนะนำใช้แทน ALL เพราะสื่อความหมายได้ดีกว่า
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่