การคำนวณตัวแสดงเวลาเพิ่มเติม
ฟังก์ชันตัวแสดงเวลาของ DAX อื่นๆ ที่คำนึงถึงการส่งกลับวันที่เดียว คุณจะได้เรียนรู้เกี่ยวกับฟังก์ชันเหล่านี้โดยการนำไปใช้ในสองสถานการณ์ที่แตกต่างกัน
และFIRSTDATE
LASTDATE
ฟังก์ชัน DAX จะแสดงวันที่แรกและสุดท้ายในบริบทตัวกรองปัจจุบันสําหรับคอลัมน์ที่ระบุของวันที่
คำนวณเหตุการณ์ใหม่
การใช้ฟังก์ชันตัวแสดงเวลาอื่นคือการนับจำนวนครั้งใหม่ ตัวอย่างต่อไปนี้แสดงวิธีที่คุณสามารถคำนวณจำนวนลูกค้าใหม่สำหรับช่วงเวลา ลูกค้าใหม่จะถูกนับในช่วงเวลาที่พวกเขาทำการซื้อครั้งแรก
งานแรกของคุณคือการเพิ่มหน่วยวัดต่อไปนี้ลงในตาราง ยอดขาย ที่นับจํานวนของลูกค้าที่แตกต่างกัน ในชีวิตปัจจุบัน (LTD) ชีวิตประจำวันหมายถึงวันที่เริ่มต้นจนถึงวันสุดท้ายในบริบทตัวกรอง จัดรูปแบบหน่วยวัดเป็นจำนวนเต็มโดยใช้ตัวคั่นหลักพัน
Customers LTD =
VAR CustomersLTD =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MAX('Date'[Date])
),
'Sales Order'[Channel] = "Internet"
)
RETURN
CustomersLTD
เพิ่มหน่วยวัดลูกค้า LTD สำหรับการแสดงผลด้วยภาพเมทริกซ์ โปรดสังเกตว่าการดำเนินการนี้จะสร้างผลลัพธ์ของลูกค้าที่แตกต่างกันจนถึงสิ้นสุดของแต่ละเดือน
ฟังก์ชัน DATESBETWEEN
จะแสดงตารางที่ประกอบด้วยคอลัมน์ของวันที่ที่เริ่มต้นด้วยวันที่เริ่มต้นที่กําหนดและดําเนินการต่อจนถึงวันที่สิ้นสุดที่กําหนด เมื่อวันที่เริ่มต้นเป็น BLANK ตารางจะใช้วันที่แรกในคอลัมน์วันที่ (ตรงกันข้าม เมื่อวันที่สิ้นสุดเป็น BLANK ตารางจะใช้วันที่สุดท้ายในคอลัมน์วันที่) ในกรณีนี้ วันที่สิ้นสุดจะถูกกำหนดโดยฟังก์ชัน MAX ซึ่งส่งคืนวันที่สุดท้ายในบริบทตัวกรอง ดังนั้น ถ้าเดือนสิงหาคม 2017 อยู่ในบริบทตัวกรองแล้ว ฟังก์ชัน MAX จะส่งคืนวันที่ 31 สิงหาคม 2017 และ DATESBETWEEN
ฟังก์ชันจะส่งคืนวันที่ทั้งหมดจนถึงวันที่ 31 สิงหาคม 2017
ต่อไป คุณจะแก้ไขหน่วยวัดโดยการเปลี่ยนชื่อเป็นลูกค้าใหม่และโดยการเพิ่มตัวแปรที่สองเพื่อจัดเก็บจำนวนของลูกค้าที่แตกต่างกันก่อนช่วงเวลาในบริบทตัวกรอง ตอนนี้ RETURN
ส่วนคําสั่งลบค่านี้ออกจากลูกค้า LTD เพื่อสร้างผลลัพธ์ซึ่งก็คือจํานวนลูกค้าใหม่ในช่วงเวลานั้น
New Customers =
VAR CustomersLTD =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MAX('Date'[Date])
),
'Sales Order'[Channel] = "Internet"
)
VAR CustomersPrior =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MIN('Date'[Date]) - 1
),
'Sales Order'[Channel] = "Internet"
)
RETURN
CustomersLTD - CustomersPrior
สําหรับตัวแปร CustomersPrior ให้สังเกตว่า DATESBETWEEN
ฟังก์ชันมีวันที่จนถึงวันที่แรกในบริบทตัวกรอง ลบ หนึ่ง เนื่องจาก Microsoft Power BI ภายในร้านค้าวันที่เป็นตัวเลข คุณสามารถเพิ่มหรือลบตัวเลขเพื่อเปลี่ยนวันที่ได้
การคำนวณสแนปช็อต
ในบางครั้ง ข้อมูลความเป็นจริงจะถูกจัดเก็บเป็นสแนปช็อตในเวลา ตัวอย่างทั่วไปได้แก่ระดับสต็อกหรือยอดดุลบัญชีสินค้าคงคลัง สแนปช็อตของค่าถูกโหลดลงในตารางเป็นครั้งคราว
เมื่อสรุปค่าสแนปช็อต (เช่นระดับสต็อกสินค้าคงคลัง) คุณสามารถสรุปค่าในมิติใดก็ได้ยกเว้นวันที่ การเพิ่มการนับระดับสต็อกในประเภทผลิตภัณฑ์สร้างข้อมูลสรุปที่มีความหมาย แต่การเพิ่มการนับระดับสต็อกในวันที่นั้นทำไม่ได้ การเพิ่มระดับสต็อกของเมื่อวานนี้ในระดับสต็อกไม่ใช่การดำเนินการที่เป็นประโยชน์ในการดำเนินการ (เว้นแต่ว่าคุณต้องการค่าเฉลี่ยที่เป็นผล)
เมื่อคุณกำลังสรุปตารางสแนปช็อต สูตรหน่วยวัดสามารถพึ่งพาฟังก์ชันตัวแสดงเวลาของ DAX เพื่อบังคับใช้ตัวกรองวันที่เดียวได้
ในตัวอย่างต่อไปนี้ คุณจะสำรวจสถานการณ์สมมติสำหรับบริษัท Adventure Works สลับไปยังมุมมองแบบจำลองและเลือกไดอะแกรมแบบจำลองสินค้าคงคลัง
โปรดสังเกตว่าไดอะแกรมแสดงสามตาราง: ผลิตภัณฑ์วันที่ และสินค้าคงคลัง ตาราง สินค้าคงคลัง จัดเก็บสแนปช็อตของยอดดุลหน่วยสําหรับแต่ละวันที่และผลิตภัณฑ์ สิ่งที่สำคัญคือตารางไม่มีวันที่หายไปและไม่มีรายการซ้ำสำหรับผลิตภัณฑ์ใดๆ ในวันที่เดียวกัน นอกจากนี้ ระเบียนสแนปช็อตสุดท้ายจะถูกจัดเก็บไว้สำหรับวันที่ 15 มิถุนายน 2020
ในตอนนี้ ให้สลับไปยังมุมมองรายงานและเลือกหน้า 2 ของรายงาน เพิ่มคอลัมน์ UnitsBalance ของตาราง สินค้าคงคลัง ไปยังภาพเมทริกซ์ การสรุปเริ่มต้นถูกตั้งค่าเป็นผลรวม
การกำหนดค่าภาพนี้เป็นตัวอย่างของวิธีที่จะไม่สรุปค่าสแนปช็อต การเพิ่มยอดคงเหลือสแนปช็อตรายวันด้วยกันไม่ได้สร้างผลลัพธ์ที่มีความหมาย ดังนั้น ให้ลบเขตข้อมูล UnitsBalance จากภาพเมทริกซ์
ในตอนนี้ คุณจะเพิ่มหน่วยวัดไปยังตาราง สินค้าคงคลัง ที่หาผลรวมของค่า UnitsBalanceสําหรับวันที่เดียวได้ วันที่จะเป็นวันที่สุดท้ายของแต่ละช่วงเวลา ซึ่งทําได้โดยใช้ LASTDATE
ฟังก์ชัน จัดรูปแบบหน่วยวัดเป็นจำนวนเต็มโดยใช้ตัวคั่นหลักพัน
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTDATE('Date'[Date])
)
หมายเหตุ
โปรดสังเกตว่าสูตรหน่วยวัดใช้ SUM
ฟังก์ชัน ต้องใช้ฟังก์ชันการรวม (หน่วยวัดไม่อนุญาตให้มีการอ้างอิงโดยตรงไปยังคอลัมน์) แต่จะมีเพียงหนึ่งแถวเท่านั้นที่มีอยู่สําหรับแต่ละผลิตภัณฑ์สําหรับแต่ละวันที่ SUM
ฟังก์ชันจะดําเนินการในแถวเดียวเท่านั้น
เพิ่มหน่วยวัดสต็อกคงเหลือสำหรับการแสดงผลด้วยภาพเมทริกซ์ ในตอนนี้ค่าสำหรับแต่ละผลิตภัณฑ์จะขึ้นอยู่กับยอดคงเหลือหน่วยที่บันทึกไว้ครั้งล่าสุดสำหรับแต่ละเดือน
หน่วยวัดส่งกลับว่างสำหรับเดือนมิถุนายน 2020 เนื่องจากไม่มีระเบียนอยู่ในวันที่สุดท้ายในเดือนมิถุนายน ตามข้อมูลแล้ว มันยังไม่เกิดขึ้น
การกรองตามวันที่ล่าสุดในบริบทตัวกรองมีปัญหาโดยธรรมชาติดังนี้: วันที่บันทึกอาจไม่มีอยู่เนื่องจากไม่ได้เกิดขึ้นหรืออาจเนื่องมาจากยอดคงเหลือของสต็อกจะไม่ได้รับการบันทึกในวันสุดสัปดาห์
ขั้นตอนถัดไปของคุณคือการปรับปรุงสูตรหน่วยวัดเพื่อกำหนดวันที่ล่าสุดที่มีผลลัพธ์ที่ไม่ใช่ BLANK จากนั้นกรองตามวันที่ดังกล่าว คุณสามารถทํางานนี้ได้โดยใช้ LASTNONBLANK
ฟังก์ชัน DAX
ใช้ข้อกำหนดของหน่วยวัดต่อไปนี้เพื่อแก้ไขหน่วยวัดสต็อกคงเหลือ
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTNONBLANK(
'Date'[Date],
CALCULATE(SUM(Inventory[UnitsBalance]))
)
)
ในภาพเมทริกซ์ ให้สังเกตค่าสำหรับเดือนมิถุนายน 2020 และผลรวม (แสดงทั้งปี)
ฟังก์ชัน LASTNONBLANK
เป็นฟังก์ชันตัวทําซ้ํา ซึ่งส่งกลับวันที่สุดท้ายที่สร้างผลลัพธ์ที่ไม่ใช่ BLANK การดำเนินการนี้จะทำให้เกิดผลลัพธ์นี้ซ้ำผ่านวันที่ทั้งหมดในบริบทตัวกรองตามลำดับเวลาจากมากไปหาน้อย (ตรงกันข้าม ตัว FIRSTNONBLANK
ทําซ้ําตามลําดับเวลาจากน้อยไปหามาก) สําหรับแต่ละวันที่ จะประเมินการส่งผ่านในนิพจน์ เมื่อพบผลลัพธ์ไม่ใช่ค่าว่าง ฟังก์ชันจะส่งกลับวันที่ จากนั้นวันที่จะถูกใช้เพื่อกรอง CALCULATE
ฟังก์ชัน
หมายเหตุ
ฟังก์ชัน LASTNONBLANK
นี้จะประเมินนิพจน์ในบริบทแถว
CALCULATE
ต้องใช้ฟังก์ชันในการเปลี่ยนบริบทแถวเพื่อกรองบริบทเพื่อประเมินนิพจน์อย่างถูกต้อง
ขณะนี้คุณควรซ่อนตารางสินค้าคงคลัง คอลัมน์ UnitsBalance ซึ่งจะป้องกันไม่ให้ผู้เขียนรายงานสรุปยอดดุลของหน่วยสแนปช็อตที่ไม่เหมาะสมได้