NONVISUAL ใช้ทำเครื่องหมายว่า filter expression นี้เป็น non-visual ซึ่งหมายความว่ามันจะส่งผลต่อการคำนวณ measure แต่จะไม่ไปทำให้แถวที่แสดงในตารางสรุปเปลี่ยนไป มักใช้ร่วมกับ SUMMARIZECOLUMNS เพื่อควบคุมพฤติกรรมของตัวกรองอย่างละเอียด
=NONVISUAL(<Expression>)
=NONVISUAL(<Expression>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| Expression | table or filter expression | Yes | table expression หรือ filter expression ที่ต้องการจะทำให้เป็น non-visual ช่วงแรกของ SUMMARIZECOLUMNS จะใช้มันเพื่อกรองแล้วแต่ไม่ไปกำหนดแถวที่แสดง |
ให้ตัวกรองมีผลต่อค่าที่คำนวณ แต่ไม่ใช่ตัวกำหนดชุดแถวที่แสดง
แยก “ตัวกรองเพื่อคำนวณ” ออกจาก “ตัวกรองเพื่อเลือกแถวที่แสดง”
Sales by Category = SUMMARIZECOLUMNS( Product[Category], "Total Sales", [Total Sales], NONVISUAL(TREATAS({"Brand A", "Brand B"}, Product[Brand])) )Sales by Category =
SUMMARIZECOLUMNS(
Product[Category],
"Total Sales", [Total Sales],
NONVISUAL(TREATAS({"Brand A", "Brand B"}, Product[Brand]))
)
ตารางแสดงทุก Category แต่การคำนวณ [Total Sales] เอามาจากเฉพาะ Brand A และ Brand B เท่านั้น
Sales with Brand Filter = VAR SelectedBrands = VALUES(Product[Brand]) RETURN SUMMARIZECOLUMNS( Product[Category], "Category Sales", [Total Sales], NONVISUAL(TRE…Sales with Brand Filter =
VAR SelectedBrands = VALUES(Product[Brand])
RETURN
SUMMARIZECOLUMNS(
Product[Category],
"Category Sales", [Total Sales],
NONVISUAL(TREATAS(SelectedBrands, Product[Brand]))
)
สรุปข้อมูลตาม Category โดยมีตัวกรองจาก SelectedBrands เป็น non-visual
Compare Behavior = VAR WithNonvisual = SUMMARIZECOLUMNS( Product[Category], "Sales NV", [Total Sales], NONVISUAL(TREATAS({"USA", "UK"}, Sales[Country])) ) VAR W…Compare Behavior =
VAR WithNonvisual = SUMMARIZECOLUMNS(
Product[Category],
"Sales NV", [Total Sales],
NONVISUAL(TREATAS({"USA", "UK"}, Sales[Country]))
)
VAR WithIgnore = SUMMARIZECOLUMNS(
Product[Category],
"Sales Ignore", [Total Sales],
IGNORE(TREATAS({"USA", "UK"}, Sales[Country]))
)
RETURN
WithNonvisual
NONVISUAL: ทุก Category แสดง แต่ Sales มาจากแค่ USA/UK เท่านั้น; IGNORE: อาจเห็นแถว Country ปรากฏหากไม่มี non-blank value
ใช่ มันเป็นตัวกรองจริง มีผลต่อการคำนวณ measure ทั้งหมด แต่จุดเด่นคือมันไม่ส่งผลต่อชุดแถวที่ SUMMARIZECOLUMNS เลือกที่จะแสดง ถ้าคิด “visual” ว่าคือชุดแถว NONVISUAL ก็คือตัวกรองที่ mask ไว้ข้างนอก visual ส่วนตัวผมว่า NONVISUAL คือ “invisible wall” ที่ measure รู้อยู่ แต่ table builder ไม่รู้
NONVISUAL ทำให้ filter expression ไม่ส่งผลต่อแถวที่จะแสดง แต่มีผลต่อ measure; IGNORE ทำให้ expression ไม่ส่งผลต่อการตัดสินแถว non-blank ใน SUMMARIZECOLUMNS (แต่ยังมีผลต่อ filter context) ผมเห็นพวกนี้เหมือน: NONVISUAL = “ซ่อนตัวกรองจาก visual” IGNORE = “ไม่นับ expression นี้เมื่อตัดสินว่าแถวไหน blank”
ทั้งทางการและในทางปฏิบัติ NONVISUAL ออกแบบมาใช้ใน SUMMARIZECOLUMNS หรือ SUMMARIZE ฟังก์ชันอื่น ๆ ที่สร้าง table ส่วนตัวผมแนะนำเฉพาะใช้ใน SUMMARIZECOLUMNS เพราะที่นั่นมันมีความหมายชัดเจน
แถวอาจหายเพราะ SUMMARIZECOLUMNS ตัดแถว non-blank (ของ measure) และตัดแถวที่ filter ยังไม่มีข้อมูล NONVISUAL ช่วยได้เพราะมันบอก SUMMARIZECOLUMNS ว่า “filter นี้ไม่นับในการตัดสินแถว” ซึ่งช่วยให้ ALLSELECTED ในการคำนวณ measure ทำงานได้ภาพกว้างขึ้น หากยังเห็นแถวหายให้ลองใช้ IGNORE ร่วมด้วย
ใช่ NONVISUAL ทำให้ ALLSELECTED คิดถึง “context ที่กว้างกว่า” NONVISUAL filter ไม่ถูกมองเป็นส่วนของ visual filter ดังนั้น ALLSELECTED จึง “เห็นข้อมูลนอก NONVISUAL filter” มันเหมือนบอก ALLSELECTED ว่า “อันนี้ไม่นับนะ” ผมใช้มันเมื่อต้องการให้ ALLSELECTED ทำงานกว้างขึ้น
NONVISUAL เป็นฟังก์ชันที่ควบคุมวิธีการทำงานของ filter ภายใน SUMMARIZECOLUMNS นั่นคือมันทำให้ filter เป็น “non-visual” – ส่งผลต่อการคำนวณ measure แต่ไม่ส่งผลต่อชุดแถวที่ SUMMARIZECOLUMNS จะแสดง
ที่เจ๋งคือ NONVISUAL ช่วยสำหรับการควบคุมแบบละเอียด เวลาคุณต้องการให้ measure คำนวณภายใต้ filter บางตัว แต่ยังต้องการให้ filter นั้นไม่ไปตัดแถวในตารางสรุป มันจะสนับสนุน ALLSELECTED ให้ทำงานภาพกว้างขึ้น แทนที่จะ “สอง context” มันจะเป็น “context ที่มี expression ส่วน visual ได้เอกสิทธิ์แยกกัน”
ส่วนตัวผมเห็นว่า NONVISUAL เหมือนเครื่องคั่น context – มันบอก DAX ว่า “ตัวกรองนี้เป็นความลับของ measure ขอไม่เอาไปแสดงในตารางหลักนะ” ใช้อย่างถูกต้องมันจะช่วยแก้ปัญหา “แถวหาย” หรือ “แถวพิลึก” ในตารางสรุปได้ยอดเยี่ยม