Thep Excel

NONVISUAL – ทำให้ตัวกรองไม่ส่งผลกระทบต่อสิ่งที่ visual แสดง

NONVISUAL ใช้ทำเครื่องหมายว่า filter expression นี้เป็น non-visual ซึ่งหมายความว่ามันจะส่งผลต่อการคำนวณ measure แต่จะไม่ไปทำให้แถวที่แสดงในตารางสรุปเปลี่ยนไป มักใช้ร่วมกับ SUMMARIZECOLUMNS เพื่อควบคุมพฤติกรรมของตัวกรองอย่างละเอียด

=NONVISUAL(<Expression>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
5/10

Difficulty
5/10

Usefulness
5/10

Syntax & Arguments

=NONVISUAL(<Expression>)

Argument Type Required Default Description
Expression table or filter expression Yes table expression หรือ filter expression ที่ต้องการจะทำให้เป็น non-visual ช่วงแรกของ SUMMARIZECOLUMNS จะใช้มันเพื่อกรองแล้วแต่ไม่ไปกำหนดแถวที่แสดง

How it works

มีตัวกรองประกอบแต่ไม่อยากให้แถวในผลลัพธ์เปลี่ยน

ให้ตัวกรองมีผลต่อค่าที่คำนวณ แต่ไม่ใช่ตัวกำหนดชุดแถวที่แสดง

ควบคุมพฤติกรรมของตารางสรุปใน SUMMARIZECOLUMNS

แยก “ตัวกรองเพื่อคำนวณ” ออกจาก “ตัวกรองเพื่อเลือกแถวที่แสดง”

Examples

ตัวอย่างที่ 1: NONVISUAL ใน SUMMARIZECOLUMNS – ตัวกรองแยกจากการแสดงผล
Sales by Category = SUMMARIZECOLUMNS( Product[Category], "Total Sales", [Total Sales], NONVISUAL(TREATAS({"Brand A", "Brand B"}, Product[Brand])) )
NONVISUAL ทำให้ TREATAS filter มีผลต่อการคำนวณ measure แต่ไม่ส่งผลต่อชุดแถว (Category) ที่จะแสดง ถ้าไม่มี NONVISUAL SUMMARIZECOLUMNS อาจตัดแถว Brand A/B ที่ไม่มีข้อมูลออกไป
DAX Formula:

Sales by Category =
SUMMARIZECOLUMNS(
    Product[Category],
    "Total Sales", [Total Sales],
    NONVISUAL(TREATAS({"Brand A", "Brand B"}, Product[Brand]))
)

Result:

ตารางแสดงทุก Category แต่การคำนวณ [Total Sales] เอามาจากเฉพาะ Brand A และ Brand B เท่านั้น

ตัวอย่างที่ 2: NONVISUAL ร่วมกับ VALUES – ตัวกรองที่ขึ้นกับ filter context
Sales with Brand Filter = VAR SelectedBrands = VALUES(Product[Brand]) RETURN SUMMARIZECOLUMNS( Product[Category], "Category Sales", [Total Sales], NONVISUAL(TRE…
ประโยชน์คือ measure [Total Sales] จะมี filter context ของ Brand แต่ SUMMARIZECOLUMNS จะแสดงทุก Category โดยไม่ตัดแถวตามตัวกรอง
DAX Formula:

Sales with Brand Filter =
VAR SelectedBrands = VALUES(Product[Brand])
RETURN
SUMMARIZECOLUMNS(
    Product[Category],
    "Category Sales", [Total Sales],
    NONVISUAL(TREATAS(SelectedBrands, Product[Brand]))
)

Result:

สรุปข้อมูลตาม Category โดยมีตัวกรองจาก SelectedBrands เป็น non-visual

ตัวอย่างที่ 3: NONVISUAL เทียบกับ IGNORE – ความแตกต่างในการควบคุม
Compare Behavior = VAR WithNonvisual = SUMMARIZECOLUMNS( Product[Category], "Sales NV", [Total Sales], NONVISUAL(TREATAS({"USA", "UK"}, Sales[Country])) ) VAR W…
NONVISUAL ควบคุม filter context เพื่อให้ measure คำนวณได้ IGNORE ควบคุมการตัดสินแถว non-blank ใน SUMMARIZECOLUMNS ทั้งสองเป็นการควบคุมสิ่งต่างกัน
DAX Formula:

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

Result:

NONVISUAL: ทุก Category แสดง แต่ Sales มาจากแค่ USA/UK เท่านั้น; IGNORE: อาจเห็นแถว Country ปรากฏหากไม่มี non-blank value

FAQs

NONVISUAL เป็นตัวกรองจริง ๆ หรือเปล่า?

ใช่ มันเป็นตัวกรองจริง มีผลต่อการคำนวณ measure ทั้งหมด แต่จุดเด่นคือมันไม่ส่งผลต่อชุดแถวที่ SUMMARIZECOLUMNS เลือกที่จะแสดง ถ้าคิด “visual” ว่าคือชุดแถว NONVISUAL ก็คือตัวกรองที่ mask ไว้ข้างนอก visual ส่วนตัวผมว่า NONVISUAL คือ “invisible wall” ที่ measure รู้อยู่ แต่ table builder ไม่รู้

NONVISUAL ต่างจาก IGNORE อย่างไร?

NONVISUAL ทำให้ filter expression ไม่ส่งผลต่อแถวที่จะแสดง แต่มีผลต่อ measure; IGNORE ทำให้ expression ไม่ส่งผลต่อการตัดสินแถว non-blank ใน SUMMARIZECOLUMNS (แต่ยังมีผลต่อ filter context) ผมเห็นพวกนี้เหมือน: NONVISUAL = “ซ่อนตัวกรองจาก visual” IGNORE = “ไม่นับ expression นี้เมื่อตัดสินว่าแถวไหน blank”

NONVISUAL ใช้ได้นอก SUMMARIZECOLUMNS ไหม?

ทั้งทางการและในทางปฏิบัติ NONVISUAL ออกแบบมาใช้ใน SUMMARIZECOLUMNS หรือ SUMMARIZE ฟังก์ชันอื่น ๆ ที่สร้าง table ส่วนตัวผมแนะนำเฉพาะใช้ใน SUMMARIZECOLUMNS เพราะที่นั่นมันมีความหมายชัดเจน

แถวหายเพราะอะไร? NONVISUAL แก้ได้ไหม?

แถวอาจหายเพราะ SUMMARIZECOLUMNS ตัดแถว non-blank (ของ measure) และตัดแถวที่ filter ยังไม่มีข้อมูล NONVISUAL ช่วยได้เพราะมันบอก SUMMARIZECOLUMNS ว่า “filter นี้ไม่นับในการตัดสินแถว” ซึ่งช่วยให้ ALLSELECTED ในการคำนวณ measure ทำงานได้ภาพกว้างขึ้น หากยังเห็นแถวหายให้ลองใช้ IGNORE ร่วมด้วย

NONVISUAL ส่งผลต่อ ALLSELECTED ไหม?

ใช่ NONVISUAL ทำให้ ALLSELECTED คิดถึง “context ที่กว้างกว่า” NONVISUAL filter ไม่ถูกมองเป็นส่วนของ visual filter ดังนั้น ALLSELECTED จึง “เห็นข้อมูลนอก NONVISUAL filter” มันเหมือนบอก ALLSELECTED ว่า “อันนี้ไม่นับนะ” ผมใช้มันเมื่อต้องการให้ ALLSELECTED ทำงานกว้างขึ้น

Resources & Related

Additional Notes

NONVISUAL เป็นฟังก์ชันที่ควบคุมวิธีการทำงานของ filter ภายใน SUMMARIZECOLUMNS นั่นคือมันทำให้ filter เป็น “non-visual” – ส่งผลต่อการคำนวณ measure แต่ไม่ส่งผลต่อชุดแถวที่ SUMMARIZECOLUMNS จะแสดง

ที่เจ๋งคือ NONVISUAL ช่วยสำหรับการควบคุมแบบละเอียด เวลาคุณต้องการให้ measure คำนวณภายใต้ filter บางตัว แต่ยังต้องการให้ filter นั้นไม่ไปตัดแถวในตารางสรุป มันจะสนับสนุน ALLSELECTED ให้ทำงานภาพกว้างขึ้น แทนที่จะ “สอง context” มันจะเป็น “context ที่มี expression ส่วน visual ได้เอกสิทธิ์แยกกัน”

ส่วนตัวผมเห็นว่า NONVISUAL เหมือนเครื่องคั่น context – มันบอก DAX ว่า “ตัวกรองนี้เป็นความลับของ measure ขอไม่เอาไปแสดงในตารางหลักนะ” ใช้อย่างถูกต้องมันจะช่วยแก้ปัญหา “แถวหาย” หรือ “แถวพิลึก” ในตารางสรุปได้ยอดเยี่ยม

Leave a Reply

Your email address will not be published. Required fields are marked *