ALLEXCEPT ใช้สำหรับ “ล้างตัวกรองเกือบทั้งหมด” โดยคงตัวกรองไว้เฉพาะคอลัมน์ที่ระบุ เหมาะกับการคำนวณ Sub-total/สัดส่วนภายในกลุ่ม เช่น ยอดขายต่อหมวดหมู่ โดยไม่สนตัวกรองอื่น ๆ แนวคิดหลักคือ ลบตัวกรองของตาราง แล้วคงตัวกรองของคอลัมน์ที่เลือกไว้
=ALLEXCEPT(<table>, <column1>)
=ALLEXCEPT(<table>, <column1>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| table | table | Yes | ตารางที่ต้องการล้างตัวกรอง (เช่น Sales, Product) | |
| column1 | column | Yes | คอลัมน์แรกที่ต้องการ “ยกเว้น” ไม่ให้ถูกล้างตัวกรอง (คง Filter ไว้) ต้องอยู่ในตารางเดียวกับ table | |
| column2 | column | Optional | ไม่มีคอลัมน์เพิ่มเติม | คอลัมน์เพิ่มเติมที่ต้องการคงตัวกรองไว้ สามารถใส่ได้หลายคอลัมน์ |
ใช้ ALLEXCEPT ส่งคืนตารางที่ยังคงตัวกรองของคอลัมน์ที่ระบุไว้ แต่ล้างตัวกรองอื่น ๆ ออก เหมาะกับการทำงานร่วมกับ FILTER และ COUNTROWS เมื่อต้องการยึด “กลุ่ม” บางมิติไว้
ใช้ ALLEXCEPT ภายใน CALCULATE เพื่อลบ Filter ทั้งหมดยกเว้น Category หายอดรวมต่อ Category โดยไม่สน Filter อื่นๆ
คำนวณสัดส่วน % ภายในกลุ่ม เช่น % ยอดขายของแต่ละสินค้าเทียบกับหมวดหมู่ของมันเอง
Category Total = CALCULATE( SUM(Sales[Amount]), ALLEXCEPT(Sales, Product[Category]) )Category Total =
CALCULATE(
SUM(Sales[Amount]),
ALLEXCEPT(Sales, Product[Category])
)
ยอดขายรวมต่อหมวดหมู่
% of Category = DIVIDE( [Sales Amount], CALCULATE( [Sales Amount], ALLEXCEPT(Sales, Product[Category]) ) )% of Category =
DIVIDE(
[Sales Amount],
CALCULATE(
[Sales Amount],
ALLEXCEPT(Sales, Product[Category])
)
)
% ยอดขายเทียบกับหมวดหมู่
Sales By Year Category = CALCULATE( SUM(Sales[Amount]), ALLEXCEPT( Sales, 'Date'[Year], Product[Category] ) )Sales By Year Category =
CALCULATE(
SUM(Sales[Amount]),
ALLEXCEPT(
Sales,
'Date'[Year],
Product[Category]
)
)
ยอดขายรวมต่อปีและหมวดหมู่
Products In Category = COUNTROWS( ALLEXCEPT( Product, Product[Category] ) )Products In Category =
COUNTROWS(
ALLEXCEPT(
Product,
Product[Category]
)
)
จำนวนสินค้าในหมวดหมู่เดียวกัน
เมื่อใช้นอก CALCULATE (เช่น ใน FILTER, COUNTROWS) ALLEXCEPT จะคืนตารางจริงที่มีทุกแถวแต่ยังคง Filter บางคอลัมน์ แต่เมื่อใช้ใน CALCULATE มันจะไม่คืนตาราง แต่ทำหน้าที่ลบ Filter ทั้งหมดยกเว้นคอลัมน์ที่ระบุ
ALLEXCEPT(Table, Col1, Col2) เทียบเท่ากับ ALL(Table) + VALUES(Col1) + VALUES(Col2) แต่สั้นกว่าและอ่านง่ายกว่า เป็น Shortcut ที่นิยมใช้มาก
ALLEXCEPT(Sales, Product[Category]) จะลบ Filter จากทั้ง Sales และ Dimension Tables ที่เชื่อมด้วย Relationship (Date, Customer, Store) แต่จะเพิ่ม Filter Product[Category] กลับ ถ้าต้องการควบคุมแม่นยำกว่า แนะนำใช้ REMOVEFILTERS แทน
ALLEXCEPT สั้นกว่าเมื่อต้องการยกเว้นคอลัมน์น้อยๆ แต่ REMOVEFILTERS ชัดเจนกว่าเมื่อต้องการลบคอลัมน์เฉพาะ ขึ้นอยู่กับกรณี ถ้ามีคอลัมน์เยอะแนะนำใช้ REMOVEFILTERS
ALLEXCEPT เป็นฟังก์ชันที่มี 2 พฤติกรรมแตกต่างกัน ขึ้นอยู่กับบริบทการใช้งาน:
คืนค่า ตารางจริง ที่มีแถวทั้งหมดในตาราง โดยไม่สนตัวกรองใดๆ เหมือน ALL แต่ยังคง Filter ที่ระบุไว้ในคอลัมน์ที่เลือก มักใช้ใน FILTER, COUNTROWS
ทำหน้าที่ ลบตัวกรองทั้งหมดยกเว้นคอลัมน์ที่ระบุ ไม่ได้คืนค่าตาราง แต่แก้ไข Filter Context ให้ CALCULATE มีประโยชน์มากในการคำนวณ Sub-total ตาม Dimension เฉพาะ
หมายเหตุ: ALLEXCEPT(Table, Columns) = ALL(Table) ลบคอลัมน์ยกเว้น + เพิ่ม Filter คอลัมน์ที่ยกเว้นกลับ แต่ระวังเรื่อง Expanded Table