| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| [table_or_column]ไม่บังคับ | Table/Column | ลบตัวกรองทั้งหมด | ตารางหรือคอลัมน์ที่ต้องการลบตัวกรอง หากไม่ระบุ จะลบตัวกรองทั้งหมด |
| [column]ไม่บังคับ | Column | คอลัมน์เพิ่มเติมจากตารางเดียวกัน (ทำได้หลายคอลัมน์) ใช้เมื่อต้องการลบ Filter จากคอลัมน์เฉพาะ |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
REMOVEFILTERS เป็นฟังก์ชันที่ทำหน้าที่ลบตัวกรอง (Remove Filters) ออกจากตารางหรือคอลัมน์ที่ระบุในตัว CALCULATE
ส่วนตัวผมชอบ REMOVEFILTERS มากกว่า ALL เพราะมันบอกเจาะจงตรงๆ ว่า “ลบตัวกรอง” ไม่เหมือน ALL ที่มีความหมายซ้ำซ้อน (ยังเป็นได้ทั้ง Table Function และ Modifier) ทำให้โค้ดอ่านง่ายและ Intent ชัดเจนมากขึ้น 😎
ข้อสำคัญ: REMOVEFILTERS ใช้ได้ใน CALCULATE เท่านั้น ถ้าต้องการตารางจริง (Table Function) ต้องใช้ ALL แทน
ใช้เพื่อหาตัวหารที่เป็นยอดรวมทั้งหมด ที่ไม่ถูกกรอง
หาส่วนเบี่ยงเบนจากค่าเฉลี่ยที่ไม่ถูกกรอง
REMOVEFILTERS() ไม่มี Argument จะลบตัวกรองทั้งหมด ยอดขายรวมทั้ง Model ไม่ว่าผู้ใช้เลือก Filter อะไรก็ตาม
ลบตัวกรองเฉพาะจากคอลัมน์ Products[Color] เท่านั้น ตัวกรอง Brand และตัวกรองอื่นๆ ยังคงอยู่
เก็บยอดขายปัจจุบันใน CurrentSales และยอดรวมทั้งหมด (โดยลบ Filter) ใน GrandTotal แล้วหารเพื่อได้สัดส่วน
ระบุหลายคอลัมน์ได้โดยคั่นด้วยจุลภาค ลบตัวกรองจาก Brand และ Color พร้อมกัน แต่ตัวกรอง Category ยังอยู่
ระบุชื่อตาราง Products จะลบ Filter จากทุกคอลัมน์ของตาราง และจาก Dimension Table ที่เชื่อมผ่าน Relationship
เมื่อใช้ใน CALCULATE ทั้งสองทำงานเหมือนกันทุกประการ แต่ REMOVEFILTERS ชัดเจนกว่าในเรื่องความหมาย – มันบอกตรงๆ ว่า "ลบตัวกรอง" ไม่เหมือน ALL ที่มีความหมายซ้ำซ้อน (เป็นได้ทั้ง Table Function และ CALCULATE Modifier) เหตุนี้แนะนำใช้ REMOVEFILTERS เพราะโค้ดอ่านง่าย Intent ชัดเจน
ไม่ได้ REMOVEFILTERS ใช้ได้ใน CALCULATE เท่านั้น (CALCULATE Modifier) ถ้าต้องการตารางจริงต้องใช้ ALL เช่น SELECTCOLUMNS(ALL(Products), …) ตัวอย่าง: ALL(Products) คืนตารางค่าทั้งหมด แต่ REMOVEFILTERS() ใช้ในตัว CALCULATE เท่านั้น
ไม่มี REMOVEFILTERS ทำงานเหมือน ALL (ลบตัวกรองทั้งหมด) ไม่มีฟังก์ชันชัดเจนแบบ REMOVEFILTERS ที่ทำงานเหมือน ALLSELECTED (ลบตัวกรองใน Visual แต่คง Slicer) ถ้าต้องการฟังก์ชันนั้น ต้องใช้ ALLSELECTED เท่านั้น
REMOVEFILTERS(Products) ลบตัวกรองจากทั้งตาราง Products และ Dimension Table ที่เชื่อมผ่าน Relationship (เรียก Expanded Table) ส่วน REMOVEFILTERS(Products[Color]) ลบเฉพาะตัวกรองจากคอลัมน์ Products[Color] เท่านั้น
ระวัง Expanded Table – เมื่อ REMOVEFILTERS(FactTable) มันจะลบตัวกรองจากทั้ง Fact Table และ Dimension Tables ที่เชื่อมผ่าน Relationship แบบ many-to-one ถ้าต้องการลบเฉพาะบางคอลัมน์ ให้ระบุคอลัมน์ชัดเจน เช่น REMOVEFILTERS(Sales[ProductKey]) ส่วนตัวกรองอื่นจะคงอยู่
ฟังก์ชันที่ผู้เขียนโยงไว้กับ REMOVEFILTERS จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
ALL มีพฤติกรรมแตกต่างกัน 2 แบบ: ใช้เป็น Table Expression จะคืนทุกแถวในตาราง หรือทุกค่าในคอลัมน์ โดยไม่สนใจ Filter ใดๆ เหมาะสำหรับใช้ร่วมกับ FILTER, COUNTROWS, SUMMARIZE หรือใช้เป็น CALCULATE Modifier เพื่อลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ทำให้สามารถคำนวณ Grand Total หรือหาเปอร์เซ็นต์เทียบกับยอดรวมได้
ALLCROSSFILTERED ใช้ล้างตัวกรองทั้งหมดออกจากตารางที่ระบุ รวมถึงตัวกรองที่ส่งผ่านมาจากตารางอื่น (Cross-filter) ใช้ได้เฉพาะเป็น Modifier ใน CALCULATE/CALCULATETABLE เท่านั้น ไม่สามารถคืนค่าเป็นตารางได้
ALLEXCEPT ใช้สำหรับ “ล้างตัวกรองเกือบทั้งหมด” โดยคงตัวกรองไว้เฉพาะคอลัมน์ที่ระบุ เหมาะกับการคำนวณ Sub-total/สัดส่วนภายในกลุ่ม เช่น ยอดขายต่อหมวดหมู่ โดยไม่สนตัวกรองอื่น ๆ แนวคิดหลักคือ ลบตัวกรองของตาราง แล้วคงตัวกรองของคอลัมน์ที่เลือกไว้
ALLNOBLANKROW ทำงานคล้าย ALL แต่มีจุดเด่นคือ “ตัดแถวว่าง” ที่ระบบสร้างขึ้นอัตโนมัติเมื่อข้อมูลหลุดความสัมพันธ์ เช่น คีย์ในตารางข้อเท็จจริงไม่พบในตารางมิติ จึงเหมาะกับการคำนวณยอดรวม/สัดส่วนที่ไม่ต้องการให้แถวว่างเข้ามาปนผลลัพธ์ และยังใช้เป็นตัวช่วยตรวจจับปัญหาคุณภาพข้อมูลในโมเดลได้ด้วย
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
CALCULATETABLE evaluate table expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน แล้วคืนค่าเป็น table (ตาราง) ซึ่งแตกต่างจาก CALCULATE ที่คืนค่าเป็น scalar value รองรับ filter arguments 3 รูปแบบ: Boolean expression, table expression, และ filter modifier functions (REMOVEFILTERS, ALL, KEEPFILTERS, USERELATIONSHIP, CROSSFILTER) มีพฤติกรรมเหมือน CALCULATE ในทุกแง่มุมของการจัดการ filter context รวมถึง context transition แต่เหมาะสำหรับการสร้าง intermediate table ที่ถูกกรองแล้วส่งต่อให้ iterator functions หรือใช้ใน calculated table มักมี performance ดีกว่า FILTER ใน simple filtering scenarios เพราะ DAX engine สามารถทำ cardinality estimation และ optimization ได้ดีกว่า
FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน
KEEPFILTERS เป็นฟังก์ชันปรับตัวกรองที่ใช้ภายใน CALCULATE เพื่อ “คงตัวกรองเดิมไว้” แล้วนำตัวกรองใหม่มารวมกันแบบ AND (ตัดกันเฉพาะส่วนที่ตรงกัน) แทนพฤติกรรมปกติที่มักเขียนทับตัวกรองเดิมของคอลัมน์เดียวกัน
FILTERS คืนค่าเป็นตาราง (table) ของค่าที่ถูกกรองโดยตรง (direct filters) บนคอลัมน์ที่ระบุ เช่น ค่าที่ผู้ใช้เลือกจากตัวแบ่งส่วนข้อมูล ต่างจาก ALL/ALLEXCEPT ที่เคลียร์ตัวกรอง FILTERS ช่วยตรวจสอบและจัดการบริบทตัวกรองอย่างชาญฉลาด
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่