แชร์ผ่าน


ใช้ตัวแปรเพื่อปรับปรุงสูตร 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