คำนวณ
นําไปใช้กับ: การคํานวณคอลัมน์จากการคํานวณ ตารางจากการคํานวณ หน่วยวัดภาพการคํานวณ
ประเมินนิพจน์ในบริบทตัวกรองที่ปรับเปลี่ยนแล้ว
หมายเหตุ
นอกจากนี้ยังมีฟังก์ชัน CALCULATETABLE ซึ่งทําหน้าที่เหมือนกันทุกประการยกเว้นว่าจะปรับเปลี่ยนบริบทตัวกรองที่ใช้กับนิพจน์ที่ส่งกลับวัตถุตาราง
ไวยากรณ์
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
พารามิเตอร์
เงื่อนไข | คำนิยาม |
---|---|
สีหน้า | นิพจน์ที่จะประเมิน |
filter1, filter2,... | (ไม่บังคับ) นิพจน์บูลีนหรือนิพจน์ตารางที่กําหนดตัวกรอง หรือฟังก์ชันตัวแก้ไขตัวกรอง |
โดยหลักแล้ว นิพจน์ที่ใช้เป็นพารามิเตอร์แรกจะเหมือนกับหน่วยวัด
ตัวกรองสามารถเป็น:
- นิพจน์ตัวกรองบูลีน
- นิพจน์ตัวกรองตาราง
- ฟังก์ชันการปรับเปลี่ยนตัวกรอง
เมื่อมีตัวกรองหลายตัว คุณสามารถประเมินตัวกรองเหล่านั้นได้โดยใช้ตัวดําเนินการเชิงตรรกะ AND (&&) ซึ่งหมายความว่าเงื่อนไขทั้งหมดต้องเป็น TRUE หรือโดยตัวดําเนินการเชิงตรรกะ OR (||) ซึ่งหมายความว่าเงื่อนไขหนึ่งสามารถเป็นจริงได้
นิพจน์ตัวกรองบูลีน
ตัวกรองนิพจน์บูลีนคือนิพจน์ที่ประเมินเป็น TRUE หรือ FALSE มีกฎหลายอย่างที่พวกเขาต้องปฏิบัติตาม:
- พวกเขาสามารถอ้างอิงคอลัมน์จากตารางเดียวได้
- โดยไม่สามารถอ้างอิงหน่วยวัดได้
- ไม่สามารถใช้ฟังก์ชัน CALCULATE แบบซ้อนกันได้
เริ่มตั้งแต่การเผยแพร่เดือนกันยายน 2021 ของ Power BI Desktop จะมีการนําไปใช้ดังต่อไปนี้:
- พวกเขาไม่สามารถใช้ฟังก์ชันที่สแกนหรือส่งกลับตารางเว้นแต่จะถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยังฟังก์ชันการรวม
- ซึ่งอาจประกอบด้วยฟังก์ชันการรวมที่ส่งกลับค่าสเกลา ตัวอย่างเช่น
Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
นิพจน์ตัวกรองตาราง
ตัวกรองนิพจน์ตารางใช้วัตถุตารางเป็นตัวกรอง ซึ่งอาจเป็นการอ้างอิงไปยังตารางแบบจําลอง แต่มีแนวโน้มว่าจะเป็นฟังก์ชันที่ส่งกลับวัตถุตาราง คุณสามารถใช้ ฟังก์ชัน FILTER เพื่อใช้เงื่อนไขตัวกรองที่ซับซ้อน รวมถึงเงื่อนไขที่ไม่สามารถกําหนดโดยนิพจน์ตัวกรองบูลีนได้
ฟังก์ชันตัวแก้ไขตัวกรอง
ฟังก์ชันตัวปรับเปลี่ยนตัวกรองช่วยให้คุณทําได้มากกว่าเพียงแค่เพิ่มตัวกรอง ซึ่งช่วยให้คุณสามารถควบคุมเพิ่มเติมเมื่อแก้ไขบริบทตัวกรอง
Function | วัตถุประสงค์ |
---|---|
ลบตัวกรอง | ลบตัวกรองทั้งหมด หรือตัวกรองจากหนึ่งหรือหลายคอลัมน์ของตาราง หรือจากคอลัมน์ทั้งหมดของตารางเดียว |
ALL 1, ALLEXCEPT, ALLNOBLANKROW | เอาตัวกรองออกจากหนึ่งหรือหลายคอลัมน์ หรือจากคอลัมน์ทั้งหมดของตารางเดียว |
KEEPFILTERS | เพิ่มตัวกรองโดยไม่ต้องลบตัวกรองที่มีอยู่บนคอลัมน์เดียวกัน |
USERELATIONSHIP | มีส่วนร่วมในความสัมพันธ์ที่ไม่ได้ใช้งานระหว่างคอลัมน์ที่เกี่ยวข้อง ซึ่งในกรณีนี้ความสัมพันธ์ที่ใช้งานอยู่จะกลายเป็นไม่ใช้งานโดยอัตโนมัติ |
CROSSFILTER | ปรับเปลี่ยนทิศทางตัวกรอง (จากทั้งสองเป็นเดี่ยว หรือจากเดี่ยวเป็นทั้งสอง) หรือปิดใช้งานความสัมพันธ์ |
1 ฟังก์ชัน ALL และตัวแปรจะทํางานเป็นทั้งตัวปรับเปลี่ยนตัวกรองและเป็นฟังก์ชันที่ส่งกลับออบเจ็กต์ตาราง หากเครื่องมือของคุณรองรับฟังก์ชัน REMOVEFILTERS คุณควรใช้ฟังก์ชันนี้เพื่อนําตัวกรองออก
ค่าที่ส่งกลับ
ค่าที่เป็นผลลัพธ์ของนิพจน์
หมายเหตุ
เมื่อมีการระบุนิพจน์ตัวกรอง ฟังก์ชัน CALCULATE จะปรับเปลี่ยนบริบทตัวกรองเพื่อประเมินนิพจน์ สําหรับแต่ละนิพจน์ตัวกรอง มีผลลัพธ์มาตรฐานที่เป็นไปได้สองประการเมื่อนิพจน์ตัวกรองไม่ได้ถูกครอบอยู่ในฟังก์ชัน KEEPFILTERS:
- ถ้าคอลัมน์ (หรือตาราง) ไม่ได้อยู่ในบริบทตัวกรอง ระบบจะเพิ่มตัวกรองใหม่ลงในบริบทตัวกรองเพื่อประเมินนิพจน์
- ถ้าคอลัมน์ (หรือตาราง) อยู่ในบริบทตัวกรองแล้ว ตัวกรองที่มีอยู่จะถูกเขียนทับโดยตัวกรองใหม่เพื่อประเมินนิพจน์ CALCULATE
ฟังก์ชัน CALCULATE ที่ใช้ โดยไม่มีตัวกรอง บรรลุข้อกําหนดเฉพาะ ซึ่งจะเปลี่ยนบริบทแถวเพื่อกรองบริบท ซึ่งจําเป็นต้องมีเมื่อนิพจน์ (ไม่ใช่หน่วยวัดแบบจําลอง) ที่สรุปข้อมูลแบบจําลองต้องได้รับการประเมินในบริบทแถว สถานการณ์นี้สามารถเกิดขึ้นได้ในสูตรคอลัมน์จากการคำนวณหรือเมื่อมีการประเมินนิพจน์ในฟังก์ชันตัวทำซ้ำ โปรดทราบว่าเมื่อมีการใช้หน่วยวัดแบบจําลองในบริบทแถว การเปลี่ยนบริบทจะเป็นไปโดยอัตโนมัติ
ฟังก์ชันนี้ไม่ได้รับการสนับสนุนสําหรับการใช้งานในโหมด DirectQuery เมื่อใช้ในคอลัมน์จากการคํานวณหรือกฎการรักษาความปลอดภัยระดับแถว (RLS)
ตัวอย่าง
ข้อกําหนดหน่วยวัดของตาราง Sales ต่อไปนี้สร้างผลลัพธ์รายได้ แต่เฉพาะผลิตภัณฑ์ที่มีสีน้ําเงินเท่านั้น
ตัวอย่างในบทความนี้สามารถใช้ได้กับตัวอย่าง Adventure Works DW 2020 Power BI Desktop แบบจําลอง หากต้องการรับแบบจําลอง โปรดดู แบบจําลองตัวอย่าง DAX
Blue Revenue =
CALCULATE(
SUM(Sales[Sales Amount]),
'Product'[Color] = "Blue"
)
หมวดหมู่ | ยอดขาย | สีน้ําเงิน รายได้ |
---|---|---|
อุปกรณ์ | $1,272,057.89 | $165,406.62 |
จักรยาน | $94,620,526.21 | $8,374,313.88 |
เสื้อผ้า | $2,117,613.45 | $259,488.37 |
คอมโพเนนต์ | $11,799,076.66 | $803,642.10 |
ยอดรวม | $109,809,274.20 | $9,602,850.97 |
ฟังก์ชัน CALCULATE ประเมินผลรวมของคอลัมน์ Sales Amount ในตาราง Sales ในบริบทตัวกรองที่ปรับเปลี่ยน ตัวกรองใหม่จะถูกเพิ่มไปยังคอลัมน์ Color ของตาราง Product หรือตัวกรองจะเขียนทับตัวกรองใดก็ตามที่มีการนําไปใช้กับคอลัมน์อยู่แล้ว
ข้อกําหนดหน่วยวัดของตาราง Sales ต่อไปนี้จะสร้างอัตราส่วนของยอดขายต่อยอดขายสําหรับช่องทางการขายทั้งหมด
แชนเนล | ยอดขาย | % รายได้ ช่องทางทั้งหมด |
---|---|---|
อินเทอร์เน็ต | $29,358,677.22 | 26.74% |
Reseller | 80,450,596.98 ดอลลาร์ | 73.26% |
ยอดรวม | $109,809,274.20 | 100.00% |
Revenue % Total Channel =
DIVIDE(
SUM(Sales[Sales Amount]),
CALCULATE(
SUM(Sales[Sales Amount]),
REMOVEFILTERS('Sales Order'[Channel])
)
)
ฟังก์ชัน DIVIDE หารนิพจน์ที่รวมค่าคอลัมน์ Sales Amount ในตาราง Sales (ในบริบทตัวกรอง) โดยใช้นิพจน์เดียวกันในบริบทตัวกรองที่ปรับเปลี่ยนแล้ว ซึ่งเป็นฟังก์ชัน CALCULATE ที่ปรับเปลี่ยนบริบทตัวกรองโดยใช้ฟังก์ชัน REMOVEFILTERS ซึ่งเป็นฟังก์ชันตัวปรับเปลี่ยนตัวกรอง ซึ่งจะเป็นการเอาตัวกรองออกจากคอลัมน์ Channel ในตาราง Sales Order
ข้อกําหนดคอลัมน์จากการคํานวณของตาราง Customer ต่อไปนี้จะจัดประเภทลูกค้าเป็นระดับความจงรักภักดี ซึ่งเป็นสถานการณ์ที่ง่ายมาก: เมื่อรายได้ที่เกิดจากลูกค้าน้อยกว่า $2500 พวกเขาจะถูกจัดประเภทเป็น ต่ํา มิฉะนั้นจะถูกจัดเป็น สูง
Customer Segment =
IF(
CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
"Low",
"High"
)
ในตัวอย่างนี้ บริบทแถวจะถูกแปลงเป็นบริบทตัวกรอง ซึ่งเรียกว่า การเปลี่ยนบริบท ฟังก์ชัน ALLEXCEPT เอาตัวกรองออกจากคอลัมน์ตารางลูกค้าทั้งหมดยกเว้นคอลัมน์ CustomerKey
เนื้อหาที่เกี่ยวข้อง
บริบทตัวกรอง
บริบทแถว
ฟังก์ชัน CALCULATETABLE
ฟังก์ชันตัวกรอง