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