LASTNONBLANK คืนค่าตัวสุดท้ายจากคอลัมน์ที่ทำให้ expression ไม่เป็น BLANK ใช้บ่อยกับ semi-additive measures และเวลาต้องการหา “วันล่าสุดที่มีข้อมูล” ตามลำดับแถวของคอลัมน์
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| Column | column | คอลัมน์ที่ใช้เป็น “ลำดับการค้นหา” (เช่น Date column, Product column ฯลฯ) LASTNONBLANK จะค้นหา “ตัวสุดท้าย” ของคอลัมน์นี้ ตามลำดับแถว |
| Expression | expression | นิพจน์หรือ measure ที่ใช้เป็นเงื่อนไขตรวจสอบว่า “ไม่เป็น BLANK” เช่น [Total Sales], [Quantity], SUM(Orders[Amount]) ฯลฯ |
LASTNONBLANK เป็นฟังก์ชัน time intelligence ที่ค้นหาตัวสุดท้ายของคอลัมน์ที่ระบุ ซึ่งทำให้ expression ที่ให้มา “ไม่เป็น BLANK” ตามลำดับของแถวในบริบทตัวกรองปัจจุบัน เวลาบอกว่า “ไม่เป็น BLANK” มันหมายความว่า expression นั้นคำนวณได้ค่าออกมา ไม่ใช่ว่าง ๆ หรือ NULL ใช้บ่อยในสถานการณ์ เช่น “วันล่าสุดที่ขายของ” “วันสุดท้ายที่มียอดขาย” หรือ “วันสุดท้ายที่มีข้อมูลจริง ๆ”
ที่เจ๋งคือ LASTNONBLANK ต่างจาก LASTDATE ตรงที่ LASTDATE มันแค่หา “วันล่าสุด” ตามลำดับวันทั่ว ๆ ไป แต่ LASTNONBLANK จะมีเงื่อนไขเพิ่มเติมว่า “ต้องจะบ่อยที่ expression นั้นไม่เป็น BLANK” ถ้า product ไหนไม่มีข้อมูลขายในบางวัน LASTNONBLANK จะข้ามไปหาวันล่าสุดที่มีข้อมูลจริง ๆ แบบนี้เหมาะมากกับสถานการณ์ที่ข้อมูลไม่ต่อเนื่อง
ส่วนตัวผมถือว่า LASTNONBLANK เป็น “นักสืบของ DAX” ที่ไปหาข้อมูลล่าสุดจริง ๆ ที่มีอยู่ไม่ใช่หาวันล่าสุดทั้งหมด ใช้ยุ่งกับแบบชุดข้อมูลแบบขาด ๆ หายๆ (sparse data) ผมแนะนำให้เข้าใจ CALCULATE กับ filter context ก่อน เพราะ LASTNONBLANK ทำงาน “ใจดี” เมื่อมี context transition เกิดขึ้น
คืนค่าเป็นวันที่ล่าสุดที่ [Total Sales] ไม่เป็น BLANK
คืนค่าจากคอลัมน์ที่เป็นตัวสุดท้ายที่ expression มีค่า
LASTNONBLANK ค้นหา Date column จากล่างขึ้นบน หาวันสุดท้ายที่ [Total Sales] measure ไม่เป็น BLANK คืนค่าเป็น "วันที่" ไม่ใช่คืนค่าเป็นยอดขาย
ขั้นที่ 1 ใช้ LASTNONBLANK หาวันล่าสุด ขั้นที่ 2 ใช้ CALCULATE เพื่อกรองแล้วคำนวณยอดขาย ณ วันนั้น อันนี้เป็นการใช้ VAR ที่สำคัญเพราะต้อง "เก็บค่าวันที่" แล้วค่อยนำไปใช้
เป้าหมายคือหา "ค่าปลายสุด" ไม่ใช่ "รวม" (semi-additive) สต็อกไม่ควรรวมตามเดือน ต้องหา "วันสุดท้าย" ของแต่ละเดือน LASTNONBLANK ช่วยในจุดนี้ได้ดี
LASTNONBLANKVALUE คืนค่าของ expression โดยตรง ไม่ต้องตั้ง VAR แล้ว CALCULATE อีก ใช้ได้เร็วกว่า แต่บางครั้งเราต้อง VAR เพราะต้องใช้วันที่หลายครั้ง
LASTNONBLANK คืนค่า "จากคอลัมน์" (Column parameter) ที่เป็นตัวสุดท้ายที่ทำให้ Expression ไม่เป็น BLANK ไม่ใช่คืนค่าเป็นค่าของ expression อันนี้สำคัญมาก เช่น ถ้า Column เป็น Date column มันจะคืนค่าวันที่ (date value) ไม่ใช่คืนค่ายอดขาย ถ้าต้องคืนค่าของ expression โดยตรง ให้ใช้ LASTNONBLANKVALUE แทน
LASTNONBLANK หาตัว "สุดท้าย" ส่วน FIRSTNONBLANK หาตัว "แรก" ทั้งสองใช้ expression เดียวกันเป็นเงื่อนไข เช่น ถ้า [Total Sales] ไม่เป็น BLANK ผมนำ FIRSTNONBLANK ไปใช้บ่อยกับงานค้นหา "วันแรกที่เริ่มมีข้อมูล" ส่วน LASTNONBLANK คือ "วันล่าสุดที่มีข้อมูล"
LASTDATE คืนวันที่สุดท้ายในช่วงวันที่ของ Date table ตามบริบทตัวกรอง ไม่สนใจ expression ว่าว่างหรือไม่ ส่วน LASTNONBLANK มีเงื่อนไขเพิ่มเติม ว่า "expression ต้องไม่เป็น BLANK" ที่ LASTDATE ไปหา "วันล่าสุด" แต่ LASTNONBLANK หา "วันล่าสุดที่มีข้อมูลจริง ๆ" เช่น ถ้าวันที่สุดท้ายไม่มี sales เลย LASTDATE จะคืนวันนั้น แต่ LASTNONBLANK จะข้ามไปหาวันก่อนหน้าที่มี sales
ได้ครับ และแนะนำเลย โดยเฉพาะตัวอย่างที่ 2 และ 3 เพราะ LASTNONBLANK คืนตารางแถวเดียวคอลัมน์เดียว เอาค่านั้นเก็บใน VAR แล้วใช้หลายครั้งในสูตร ดีกว่าคำนวณซ้ำ ๆ ทำให้ clean code ขึ้น
สำคัญ 3 อย่าง: (1) ลำดับของแถวขึ้นกับลำดับตามธรรมชาติของ Column – ถ้า Column ไม่เรียง ผลลัพธ์อาจไม่ถูก (2) ต้องมีบริบทตัวกรองที่ดี – คนละบริบท ผลลัพธ์คนละแบบ (3) Performance – LASTNONBLANK อาจเป็น heavy operation บน dataset ใหญ่ ๆ Microsoft อยากให้ดู LASTNONBLANKVALUE หรือหา alternative ก่อน
ฟังก์ชันที่ผู้เขียนโยงไว้กับ LASTNONBLANK จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
FIRSTNONBLANK คืนค่าตัวแรกของ Column ที่ทำให้ Expression ไม่เป็น BLANK ใช้บ่อยเพื่อหา "ค่าแรกที่มีข้อมูล" เช่นวันแรกที่มียอดขาย (คืนค่าเป็นวันที่) และมักใช้ร่วมกับ time intelligence
LASTDATE คืนค่าตารางที่มีวันที่สุดท้ายในบริบทตัวกรองปัจจุบัน มักใช้เป็นตารางตัวกรองให้ CALCULATE เพื่อคำนวณ measure ณ วันสุดท้ายของช่วงที่เลือก และสามารถใช้ MAXX เพื่อแปลงผลเป็น scalar date ได้
LASTNONBLANKVALUE คืนค่าสุดท้ายที่ไม่เป็น BLANK ของ Expression เมื่อประเมินตามลำดับของ Column ในบริบทตัวกรองปัจจุบัน ใช้หา "ค่าล่าสุดที่มีข้อมูล" เช่นยอดขายของวันล่าสุดที่มีค่า
BLANK คืนค่าว่างเปล่า (Empty Value) ในDAX ซึ่งแตกต่างจาก 0 หรือ "" โดยใช้สำหรับระบุว่าไม่มีข้อมูล มักใช้ใน IF เพื่อซ่อนผลลัพธ์ที่ไม่ต้องการ
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
อีเมลของคุณจะไม่ถูกเผยแพร่