ใช้ตัวแปรเพื่อปรับปรุงสูตร DAX ของคุณ

ในฐานะผู้สร้างแบบจำลองข้อมูล การเขียนและการดีบักการคำนวณ DAX บางอย่างอาจเป็นเรื่องที่ท้าทาย ซึ่งเป็นเรื่องปกติที่ข้อกำหนดการคำนวณที่ซับซ้อนมักเกี่ยวข้องกับการเขียนนิพจน์ประสมหรือนิพจน์ซับซ้อน นิพจน์ประสมสามารถเกี่ยวข้องกับการใช้ฟังก์ชันที่ซ้อนกันมากมาย และอาจมีการนำตรรกะของนิพจน์กลับมาใช้ใหม่

การใช้ตัวแปรในสูตร DAX ของคุณสามารถช่วยให้คุณสามารถเขียนการคํานวณที่ซับซ้อนและมีประสิทธิภาพมากขึ้นได้ ตัวแปรสามารถปรับปรุงประสิทธิภาพและความน่าเชื่อถือ และความสามารถในการอ่านและลดความซับซ้อนได้

ในบทความนี้ เราจะแสดงให้เห็นถึงประโยชน์สามประการแรกโดยใช้ตัวอย่างหน่วยวัดสำหรับการเติบโตของยอดขายแบบรายปี (YoY) (สูตรของการเติบโตของยอดขายแบบรายปีคือ: ยอดขายที่ ขาย น้อยกว่าตามช่วงเวลาในปีที่ผ่านมา หารด้วย ยอดขายในช่วงเวลาเดียวกันของปีที่แล้ว)

มาเริ่มต้นจากข้อกำหนดหน่วยวัดต่อไปนี้กันดีกว่า

Sales YoY Growth % =
DIVIDE(
    ([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
    CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)

หน่วยวัดให้ผลลัพธ์ที่ถูกต้อง แต่ตอนนี้มาดูกันว่าเราจะสามารถปรับปรุงอะไรได้อย่างไรบ้าง

ปรับปรุงประสิทธิภาพ

ขอให้สังเกตว่าสูตรทำซ้ำนิพจน์ที่คำนวณ "ช่วงเวลาเดียวกันของปีที่แล้ว" สูตรนี้ไม่มีประสิทธิภาพ เนื่องจากต้องใช้ Power BI เพื่อประเมินนิพจน์เดียวกันสองครั้ง นิยามของการวัดผลสามารถมีประสิทธิภาพมากขึ้นโดยใช้ตัวแปร VAR

ข้อกำหนดหน่วยวัดต่อไปนี้แสดงถึงการปรับปรุง ซึ่งใช้นิพจน์เพื่อกำหนดผลลัพธ์ "ช่วงเวลาเดียวกันของปีที่แล้ว" ให้กับตัวแปรชื่อ SalesPriorYear จากนั้นตัวแปรจะถูกใช้สองครั้งในนิพจน์ RETURN

Sales YoY Growth % =
VAR SalesPriorYear =
    CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
    DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)

หน่วยวัดยังคงสร้างผลลัพธ์ที่ถูกต้องอย่างต่อเนื่องและใช้เวลาประมาณครึ่งหนึ่งของเวลาคิวรี

ปรับปรุงความสามารถในการอ่าน

ในข้อกำหนดหน่วยวัดก่อนหน้านี้ ให้สังเกตว่าตัวเลือกของชื่อตัวแปรทำให้นิพจน์ RETURN นั้นง่ายต่อการเข้าใจอย่างไร นิพจน์สั้นและสามารถอธิบายตัวเองได้

ทำให้การดีบักง่าย

ตัวแปรยังสามารถช่วยคุณในการดีบักสูตรอีกด้วย หากต้องการทดสอบนิพจน์ที่กำหนดให้กับตัวแปร คุณจะเขียนนิพจน์ RETURN ชั่วคราวอีกครั้งเพื่อแสดงผลตัวแปร

ข้อกำหนดหน่วยวัดต่อไปนี้ส่งกลับเฉพาะตัวแปร SalesPriorYear เท่านั้น สังเกตว่ามีการคอมเมนต์นิพจน์ RETURN ที่ตั้งใจไว้อย่างไร เทคนิคนี้ช่วยให้คุณสามารถย้อนกลับได้ง่ายเมื่อการดีบักเสร็จสมบูรณ์

Sales YoY Growth % =
VAR SalesPriorYear =
    CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
    --DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
    SalesPriorYear

ลดความซับซ้อน

ใน DAX เวอร์ชันก่อนหน้า ยังไม่สนับสนุนตัวแปร ซึ่งต้องใช้นิพจน์ที่ซับซ้อนที่นำบริบทตัวกรองใหม่เข้ามาใช้เพื่อใช้ฟังก์ชัน EARLIER หรือ EARLIEST DAX ในการอ้างอิงบริบทตัวกรองชั้นนอก แต่น่าเสียดายที่ผู้สร้างแบบจำลองข้อมูลพบว่าฟังก์ชันเหล่านี้เข้าใจและใช้งานยาก

ตัวแปรจะถูกประเมินนอกตัวกรองของคุณโดยใช้นิพจน์ RETURN เสมอ ด้วยเหตุผลนี้เมื่อคุณใช้ตัวแปรภายในบริบทตัวกรองที่ปรับเปลี่ยนแล้ว จะได้ผลลัพธ์เช่นเดียวกับฟังก์ชัน EARLIEST ดังนั้นจึงสามารถหลีกเลี่ยงการใช้ฟังก์ชัน EARLIER หรือ EARLIEST ได้ ซึ่งหมายความว่าตอนนี้คุณสามารถเขียนสูตรที่มีความซับซ้อนน้อยลง และทำความเข้าใจได้ง่ายขึ้น

พิจารณาคำจำกัดความคอลัมน์จากการคำนวณต่อไปนี้ที่ถูกเพิ่มลงในตาราง Subcategory ซึ่งจะประเมินอันดับสำหรับแต่ละหมวดหมู่ย่อยของผลิตภัณฑ์ตามค่าคอลัมน์ Subcategory Sales

Subcategory Sales Rank =
COUNTROWS(
    FILTER(
        Subcategory,
        EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
    )
) + 1

ฟังก์ชัน EARLIER ถูกใช้เพื่ออ้างถึงค่าคอลัมน์ Subcategory Salesในบริบทแถวปัจจุบัน

คุณสามารถปรับปรุงคำจำกัดความคอลัมน์จากการคำนวณให้ดีขึ้นได้โดยใช้ตัวแปรแทนฟังก์ชัน EARLIER ตัวแปร CurrentSubcategorySales เก็บค่าคอลัมน์ Subcategory Salesในบริบทแถวปัจจุบัน และนิพจน์ RETURN จะใช้ตัวแปรดังกล่าวภายในบริบทตัวกรองที่ปรับเปลี่ยนแล้ว

Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
    COUNTROWS(
        FILTER(
            Subcategory,
            CurrentSubcategorySales < Subcategory[Subcategory Sales]
        )
    ) + 1

นอกจากนี้ โปรดดู