การคำนวณตัวแสดงเวลาเพิ่มเติม

เสร็จสมบูรณ์เมื่อ

ฟังก์ชันตัวแสดงเวลาของ DAX อื่นๆ ที่คำนึงถึงการส่งกลับวันที่เดียว คุณจะได้เรียนรู้เกี่ยวกับฟังก์ชันเหล่านี้โดยการนำไปใช้ในสองสถานการณ์ที่แตกต่างกัน

และFIRSTDATELASTDATEฟังก์ชัน 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 ซึ่งจะป้องกันไม่ให้ผู้เขียนรายงานสรุปยอดดุลของหน่วยสแนปช็อตที่ไม่เหมาะสมได้