ตัวอย่างที่ 1: CALCULATE Modifier – Grand Total ไม่รวม Blank
All Sales No Blank =
CALCULATE(
SUM(Sales[Amount]),
ALLNOBLANKROW(Sales)
)
ยอดขายรวมทั้งหมด (ไม่รวม Blank Row)
เหมือน ALL แต่ตัด Blank Row ออก (แก้ปัญหา Data Quality)
ALLNOBLANKROW มี 2 พฤติกรรม: (1) Table Function – คืนตารางจริงที่มีทุกแถวแต่ตัด Blank Row ออก (2) CALCULATE Modifier – ลบ Filter ทั้งหมดและตัด Blank Row เหมาะใช้เมื่อมี Data Quality Issues ในความสัมพันธ์ เทียบเท่า ALL แต่เพิ่มเงื่อนไข ISBLANK = FALSE
=ALLNOBLANKROW( [Table | Column1, Column2, ...] )
=ALLNOBLANKROW( [Table | Column1, Column2, ...] )
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Table หรือ Column | table/column | Yes | ตารางหรือคอลัมน์ที่ต้องการล้างตัวกรองและดึงข้อมูลทั้งหมดออกมา โดยตัด Blank Row ออก |
ใช้ ALLNOBLANKROW ส่งคืนตารางจริงที่มีทุกแถวยกเว้น Blank Row เหมาะกับกรณีมี Data Quality Issues
ใช้ ALLNOBLANKROW ภายใน CALCULATE เพื่อลบ Filter ทั้งหมดแต่ไม่รวม Blank Row ในการคำนวณ
เมื่อมี Fact Records ที่ไม่มี Dimension Record คู่กัน จะเกิด Blank Row ใช้ ALLNOBLANKROW เพื่อตัดออก
All Sales No Blank =
CALCULATE(
SUM(Sales[Amount]),
ALLNOBLANKROW(Sales)
)
ยอดขายรวมทั้งหมด (ไม่รวม Blank Row)
% Excluding Blank =
DIVIDE(
[Sales Amount],
CALCULATE(
[Sales Amount],
ALLNOBLANKROW(Product[Category])
)
)
% ยอดขายไม่รวมสินค้าที่ไม่มี Category
Products With Category =
COUNTROWS(
ALLNOBLANKROW(Product[Category])
)
จำนวนสินค้าที่มี Category (ไม่นับที่เป็นค่าว่าง)
-- ALL รวม Blank
ALL Total =
CALCULATE(
[Sales Amount],
ALL(Product)
)
-- ALLNOBLANKROW ไม่รวม Blank
No Blank Total =
CALCULATE(
[Sales Amount],
ALLNOBLANKROW(Product)
)
ความแตกต่างระหว่าง ALL และ ALLNOBLANKROW
เกิดจาก Fact Records ที่มี Foreign Key ที่ไม่ตรงกับ Primary Key ใน Dimension Table เช่น Sales Record ที่มี ProductKey = 999 แต่ไม่มี Product ที่ ProductKey = 999 DAX จะสร้าง Blank Row ให้อัตโนมัติ
เมื่อใช้นอก CALCULATE (เช่น ใน FILTER, COUNTROWS) ALLNOBLANKROW จะคืนตารางจริงที่มีทุกแถวยกเว้น Blank Row แต่เมื่อใช้ใน CALCULATE มันจะไม่คืนตาราง แต่ทำหน้าที่ลบ Filter ทั้งหมดและตัด Blank Row
ถ้า Data Model มี Data Quality ดี (ไม่มี Orphan Records) ใช้ ALL ได้เลย ถ้ามีปัญหา Blank Row แนะนำใช้ ALLNOBLANKROW แต่วิธีที่ดีที่สุดคือแก้ไข Data Quality ที่ต้นทาง
ALLNOBLANKROW = ALL + ISBLANK = FALSE ทำงานเหมือน ALL ทุกประการแต่เพิ่มเงื่อนไขตัด Blank Row ออก
ALLNOBLANKROW เป็นฟังก์ชันที่มี 2 พฤติกรรมแตกต่างกัน ขึ้นอยู่กับบริบทการใช้งาน:
คืนค่า ตารางจริง ที่มีแถวทั้งหมดโดยไม่สนตัวกรอง แต่ตัดแถวว่าง (Blank Row) ออก Blank Row เกิดจากความสัมพันธ์ที่ไม่สมบูรณ์ระหว่างตาราง มักใช้ใน FILTER, COUNTROWS
ทำหน้าที่ ลบตัวกรองทั้งหมดและตัด Blank Row ไม่ได้คืนค่าตาราง แต่แก้ไข Filter Context ให้ CALCULATE มีประโยชน์เมื่อต้องการ Grand Total โดยไม่รวม Blank Row
หมายเหตุ: ALLNOBLANKROW เหมือน ALL แต่เพิ่มเงื่อนไข ISBLANK = FALSE เข้าไป ใช้เมื่อมีปัญหา Data Quality ในความสัมพันธ์