Thep Excel

ALLCROSSFILTEREDล้างตัวกรองทั้งหมดรวมถึง Cross-filter

ALLCROSSFILTERED ใช้ล้างตัวกรองทั้งหมดออกจากตารางที่ระบุ รวมถึงตัวกรองที่ส่งผ่านมาจากตารางอื่น (Cross-filter) ใช้ได้เฉพาะเป็น Modifier ใน CALCULATE/CALCULATETABLE เท่านั้น ไม่สามารถคืนค่าเป็นตารางได้

fx
=ALLCROSSFILTERED(<table>)

ความนิยม4/10
ความยาก6/10
ประโยชน์4/10

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
table table ตารางที่ต้องการล้างตัวกรอง

Additional Notes

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 ผิดเพี้ยนหรือข้อมูลไม่ครอบคลุม ลองใช้อันนี้ดูครับ ไม่ต้องสงสัย 😎

How it works

การคำนวณ Grand Total ที่แน่นอน

เมื่อต้องการหายอดรวมทั้งหมดเพื่อคำนวณ Ratio โดยไม่ต้องการให้ Slicer ใดๆ (แม้แต่จากตารางที่สัมพันธ์กันแบบ Many-to-Many หรือ Bi-directional) ส่งผลกระทบ

Examples

ตัวอย่างที่ 1: คำนวณ % สัดส่วนเทียบกับยอดรวม (ตัดผล Cross-filter จาก Product)Pct Sales vs All Products = DIVIDE( SUM(Sales[Sales Amount]), CALCULATE( SUM(Sales[Sales Amount]), ALLCROSSFILTERED('Product') ) )

ตัวหารใช้ ALLCROSSFILTERED('Product') เพื่อล้างตัวกรองที่กระทำต่อ Product รวมถึงตัวกรองที่ไหลมาจากความสัมพันธ์ ทำให้ได้ยอดรวม "ทุกสินค้า" อย่างสม่ำเสมอแม้โมเดลมีความสัมพันธ์ซับซ้อน

fx
Pct Sales vs All Products =
DIVIDE(
SUM(Sales[Sales Amount]),
CALCULATE(
SUM(Sales[Sales Amount]),
ALLCROSSFILTERED('Product')
)
)

ผลลัพธ์เปอร์เซ็นต์ยอดขายของบริบทปัจจุบันเทียบกับยอดรวมทุกสินค้า (ยังคงตัวกรองอื่น เช่น ปี/ลูกค้า ไว้)
ตัวอย่างที่ 2: ล้างตัวกรองจากตาราง Dimension (กันการกรองข้ามตาราง)Sales No Product Filter = CALCULATE( SUM(Sales[Sales Amount]), ALLCROSSFILTERED('Product') )

ALLCROSSFILTERED('Product') จะลบตัวกรองที่กระทำต่อ Product ทั้งหมด รวมถึงตัวกรองที่เกิดจากการไหลผ่าน Relationship ทำให้ Product ไม่สามารถลดทอนแถวของ Sales ในการคำนวณนี้ได้

fx
Sales No Product Filter =
CALCULATE(
SUM(Sales[Sales Amount]),
ALLCROSSFILTERED('Product')
)

ผลลัพธ์ยอดขายรวมที่ไม่ถูกกรองด้วย Product (เช่น Color/Category) แต่ยังเคารพตัวกรองอื่นที่ไม่ได้มาจาก Product
ตัวอย่างที่ 3: เปรียบเทียบกับ ALL – ความแตกต่างในการใช้งานVAR AllProducts = CALCULATE(COUNTROWS('Product'), ALL('Product')) VAR AllCrossProductCount = CALCULATE(COUNTROWS('Product'), ALLCROSSFILTERED('Product')) RETURN…

ตัวอย่างนี้แสดงว่า ALLCROSSFILTERED ใช้ใน CALCULATE เท่านั้น ไม่สามารถใช้เดี่ยวๆ ถ้า ALL กับ ALLCROSSFILTERED ให้ผลต่างกัน แสดงว่าโมเดลมี cross-filtering

fx
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 หรือไม่

FAQs

ALLCROSSFILTERED ต่างจาก ALL อย่างไร?+

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 ใช้ได้เมื่อต้องล้างทั้งตาราง

ALLCROSSFILTERED vs REMOVEFILTERS ต่างกันไหม?+

REMOVEFILTERS ล้าง filter จากคอลัมน์เฉพาะ ส่วน ALLCROSSFILTERED ล้างทั้งตารางรวมถึง cross-filter จากความสัมพันธ์ อีกอย่าง REMOVEFILTERS ใช้กับคอลัมน์ได้แต่ ALLCROSSFILTERED เฉพาะตาราง

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ ALLCROSSFILTERED จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้ALLCROSSFILTEREDFilter
Filter (6)
ALL

ALL มีพฤติกรรมแตกต่างกัน 2 แบบ: ใช้เป็น Table Expression จะคืนทุกแถวในตาราง หรือทุกค่าในคอลัมน์ โดยไม่สนใจ Filter ใดๆ เหมาะสำหรับใช้ร่วมกับ FILTER, COUNTROWS, SUMMARIZE หรือใช้เป็น CALCULATE Modifier เพื่อลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ทำให้สามารถคำนวณ Grand Total หรือหาเปอร์เซ็นต์เทียบกับยอดรวมได้

ALLEXCEPT

ALLEXCEPT ใช้สำหรับ “ล้างตัวกรองเกือบทั้งหมด” โดยคงตัวกรองไว้เฉพาะคอลัมน์ที่ระบุ เหมาะกับการคำนวณ Sub-total/สัดส่วนภายในกลุ่ม เช่น ยอดขายต่อหมวดหมู่ โดยไม่สนตัวกรองอื่น ๆ แนวคิดหลักคือ ลบตัวกรองของตาราง แล้วคงตัวกรองของคอลัมน์ที่เลือกไว้

CALCULATE

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

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

FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน

REMOVEFILTERS

REMOVEFILTERS ลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ใช้ได้ใน CALCULATE เท่านั้น เทียบเท่า ALL เมื่อใช้เป็น CALCULATE Modifier แต่ชัดเจนและอ่านโค้ดง่ายกว่า แนะนำใช้แทน ALL เพราะสื่อความหมายได้ดีกว่า

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่