คำนวณ

นําไปใช้กับ:การคํานวณคอลัมน์จากการคํานวณ ตารางจากการคํานวณ หน่วยวัดการคํานวณวิชวล

ประเมินนิพจน์ในบริบทตัวกรองที่ปรับเปลี่ยนแล้ว

หมายเหตุ

นอกจากนี้ยังมีฟังก์ชัน 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 วัตถุประสงค์
ลบตัวกรอง ลบตัวกรองทั้งหมด หรือตัวกรองจากหนึ่งหรือหลายคอลัมน์ของตาราง หรือจากคอลัมน์ทั้งหมดของตารางเดียว
ALL1, 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
ฟังก์ชันตัวกรอง