NONVISUAL ใช้ทำเครื่องหมายว่า filter expression นี้เป็น non-visual ซึ่งหมายความว่ามันจะส่งผลต่อการคำนวณ measure แต่จะไม่ไปทำให้แถวที่แสดงในตารางสรุปเปลี่ยนไป มักใช้ร่วมกับ SUMMARIZECOLUMNS เพื่อควบคุมพฤติกรรมของตัวกรองอย่างละเอียด
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| Expression | table or filter expression | table expression หรือ filter expression ที่ต้องการจะทำให้เป็น non-visual ช่วงแรกของ SUMMARIZECOLUMNS จะใช้มันเพื่อกรองแล้วแต่ไม่ไปกำหนดแถวที่แสดง |
NONVISUAL เป็นฟังก์ชันที่ควบคุมวิธีการทำงานของ filter ภายใน SUMMARIZECOLUMNS นั่นคือมันทำให้ filter เป็น “non-visual” – ส่งผลต่อการคำนวณ measure แต่ไม่ส่งผลต่อชุดแถวที่ SUMMARIZECOLUMNS จะแสดง
ที่เจ๋งคือ NONVISUAL ช่วยสำหรับการควบคุมแบบละเอียด เวลาคุณต้องการให้ measure คำนวณภายใต้ filter บางตัว แต่ยังต้องการให้ filter นั้นไม่ไปตัดแถวในตารางสรุป มันจะสนับสนุน ALLSELECTED ให้ทำงานภาพกว้างขึ้น แทนที่จะ “สอง context” มันจะเป็น “context ที่มี expression ส่วน visual ได้เอกสิทธิ์แยกกัน”
ส่วนตัวผมเห็นว่า NONVISUAL เหมือนเครื่องคั่น context – มันบอก DAX ว่า “ตัวกรองนี้เป็นความลับของ measure ขอไม่เอาไปแสดงในตารางหลักนะ” ใช้อย่างถูกต้องมันจะช่วยแก้ปัญหา “แถวหาย” หรือ “แถวพิลึก” ในตารางสรุปได้ยอดเยี่ยม
ให้ตัวกรองมีผลต่อค่าที่คำนวณ แต่ไม่ใช่ตัวกำหนดชุดแถวที่แสดง
แยก “ตัวกรองเพื่อคำนวณ” ออกจาก “ตัวกรองเพื่อเลือกแถวที่แสดง”
NONVISUAL ทำให้ TREATAS filter มีผลต่อการคำนวณ measure แต่ไม่ส่งผลต่อชุดแถว (Category) ที่จะแสดง ถ้าไม่มี NONVISUAL SUMMARIZECOLUMNS อาจตัดแถว Brand A/B ที่ไม่มีข้อมูลออกไป
ประโยชน์คือ measure [Total Sales] จะมี filter context ของ Brand แต่ SUMMARIZECOLUMNS จะแสดงทุก Category โดยไม่ตัดแถวตามตัวกรอง
NONVISUAL ควบคุม filter context เพื่อให้ measure คำนวณได้ IGNORE ควบคุมการตัดสินแถว non-blank ใน SUMMARIZECOLUMNS ทั้งสองเป็นการควบคุมสิ่งต่างกัน
ใช่ มันเป็นตัวกรองจริง มีผลต่อการคำนวณ 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 จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
IGNORE ใช้ภายใน SUMMARIZECOLUMNS เพื่อบอกว่า expression/measure นี้ต้องถูก “ละเว้น” ตอนตัดสินว่าแถวไหนเป็น non-blank ทำให้แถวในผลลัพธ์ไม่ถูกตัดทิ้งเพียงเพราะ measure ที่เลือกละเว้นเป็น BLANK
SUMMARIZECOLUMNS เป็นฟังก์ชันหลักสำหรับสร้างตารางสรุปผล โดยจัดกลุ่มตามคอลัมน์ที่กำหนด พร้อมเพิ่มคอลัมน์คำนวณจากเมเชอร์ และสามารถใส่เงื่อนไขกรองได้ทันที
TREATAS เป็นเสมือนการสร้าง "virtual relationship" โดยไม่ต้องแก้โมเดล ช่วยให้ส่งเงื่อนไขข้ามตารางที่ไม่เชื่อมกัน หรือเมื่อต้องการส่งหลายคีย์พร้อมกัน
VALUES ดึงค่าที่ไม่ซ้ำจากคอลัมน์ หรือดึงแถวทั้งหมดจากตาราง โดยรวมแถว BLANK ที่เกิดจากข้อผิดพลาดของความสัมพันธ์ (Referential Integrity Violations) ส่วน DISTINCT จะไม่รวมแถว BLANK นี้
ALLSELECTED เป็น DAX function ที่ลบ filter context จาก Visual (row และ column filters) แต่คง filter context จาก Slicer, Page Filter และ Report Filter ไว้ ทำให้สามารถคำนวณ Visual Total ได้ ซึ่งเป็นยอดรวมของข้อมูลที่ผู้ใช้เลือกดูในปัจจุบัน ไม่ใช่ Grand Total ทั้งหมด ฟังก์ชันนี้ทำงานผ่าน Shadow Filter Context ซึ่งเป็น filter context ที่ DAX Engine เก็บไว้ก่อนที่ Visual จะเพิ่ม row/column filter เมื่อเรียก ALLSELECTED จะเรียกคืน shadow context นี้ ใช้ร่วมกับ CALCULATE และ SUM, AVERAGE, DIVIDE เพื่อคำนวณ Visual Total, Percentage of Selected, Dynamic Benchmark, Ranking within Selection และ Time Intelligence ที่เคารพ Slicer ต้องระวังการใช้งานใน iterator functions เช่น SUMX, FILTER เพราะอาจให้ผลลัพธ์ที่ไม่คาดคิด และระวัง Expanded Table Caveat ที่จะลบ filter ของ related table ด้วย
CALCULATE เป็นฟังก์ชันหลักที่สำคัญที่สุดใน DAX ใช้สำหรับ evaluate expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน สามารถเพิ่มตัวกรองใหม่ ลบตัวกรองเดิม หรือแทนที่ filter ที่มีอยู่ได้ รองรับทั้ง Boolean expression และ table expression เป็น filter arguments พร้อม filter modifier functions เช่น REMOVEFILTERS, ALL, ALLEXCEPT, KEEPFILTERS เพื่อควบคุมการกรองอย่างละเอียด มีพฤติกรรมพิเศษคือ context transition ที่เปลี่ยน row context เป็น filter context โดยอัตโนมัติ ทำให้เป็นเครื่องมือหลักในการสร้าง measure ที่ซับซ้อนและ calculated column ที่ต้องใช้ aggregation
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่