HASONEVALUE ตรวจสอบว่า Column ที่ผ่านการ Filter มีเพียงค่าเดียวเท่านั้น Return TRUE หากตรงตามเงื่อนไข FALSE หากไม่ใช่ ใช้หลักเพื่อสร้าง Measure ที่ “ฉลาด” ตามการเลือก Filter ของผู้ใช้
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| columnName | Column Reference | ชื่อของคอลัมน์ที่ต้องการตรวจสอบ ต้องเป็นการอ้างอิงคอลัมน์ที่มีอยู่จริงในตัวแบบข้อมูล ไม่สามารถเป็น Expression หรือการคำนวณแบบเสมือน |
HASONEVALUE(columnName) เป็นฟังก์ชันที่ตรวจสอบว่าในปัจจุบันมีค่าที่แตกต่างกันเพียงค่าเดียวในคอลัมน์ที่ระบุหรือไม่ ทำงานโดยประเมินฟิลเตอร์บริบท (Filter Context) ของคอลัมน์นั้น หากค่าถูกผ่านเข้ามาเพียงค่าเดียวจากการเลือกของผู้ใช้ จะ Return TRUE ถ้ามีมากกว่าหนึ่งค่าหรือไม่มีค่าเลย จะ Return FALSE
ส่วนตัวผมคิดว่า HASONEVALUE เป็นหัวใจสำคัญของการสร้าง Measure ที่ตอบสนองต่อการเลือก Filter ของผู้ใช้ได้อย่างอ่อนไหว ถ้าผู้ใช้เลือก Category เดียว เราอาจแสดงรายละเอียดลึก แต่ถ้าเลือกหลาย Category เราก็แสดงข้อมูลรวมแทน นั่นคือศิลปะของการสร้าง Dashboard ที่ “ฉลาด” 😎
จริงๆ แล้ว HASONEVALUE เทียบเท่ากับ COUNTROWS(VALUES(columnName)) = 1 แต่ HASONEVALUE ชัดเจน เร็วกว่า และอ่านง่ายกว่า ในเวอร์ชัน DAX ใหม่ๆ Microsoft ขอแนะนำให้ใช้ SELECTEDVALUE หากต้องการอ่านค่าที่เลือกด้วย เพราะมันรวมการตรวจสอบและการอ่านค่าไว้ในที่เดียว
แสดงคำว่า "Total" เมื่ออยู่บนแถว Grand Total (เพราะไม่มีค่าเดียว)
กำหนดให้ Measure ทำงานแบบหนึ่งเมื่อเลือกค่าเดียว และอีกแบบเมื่อเลือกหลายค่า
ใช้ IF กับ HASONEVALUE เพื่อสร้างข้อความแบบมีเงื่อนไข ผ่านการเลือก Filter ของผู้ใช้
กรณีการใช้งานที่สำคัญคือ การคำนวณ Year-over-Year (YoY) ควรแสดงเฉพาะเมื่อผู้ใช้เลือกปีเดียว เพราะเมื่อเลือกหลายปี การเทียบกับปีฐานจะไม่มีความสำคัญและสร้างความสับสน
ประโยชน์สำคัญของ HASONEVALUE คือสามารถสลับระหว่างแสดงรายละเอียดสำหรับรายการเดียวและแสดงข้อมูลรวมสำหรับหลายรายการ ทำให้ Dashboard มีความยืดหยุ่น
ในกรณีเลือกหลายสาขา หากเราหารยอดขายรวมด้วยจำนวนวัน ผลลัพธ์จะผิดเพราะแต่ละสาขามีจำนวนวันเท่า จึงควรแสดง BLANK() เพื่อป้องกันการตีความที่ผิด
HASONEVALUE เพียงตรวจสอบว่ามีค่าเดียวหรือไม่ (Return TRUE/FALSE) ส่วน SELECTEDVALUE นอกจากตรวจสอบแล้ว ยังจะ Return ค่านั้นด้วย หรือ Return ค่า Default หากไม่มีค่าเดียว SELECTEDVALUE ใหม่กว่าและสะดวกกว่า แต่ HASONEVALUE ยังคงมีประโยชน์เมื่อต้องการตรวจสอบเท่านั้น
ได้ทางเทคนิค แต่ Calculated Column มีแต่ Row Context ไม่มี Filter Context เหมือน Measure ดังนั้นถ้าใช้ HASONEVALUE ใน Calculated Column มักจะ Return FALSE ตลอด เนื่องจากค่าทั้งหมดในคอลัมน์พิจารณาว่าผ่านมาทีละแถว ส่วนใหญ่ HASONEVALUE ใช้ใน Measure เพื่อตรวจสอบการเลือก Filter ของผู้ใช้
จะ Return FALSE เพราะในกรณีนั้น Column จะมีค่าหลายค่า (ทั้งหมดที่มีในตัวแบบข้อมูล) HASONEVALUE ตรวจสอบจำนวนค่าที่แตกต่างกัน ไม่ใช่จำนวนแถว
ใช่ COUNTROWS(VALUES(columnName)) = 1 ให้ผลลัพธ์เดียวกันอย่างสมบูรณ์ แต่ HASONEVALUE ชัดเจนและเร็วกว่า เนื่องจากเป็นฟังก์ชันที่ออกแบบมาโดยเฉพาะสำหรับวัตถุประสงค์นี้
ไม่ได้ โดยตรง HASONEVALUE รับเพียงคอลัมน์เดียว แต่สามารถใช้หลายครั้งในตัววัด เช่น IF(HASONEVALUE(Products[Category]) AND HASONEVALUE(Calendar[Year]), …) เพื่อตรวจสอบหลายคอลัมน์
ฟังก์ชันที่ผู้เขียนโยงไว้กับ HASONEVALUE จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
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
SELECTEDVALUE ตรวจสอบว่า Filter Context ลดลงเหลือเพียงค่าเดียวแล้ว ถ้าใช่ให้คืนค่านั้น ถ้าไม่ใช่ให้คืนค่าอื่นแทน
COUNTROWS เป็นฟังก์ชันการรวม (Aggregation) ที่นับจำนวนแถวในตารางที่ระบุ ไม่ว่าจะเป็นตารางจริงในโมเดลหรือตารางเสมือน (Virtual Table) จากฟังก์ชันอื่นๆ เช่น FILTER, VALUES, DISTINCT นับเท่าไหร่? ผลลัพธ์ก็คือจำนวนแถวเต็ม ๆ
DISTINCTCOUNT นับจำนวนค่าที่แตกต่างกันทั้งหมดในคอลัมน์ รวมถึง BLANK values ถ้าไม่มีแถวข้อมูล จะคืนค่า BLANK
FILTERS คืนค่าเป็นตาราง (table) ของค่าที่ถูกกรองโดยตรง (direct filters) บนคอลัมน์ที่ระบุ เช่น ค่าที่ผู้ใช้เลือกจากตัวแบ่งส่วนข้อมูล ต่างจาก ALL/ALLEXCEPT ที่เคลียร์ตัวกรอง FILTERS ช่วยตรวจสอบและจัดการบริบทตัวกรองอย่างชาญฉลาด
VALUES ดึงค่าที่ไม่ซ้ำจากคอลัมน์ หรือดึงแถวทั้งหมดจากตาราง โดยรวมแถว BLANK ที่เกิดจากข้อผิดพลาดของความสัมพันธ์ (Referential Integrity Violations) ส่วน DISTINCT จะไม่รวมแถว BLANK นี้
ตรวจว่าคอลัมน์ถูก filter โดยตรงให้เหลือค่าเดียวหรือไม่ เหมาะกับการควบคุมการแสดงผลตามสถานะการเลือกของผู้ใช้
ISFILTERED ตรวจสอบว่าคอลัมน์ที่ระบุมีตัวกรองโดยตรงหรือไม่ ใช้เพื่อสร้าง Dynamic Measures ที่เปลี่ยนพฤติกรรมตามการกรองของผู้ใช้
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่