| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| result_columnName | Column Reference | คอลัมน์ที่มีค่าที่ต้องการคืนกลับ (ต้องเป็นอ้างอิงคอลัมน์จริง ไม่สามารถเป็น Expression ได้) | |
| search_columnName | Column Reference | คอลัมน์ที่ต้องการค้นหา (สามารถอยู่ในตารางเดียวกันหรือตารางที่มี Relationship ได้) | |
| search_value | Scalar/Expression | ค่าที่ต้องการค้นหา (สามารถใส่หลายคู่ของ search_columnName และ search_value ได้) | |
| [search_columnName]ไม่บังคับ | Column Reference | คอลัมน์เพิ่มเติมสำหรับเงื่อนไขการค้นหา (สามารถระบุได้หลายคู่กับ search_value) | |
| [search_value]ไม่บังคับ | Scalar/Expression | ค่าที่ต้องการค้นหาเพิ่มเติม (จับคู่กับ search_columnName) | |
| [alternateResult]ไม่บังคับ | Scalar | Error if no match or multiple different results | ค่าที่คืนกลับเมื่อไม่มีการจับคู่หรือมีการจับคู่หลายแถวแต่ค่าผลลัพธ์ต่างกัน ถ้าไม่ระบุจะเกิด Error |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
LOOKUPVALUE คือฟังก์ชันค้นหาที่มีประสิทธิภาพสูงในการค้นหาค่าจากตารางตามหลายเงื่อนไข
ส่วนตัวผมคิดว่า ถ้าคุณเจอกรณีที่ต้องค้นหาค่าแต่ไม่มี Relationship หรือ Relationship ไม่ตรงตามที่ต้องการ LOOKUPVALUE คือตัวช่วยสุดที่ดี มันสามารถจับคู่กับหลายคอลัมน์พร้อมกันได้เลย 😎
แต่ที่ต้องจำไว้นะ:
– ทุกเงื่อนไขต้องตรงกันพร้อมๆ กัน ถ้าไม่ตรงก็จะได้ BLANK
– ถ้ามีหลายแถวที่ตรง แต่ค่าผลลัพธ์เหมือนกันก็ไม่เป็นไร มันจะคืนค่านั้นให้
– ถ้ามีหลายแถวที่ตรง แต่ค่าผลลัพธ์ต่างกันก็จะเกิด Error (ยกเว้นกำหนด alternateResult)
เทคนิคการใช้งาน:
1. ใช้ LOOKUPVALUE เมื่อไม่มี Relationship หรือ Relationship ไม่เหมาะสม
2. ถ้ามี Relationship อยู่แล้ว ให้ใช้ RELATED() แทน มันจะเร็วกว่า
3. ตัวเลือก alternateResult จะช่วยให้จัดการกับข้อผิดพลาดได้ดีกว่า ISERROR/IFERROR
เช่น ดึงชื่อ/กลุ่ม/สถานะจากตารางมาสเตอร์ด้วยรหัส
เช่น ค้นหาด้วย Date+Currency หรือ Year+Region
กำหนด AlternateResult เพื่อคืน 0/ข้อความ/ค่าอื่นแทน BLANK
ใช้ LOOKUPVALUE เพื่อค้นหาค่ากำแพงแลกเปลี่ยน โดยจับคู่กับ CurrencyKey จากตารางปัจจุบัน ผลลัพธ์ก็คือค่า Average Rate ที่ตรงกัน
ใช้เงื่อนไขสองตัว ทั้ง Order ID และ Product ID ต้องตรงกันพร้อมๆ กัน ถ้าตรงแล้วจะคืนค่า Shipment Date มา ถ้าไม่ตรงจะได้ BLANK
ตัวพารามิเตอร์ alternateResult ช่วยให้เราจัดการกับการไม่พบข้อมูลแทนที่จะปล่อยให้เกิด Error ต่อได้อย่างดี
ตัวอย่างนี้แสดงการใช้ LOOKUPVALUE เพื่อค้นหาแบบเกณฑ์สามตัว (multi-level lookup) พร้อมการจัดการข้อผิดพลาด ต่างจาก VLOOKUP ที่ต้องค้นหาทีละคอลัมน์จากซ้ายไปขวาเท่านั้น
RELATED() ใช้ Relationship ที่มีอยู่ในโมเดลเพื่อดึงค่า มันเร็วกว่าและเหมาะสำหรับการค้นหากรณีที่มี Relationship อยู่แล้ว แต่ LOOKUPVALUE ใช้ได้แม้ไม่มี Relationship หรือต้องค้นหาแบบ many-to-many หรือเงื่อนไขที่ซับซ้อน
จะคืนค่า BLANK หากไม่พบข้อมูลที่ตรงกับเงื่อนไข แต่ถ้ามีหลายแถวที่ตรง แล้วค่าผลลัพธ์ต่างกัน ก็จะเกิด Error (ยกเว้นกำหนด alternateResult)
ได้เลย สามารถใส่หลายคู่ของ search_columnName และ search_value ได้มากเท่าที่ต้องการ แต่ข้อสังเกต ทั้งหมดเงื่อนไขต้องตรงกันพร้อมๆ กัน (AND logic)
เพราะ RELATED() ใช้ประโยชน์จาก Relationship ที่เคยสร้างไว้ในโมเดล ซึ่งมีการ Optimize ไว้แล้ว แต่ LOOKUPVALUE ต้องทำการค้นหาแบบ Scan ทั่วทั้งตาราง ดังนั้นถ้ามี Relationship ให้ใช้ RELATED() ดีกว่า
ใช้ได้ในทั้งสองแบบ แต่มีข้อจำกัด ในหลายกรณี เมื่อใช้ใน Calculated Column มันจะต้อง Scan ทั้งตารางซึ่งอาจช้า ถ้าต้องการประสิทธิภาพดี ให้ใช้ Relationship และ RELATED() ด้วย
ฟังก์ชันที่ผู้เขียนโยงไว้กับ LOOKUPVALUE จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
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 โดยตรงแทน
LOOKUP ค้นหาและดึงค่าจากเมทริกซ์ภาพ (visual matrix) ในการคำนวณภาพโดยการระบุเงื่อนไขการกรอง ใช้เฉพาะในการคำนวณภาพเท่านั้น
LOOKUPWITHTOTALS ค้นหาตำแหน่งที่ตรงเงื่อนไขในตารางสรุป/กริด แล้วคืนค่าเดี่ยวจากคอลัมน์ผลลัพธ์หรือคำนวณนิพจน์จากชุดที่ตรงเงื่อนไข โดยถือว่าคอลัมน์ที่ไม่ระบุในเงื่อนไขอยู่ในสถานะรวม (total) ซึ่งต่างจาก LOOKUP
SELECTEDVALUE ตรวจสอบว่า Filter Context ลดลงเหลือเพียงค่าเดียวแล้ว ถ้าใช่ให้คืนค่านั้น ถ้าไม่ใช่ให้คืนค่าอื่นแทน
DATATABLE สร้างตารางแบบ hardcode ด้วยข้อมูลคงที่ โดยระบุชื่อคอลัมน์ ชนิดข้อมูล และค่าของแต่ละแถว เหมาะสำหรับตารางอ้างอิงเล็กๆ เช่น lookup table หรือข้อมูลตัวอย่าง
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่