ตรวจว่าคอลัมน์ถูก filter โดยตรงให้เหลือค่าเดียวหรือไม่ เหมาะกับการควบคุมการแสดงผลตามสถานะการเลือกของผู้ใช้
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| columnName | column | คอลัมน์ที่ต้องการตรวจว่าถูกจำกัดด้วย direct filter ให้เหลือค่าเดียวหรือไม่ ต้องระบุชื่อเต็มของคอลัมน์ (ไม่สามารถใช้ expression) |
HASONEFILTER คืนค่า TRUE เมื่อคอลัมน์ที่ระบุถูก filter โดยตรง (direct filter) ให้เหลือค่าเดียว ไม่ใช่การ filter ทางอ้อมผ่านความสัมพันธ์
ที่เจ๋งคือ HASONEFILTER ตรวจเฉพาะการจำกัดโดยตรงที่คอลัมน์นั้น ถ้าคอลัมน์ถูก filter ผ่านทางความสัมพันธ์ (cross-filter) มันจะคืนค่า FALSE แม้ว่าจริงๆ บริบทเหลือค่าเดียว นี่คือความแตกต่างสำคัญจาก HASONEVALUE ที่ตรวจจำนวนค่าสุดท้ายไม่ว่ามาจากไหน
ส่วนตัวผมมักใช้ HASONEFILTER เมื่อต้องการควบคุมการแสดงผลตามว่า “ผู้ใช้เลือกค่าเดียวจาก slicer นี้หรือไม่” ถ้าจำนวนค่าลดลงด้วยเหตุสาเหตุอื่น (เช่น filter หลายคอลัมน์) มันไม่สนใจ มันแค่เน้น “ผู้ใช้กดเลือกบนคอลัมน์นี้หรือไม่” เท่านั้น ครับ
เช่น การ์ดที่ต้องการแสดงยอดของหมวดเดียวเท่านั้น ถ้าเลือกหลายหมวดให้แสดงค่าว่าง
เช่น เปลี่ยนข้อความ/ตัวชี้วัดเมื่อผู้ใช้เลือกค่าเดียว vs เลือกหลายค่า
ใช้ IF กับ HASONEFILTER เพื่อควบคุมการแสดงผล เมื่อผู้ใช้เลือกค่าเดียว measure จึงคำนวณ ไม่เช่นนั้นแสดง BLANK()
รวม HASONEFILTER กับ SELECTEDVALUE เพื่อดึงค่าที่เลือกออกมาใช้ เหมาะกับการแสดง breadcrumb หรือ title บนรายงาน
HASONEFILTER ตรวจ direct filter เท่านั้น; HASONEVALUE ตรวจว่าบริบทเหลือค่าเดียวไม่ว่ามาจากไหน ถ้า filter มาจาก relationship ให้ผลต่างกัน
รวมข้อความ + SELECTEDVALUE ได้ข้อมูลชัดเจนว่าผู้ใช้เลือกค่าไหน ส่วนตัวผมชอบใช้กับ Card visual เพื่อแสดงบริบทของรายงาน
HASONEFILTER ตรวจเฉพาะ direct filter (filter ที่ผู้ใช้เลือกจาก slicer/เน้นโดยตรง) ส่วน HASONEVALUE ตรวจจำนวนค่าที่เหลือในบริบท ซึ่งอาจได้รับผลจากความสัมพันธ์หรือ filter อื่น ตัวอย่าง: ถ้า filter Product ไปแล้วทำให้ Category เหลือค่าเดียว HASONEVALUE(Category) = TRUE แต่ HASONEFILTER(Category) = FALSE เพราะไม่มีการ filter Category โดยตรง
HASONEFILTER คืน FALSE ในสองกรณี: (1) ไม่มี filter ที่คอลัมน์นั้นเลย (2) มี filter มากกว่าหนึ่งค่า ถ้าเลือกค่าหลายค่าจาก slicer ของคอลัมน์นั้น มันจะคืน FALSE ทันที
ใช้ SELECTEDVALUE() ที่คืนค่าเดียวถ้าบริบทเหลือค่าเดียว หรือ VALUES() ที่คืนตาราง ผมมักเช็ค HASONEFILTER ก่อนจึงใช้ SELECTEDVALUE ตามด้วย เพื่อมั่นใจว่าได้ค่าจริง
สามารถใช้ใน Calculated Column, Calculated Table, Measure, Visual Calculation ได้หมด แต่ DirectQuery mode ไม่รองรับใน Calculated Column และ RLS
ใช้ AND/OR รวม HASONEFILTER หลายตัว เช่น AND(HASONEFILTER(Col1), HASONEFILTER(Col2)) ส่วนตัวผมมักไปที่ HASONEVALUE กับ AND เพื่อชัวร์ว่าบริบทเหลือค่าเดียวทั้งหมด
ฟังก์ชันที่ผู้เขียนโยงไว้กับ HASONEFILTER จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
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
FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน
SELECTEDVALUE ตรวจสอบว่า Filter Context ลดลงเหลือเพียงค่าเดียวแล้ว ถ้าใช่ให้คืนค่านั้น ถ้าไม่ใช่ให้คืนค่าอื่นแทน
EVALUATEANDLOG คำนวณนิพจน์และส่งผลลัพธ์ไปยัง log สำหรับการตรวจสอบและดีบัก ทำให้เห็นค่าระหว่างกลางของการคำนวณ DAX โดยไม่ต้องเขียนตารางชั่วคราว
HASONEVALUE ตรวจสอบว่า Column ที่ผ่านการ Filter มีเพียงค่าเดียวเท่านั้น Return TRUE หากตรงตามเงื่อนไข FALSE หากไม่ใช่ ใช้หลักเพื่อสร้าง Measure ที่ "ฉลาด" ตามการเลือก Filter ของผู้ใช้
ISFILTERED ตรวจสอบว่าคอลัมน์ที่ระบุมีตัวกรองโดยตรงหรือไม่ ใช้เพื่อสร้าง Dynamic Measures ที่เปลี่ยนพฤติกรรมตามการกรองของผู้ใช้
FILTERS คืนค่าเป็นตาราง (table) ของค่าที่ถูกกรองโดยตรง (direct filters) บนคอลัมน์ที่ระบุ เช่น ค่าที่ผู้ใช้เลือกจากตัวแบ่งส่วนข้อมูล ต่างจาก ALL/ALLEXCEPT ที่เคลียร์ตัวกรอง FILTERS ช่วยตรวจสอบและจัดการบริบทตัวกรองอย่างชาญฉลาด
VALUES ดึงค่าที่ไม่ซ้ำจากคอลัมน์ หรือดึงแถวทั้งหมดจากตาราง โดยรวมแถว BLANK ที่เกิดจากข้อผิดพลาดของความสัมพันธ์ (Referential Integrity Violations) ส่วน DISTINCT จะไม่รวมแถว BLANK นี้
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่