หลีกเลี่ยงการใช้ตัวกรองเป็นอาร์กิวเมนต์ตัวกรอง
ในฐานะที่เป็นผู้สร้างแบบจำลองข้อมูล คุณจะเขียนนิพจน์ DAX ที่จำเป็นต้องได้รับการประเมินในบริบทตัวกรองที่ปรับเปลี่ยนแล้ว ตัวอย่างเช่น คุณสามารถเขียนข้อกำหนดหน่วยวัดเพื่อคำนวณยอดขายสำหรับ "ผลิตภัณฑ์ที่มีอัตรากำไรสูง" เราจะอธิบายการคำนวณนี้ในภายหลังในบทความนี้
หมายเหตุ
บทความนี้จะเกี่ยวข้องโดยเฉพาะอย่างยิ่งสำหรับการคำนวณแบบจำลองที่ใช้ตัวกรองในการนำเข้าตาราง
ฟังก์ชัน CALCULATE และ CALCULATETABLE DAX เป็นฟังก์ชันที่สำคัญและมีประโยชน์ ซึ่งช่วยให้คุณสามารถเขียนการคำนวณที่ลบหรือเพิ่มตัวกรอง หรือปรับเปลี่ยนเส้นทางความสัมพันธ์ได้ การดำเนินการโดยการส่งผ่านในอาร์กิวเมนต์ตัวกรอง ซึ่งเป็นนิพจน์บูลีน นิพจน์ตาราง หรือฟังก์ชันตัวกรองพิเศษ เราจะพูดคุยเกี่ยวกับนิพจน์บูลีนและตารางในบทความนี้เท่านั้น
พิจารณาข้อกำหนดหน่วยวัดต่อไปนี้ ซึ่งจะคำนวณยอดขายผลิตภัณฑ์สีแดงโดยใช้นิพจน์ตาราง การดำเนินการดังกล่าวจะแทนที่ตัวกรองใด ๆ ที่อาจใช้กับตาราง ผลิตภัณฑ์
Red Sales =
CALCULATE(
[Sales],
FILTER('Product', 'Product'[Color] = "Red")
)
ฟังก์ชันการคำนวณจะยอมรับนิพจน์ตารางที่ส่งกลับโดยฟังก์ชัน FILTER DAX ซึ่งประเมินนิพจน์ตัวกรองสำหรับแต่ละแถวของตารางผลิตภัณฑ์ ซึ่งเป็นผลลัพธ์ที่ถูกต้อง–ผลการขายสำหรับผลิตภัณฑ์สีแดง อย่างไรก็ตาม อาจมีประสิทธิภาพมากขึ้นด้วยการใช้นิพจน์บูลีน
ข้อกำหนดนี้เป็นข้อกำหนดหน่วยวัดที่ได้รับการปรับปรุง ซึ่งใช้นิพจน์บูลีนแทนที่จะเป็นนิพจน์ตาราง ฟังก์ชัน KEEPFILTERS DAX ช่วยให้แน่ใจว่าตัวกรองใดๆ ที่มีอยู่ที่ใช้กับคอลัมน์ สี ได้รับการรักษาไว้และไม่ได้เขียนทับ
Red Sales =
CALCULATE(
[Sales],
KEEPFILTERS('Product'[Color] = "Red")
)
คุณควรส่งผ่านอาร์กิวเมนต์ตัวกรองเป็นนิพจน์บูลีนเมื่อใดก็ตามที่เป็นไปได้ เนื่องจากมีการนำเข้าตารางแบบจำลองเป็นที่เก็บคอลัมน์ในหน่วยความจำ ซึ่งจะได้รับการปรับให้เหมาะสมเพื่อให้สามารถกรองคอลัมน์ได้อย่างมีประสิทธิภาพด้วยวิธีนี้
อย่างไรก็ตาม มีข้อจำกัดที่ใช้กับนิพจน์บูลีนเมื่อใช้เป็นอาร์กิวเมนต์ตัวกรอง ข้อจำกัดเหล่านั้นคือ:
- ไม่สามารถเปรียบเทียบคอลัมน์กับคอลัมน์อื่นได้
- ไม่สามารถอ้างอิงหน่วยวัดได้
- ไม่สามารถใช้ฟังก์ชันการคำนวณแบบซ้อนกันได้
- ไม่สามารถใช้ฟังก์ชันที่สแกนหรือแสดงเป็นตารางได้
ซึ่งหมายความว่าคุณจะต้องใช้นิพจน์ตารางสำหรับข้อกำหนดของตัวกรองที่ซับซ้อนมากขึ้น
ตอนนี้ให้พิจารณาข้อกำหนดหน่วยวัดที่แตกต่างกัน
High Margin Product Sales =
CALCULATE(
[Sales],
FILTER(
'Product',
'Product'[ListPrice] > 'Product'[StandardCost] * 2
)
)
ข้อกำหนดของ ผลิตภัณฑ์ที่มีอัตรากำไรสูง เป็นหนึ่งข้อกำหนดที่มีราคาตามรายการเกินกว่าค่าใช้จ่ายมาตรฐานสองเท่า ในตัวอย่างนี้ ฟังก์ชัน FILTER ต้องถูกนำมาใช้ เนื่องจากนิพจน์ตัวกรองมีความซับซ้อนเกินไปสำหรับนิพจน์บูลีน
นี่คือหนึ่งในตัวอย่างเพิ่มเติม ความต้องการในขณะนี้คือการคำนวณยอดขาย แต่เฉพาะสำหรับเดือนที่มีกำไรเท่านั้น
Sales for Profitable Months =
CALCULATE(
[Sales],
FILTER(
VALUES('Date'[Month]),
[Profit] > 0)
)
)
ในตัวอย่างนี้ ฟังก์ชัน FILTER ต้องถูกนำมาใช้ เนื่องจากจำเป็นต้องประเมินผลหน่วยวัดกำไรเพื่อลบเดือนที่ไม่ได้กำไรออกไป ซึ่งไม่สามารถใช้หน่วยวัดในนิพจน์บูลีนเมื่อใช้เป็นอาร์กิวเมนต์ตัวกรอง
คำแนะนำ
เพื่อประสิทธิภาพที่ดีที่สุด คุณควรใช้นิพจน์บูลีนเป็นอาร์กิวเมนต์ตัวกรองเมื่อใดก็ตามที่เป็นไปได้
ดังนั้นควรใช้ฟังก์ชัน FILTER เฉพาะเมื่อจำเป็นเท่านั้น คุณสามารถใช้เพื่อดำเนินการเปรียบเทียบคอลัมน์ที่ซับซ้อนของตัวกรองได้ การเปรียบเทียบคอลัมน์เหล่านี้อาจเกี่ยวข้องกับ:
- หน่วยวัด
- คอลัมน์อื่น ๆ
- การใช้ฟังก์ชัน OR DAX หรือตัวดำเนินการ OR เชิงตรรกะ (||)
นอกจากนี้ โปรดดู
- ฟังก์ชันตัวกรอง (DAX)
- เส้นทางการเรียนรู้: ใช้ DAX ใน Power BI Desktop
- มีคำถามหรือไม่ ลองถามชุมชน Power BI
- มีข้อเสนอแนะไหม สนับสนุนแนวคิดในการปรับปรุง Power BI