ตัวอย่างที่ 1: CALCULATE Modifier – Sub-total ต่อหมวดหมู่
Category Total =
CALCULATE(
SUM(Sales[Amount]),
ALLEXCEPT(Sales, Product[Category])
)
ยอดขายรวมต่อหมวดหมู่
ล้าง Filter ทุกคอลัมน์ยกเว้นที่เลือก (Shortcut ของ ALL + VALUES)
ALLEXCEPT มี 2 พฤติกรรม: (1) Table Function – คืนตารางจริงที่มีทุกแถวแต่ยังคง Filter บางคอลัมน์ (2) CALCULATE Modifier – ลบ Filter ทั้งหมดยกเว้นคอลัมน์ที่ระบุ ใช้คำนวณ Sub-total ตาม Dimension เฉพาะ เทียบเท่า ALL(Table) + VALUES(Column) แต่สั้นกว่า
=ALLEXCEPT( Table, Column1, [Column2], ... )
=ALLEXCEPT( Table, Column1, [Column2], ... )
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Table | table | Yes | ตารางที่ต้องการลบ Filter (ต้องระบุชื่อตารางเสมอ) | |
| Column1, Column2, … | column | Yes | คอลัมน์ที่ต้องการ **ยกเว้น** (คง Filter ไว้) ต้องระบุอย่างน้อย 1 คอลัมน์ และต้องอยู่ในตารางเดียวกัน |
ใช้ ALLEXCEPT ส่งคืนตารางจริงที่มีทุกแถวแต่ยังคง Filter บางคอลัมน์ไว้ มักใช้ร่วมกับ FILTER, COUNTROWS เมื่อต้องการยกเว้น Filter เฉพาะ
ใช้ ALLEXCEPT ภายใน CALCULATE เพื่อลบ Filter ทั้งหมดยกเว้น Category หายอดรวมต่อ Category โดยไม่สน Filter อื่นๆ
คำนวณสัดส่วน % ภายในกลุ่ม เช่น % ยอดขายของแต่ละสินค้าเทียบกับหมวดหมู่ของมันเอง
Category Total =
CALCULATE(
SUM(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]
)
)
ยอดขายรวมต่อปีและหมวดหมู่
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