ALLCROSSFILTERED ใช้ล้างตัวกรองทั้งหมดออกจากตารางที่ระบุ รวมถึงตัวกรองที่ส่งผ่านมาจากตารางอื่น (Cross-filter) ใช้ได้เฉพาะเป็น Modifier ใน CALCULATE/CALCULATETABLE เท่านั้น ไม่สามารถคืนค่าเป็นตารางได้
=ALLCROSSFILTERED(<table>)
=ALLCROSSFILTERED(<table>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| table | table | Yes | ตารางที่ต้องการล้างตัวกรอง |
เมื่อต้องการหายอดรวมทั้งหมดเพื่อคำนวณ Ratio โดยไม่ต้องการให้ Slicer ใดๆ (แม้แต่จากตารางที่สัมพันธ์กันแบบ Many-to-Many หรือ Bi-directional) ส่งผลกระทบ
Pct Sales vs All Products = DIVIDE( SUM(Sales[Sales Amount]), CALCULATE( SUM(Sales[Sales Amount]), ALLCROSSFILTERED('Product') ) )Pct Sales vs All Products =
DIVIDE(
SUM(Sales[Sales Amount]),
CALCULATE(
SUM(Sales[Sales Amount]),
ALLCROSSFILTERED('Product')
)
)
เปอร์เซ็นต์ยอดขายของบริบทปัจจุบันเทียบกับยอดรวมทุกสินค้า (ยังคงตัวกรองอื่น เช่น ปี/ลูกค้า ไว้)
Sales No Product Filter = CALCULATE( SUM(Sales[Sales Amount]), ALLCROSSFILTERED('Product') )Sales No Product Filter =
CALCULATE(
SUM(Sales[Sales Amount]),
ALLCROSSFILTERED('Product')
)
ยอดขายรวมที่ไม่ถูกกรองด้วย Product (เช่น Color/Category) แต่ยังเคารพตัวกรองอื่นที่ไม่ได้มาจาก Product
VAR AllProducts = CALCULATE(COUNTROWS('Product'), ALL('Product')) VAR AllCrossProductCount = CALCULATE(COUNTROWS('Product'), ALLCROSSFILTERED('Product')) RETURN…VAR AllProducts = CALCULATE(COUNTROWS('Product'), ALL('Product'))
VAR AllCrossProductCount = CALCULATE(COUNTROWS('Product'), ALLCROSSFILTERED('Product'))
RETURN
IF(
AllProducts <> AllCrossProductCount,
"Model uses Many-to-Many or Cross-filtering",
"Simple relationship, both give same result"
)
ข้อความบอกว่าใช้ Many-to-Many หรือ 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 เป็นฟังก์ชันที่ใช้ล้างตัวกรองทั้งหมดออกจากตารางที่ระบุ รวมถึงตัวกรองที่ไหลเข้ามาจากตารางอื่นผ่าน 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 ผิดเพี้ยนหรือข้อมูลไม่ครอบคลุม ลองใช้อันนี้ดูครับ ไม่ต้องสงสัย 😎