FIRSTDATE คืนค่าวันที่แรกในบริบทตัวกรองปัจจุบัน เหมาะใช้เป็นตัวกรองให้ CALCULATE เพื่อหายอดขาย/จำนวนของวันแรกในช่วงที่เลือก
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| Dates | column | table expression | คอลัมน์วันที่หรือ table expression ที่คืนค่าคอลัมน์วันที่เดี่ยว |
FIRSTDATE เป็นฟังก์ชัน time intelligence ที่คืนค่าตาราง (table) ที่มีวันที่แรกในบริบทตัวกรองปัจจุบัน ใช้บ่อยมากกับ CALCULATE เพื่อคำนวณ measure ที่ “เฉพาะวันแรกของช่วง” เช่นยอดขายของวันแรกของเดือน หรือ opening balance ของไตรมาส
ที่เจ๋งคือ FIRSTDATE ทำงานคู่กับ time intelligence ได้ดี เมื่อคุณมี date table ที่ถูกทำเครื่องหมายเป็น Date table แล้ว FIRSTDATE จะรู้ว่าต้องหาวันที่แรก “ของช่วงที่ถูกกรองอยู่” (เช่นวันแรกของเดือนที่เลือก ไม่ใช่วันแรกของปีทั้งปี) เพราะมันพิจารณา filter context ด้วย
ส่วนตัวผมมักใช้ FIRSTDATE กับ CALCULATE เพื่อสร้าง opening balance measure หรือหาค่าเมื่อต้นไตรมาส ส่วนถ้าแค่อยากได้วันที่แรกเป็นค่าเดี่ยว (scalar) ผมอาจใช้ MIN ที่ง่ายกว่า ขึ้นอยู่กับบริบท แต่ FIRSTDATE ดีกว่าเมื่อต้องการ table เพื่อเป็นตัวกรอง
คำนวณ [Total Sales] เฉพาะวันแรกของช่วงที่ถูกกรอง
แปลงผลลัพธ์จากตารางให้เป็น scalar date เพื่อใช้แสดงผล
ใช้คู่กับ LASTDATE เพื่อคำนวณความต่างของช่วงเวลา
ใช้ VAR เก็บ FIRSTDATE ไว้ก่อน แล้วใส่เข้าไปใน CALCULATE เป็นตัวกรอง ผลจะได้ยอดขายของวันแรกในบริบท
FIRSTDATE คืนตาราง ถ้าต้องการค่าเดี่ยวให้ใช้ MINX (หรือ MAX) วนบนตารางนั้น ค่อนข้างไม่เอาไหนแต่บางครั้งต้องการแบบนี้
ตัวอย่างสำคัญ – opening balance กำหนด date range เป็นต้นไตรมาส แล้วหา FIRSTDATE ของช่วงนั้น ใช้ FIRSTDATE แบบนี้บ่อยมากในการวิเคราะห์คลังสินค้า/ทางการเงิน
ใช้ FIRSTDATE ดึงวันแรก (แปลงเป็น scalar ด้วย MINX) แล้วเปรียบเทียบกับ MAX ของวันสุดท้าย DATEDIFF หาความต่าง
FIRSTDATE คืนค่าเป็น **ตารางหนึ่งแถว** (single-row table) ไม่ใช่ scalar date ถ้าต้องการค่าเดี่ยว ให้ใช้ iterator เช่น MINX() หรือ MAX() วนบนตารางนั้น หรือใช้ MIN() เลยถ้าแค่อยากได้ scalar โดยตรง
**ได้บ่อยมาก** MIN ให้ scalar โดยตรงแต่หากคุณต้องการใช้เป็นตัวกรองกับ CALCULATE (เพื่อให้ filter context ถูกต้อง) ให้ใช้ FIRSTDATE เพราะมัน return table ที่สามารถถูกใช้เป็นตัวกรองได้ ผมแนะนำให้ลองทั้งสองวิธี แล้วเลือกตามที่ให้ผลถูกต้อง
FIRSTDATE หาวันที่แรก (first date in chronological order) ส่วน FIRSTNONBLANK หาค่าแรกที่ไม่ว่าง (first non-blank value in a column) ใช้โลจิกต่างกัน FIRSTNONBLANK ใช้ได้กับ column ใดก็ได้ ไม่ใช่แค่ date
ไม่ **ต้อง** มี Date table แต่ถ้ามี และทำเครื่องหมายเป็น Date table แล้ว time intelligence (FIRSTDATE, LASTDATE, เป็นต้น) จะทำงานได้ดีและถูกต้องมากขึ้น หากไม่มี Date table FIRSTDATE ยังคงทำงาน แต่อาจให้ผลลัพธ์ที่ไม่คาดหวังได้
**ไม่ได้** FIRSTDATE ไม่รองรับ DirectQuery mode สำหรับ calculated column หรือ RLS rule หากต้องใช้ DirectQuery ต้องหา alternative
ฟังก์ชันที่ผู้เขียนโยงไว้กับ FIRSTDATE จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
CLOSINGBALANCEMONTH ประเมิน Expression ณ วันสิ้นเดือนของบริบทวันที่ปัจจุบัน เหมาะกับการทำมาตรวัดยอดคงเหลือปลายเดือน และรองรับการใส่ตัวกรองเพิ่มเติม
DATEADD คืนค่าตารางวันที่ ที่ถูกเลื่อนออกไปจากช่วงวันที่ใน Context ปัจจุบัน ตามจำนวน (NumberOfIntervals) และหน่วย (Interval) ที่กำหนด เช่น เลื่อนย้อนหลัง 1 เดือน หรือเลื่อนไปข้างหน้า 1 ปี
DATESBETWEEN คืนตารางวันที่ที่อยู่ระหว่าง StartDate และ EndDate (รวมวันเริ่ม/วันจบ) เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อคำนวณตามช่วงวันที่ที่กำหนดเอง
ENDOFMONTH คืนตารางวันที่ของวันสิ้นเดือนตามปฏิทิน เหมาะกับ Semi-Additive Calculations เช่น ยอดคงเหลือ, Inventory, หรือ Closing Balance ที่ต้องการ snapshot ณ สิ้นเดือน ไม่ว่าจะมีข้อมูลจริงในวันนั้นหรือไม่
FIRSTNONBLANK คืนค่าตัวแรกของ Column ที่ทำให้ Expression ไม่เป็น BLANK ใช้บ่อยเพื่อหา "ค่าแรกที่มีข้อมูล" เช่นวันแรกที่มียอดขาย (คืนค่าเป็นวันที่) และมักใช้ร่วมกับ time intelligence
FIRSTNONBLANKVALUE คืนค่าแรกที่ไม่เป็น BLANK ของ Expression เมื่อประเมินตามลำดับของ Column ซึ่งมีประโยชน์ในการหาค่าเริ่มต้นหรือค่าแรกที่มีข้อมูลจริง เช่นยอดขายของวันแรกที่มีการขาย
LASTDATE คืนค่าตารางที่มีวันที่สุดท้ายในบริบทตัวกรองปัจจุบัน มักใช้เป็นตารางตัวกรองให้ CALCULATE เพื่อคำนวณ measure ณ วันสุดท้ายของช่วงที่เลือก และสามารถใช้ MAXX เพื่อแปลงผลเป็น scalar date ได้
PREVIOUSQUARTER คืนตารางวันที่ของไตรมาสก่อนหน้า ตามวันที่แรกในบริบทปัจจุบัน ใช้สำหรับสร้าง Measure เปรียบเทียบ Quarter-over-Quarter (QoQ) โดยคืนวันที่ครบทั้งไตรมาสเสมอ ไม่ว่าจะเลือกวันที่ใดก็ตาม ภายในใช้ PARALLELPERIOD(FIRSTDATE(dates), -1, QUARTER)
STARTOFMONTH คืนวันแรกของเดือนเป็นตาราง 1 แถว ใช้กับการวัดที่ขึ้นต่อจุดเวลา เช่น ยอดคงเหลือ บัญชี หรือสินค้าคงคลัง
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
DATEDIFF คำนวณจำนวนช่วงเวลา (วัน, สัปดาห์, เดือน, ปี ฯลฯ) ระหว่างสองวันที่ด้วยการนับจำนวนครั้งที่ข้ามขอบเขตของช่วงเวลา เป็นฟังก์ชันพื้นฐานสำหรับการคำนวณอายุ, ระยะเวลา, และการวิเคราะห์เวลา
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่