ใช้ตัวแปรเพื่อปรับปรุงสูตร 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
นอกจากนี้ โปรดดู
- บทความ VAR DAX
- เส้นทางการเรียนรู้: ใช้ DAX ใน Power BI Desktop
- มีคำถามหรือไม่ ลองถามชุมชน Power BI