แชร์ผ่าน


CALCULATE

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

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

โน้ต

นอกจากนี้ยังมีฟังก์ชัน CALCULATETABLE ซึ่งทําหน้าที่เหมือนกันทุกประการ ยกเว้นว่าจะปรับเปลี่ยนบริบทตัวกรอง ที่ใช้กับนิพจน์ที่ส่งกลับออบเจ็กต์ตาราง

วากยสัมพันธ์

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

พารามิเตอร์

เทอม นิยาม
expression นิพจน์ที่จะประเมิน
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 เพื่อใช้เงื่อนไขตัวกรองที่ซับซ้อน รวมถึงเงื่อนไขที่ไม่สามารถกําหนดโดยนิพจน์ตัวกรองบูลีนได้

ฟังก์ชันตัวแก้ไขตัวกรอง

ฟังก์ชันตัวปรับเปลี่ยนตัวกรองช่วยให้คุณทําได้มากกว่าเพียงแค่เพิ่มตัวกรอง ซึ่งช่วยให้คุณสามารถควบคุมเพิ่มเติมเมื่อแก้ไขบริบทตัวกรอง

ฟังก์ชัน วัตถุประสงค์
REMOVEFILTERS ลบตัวกรองทั้งหมด หรือตัวกรองจากหนึ่งหรือหลายคอลัมน์ของตาราง หรือจากคอลัมน์ทั้งหมดของตารางเดียว
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คอลัมน์ Sales Amount ในบริบทตัวกรองที่ปรับเปลี่ยนแล้ว ตัวกรองใหม่จะถูกเพิ่มลงในตาราง Productคอลัมน์ Color หรือตัวกรองจะเขียนทับตัวกรองใดๆ ก็ตามที่มีการนําไปใช้กับคอลัมน์อยู่แล้ว

ข้อกําหนดหน่วยวัดของตาราง Sales ต่อไปนี้สร้างอัตราส่วนของยอดขายต่อยอดขายสําหรับช่องทางการขายทั้งหมด

ช่อง ปริมาณยอดขาย รายได้ % ช่องทางทั้งหมด
อินเทอร์เน็ต $29,358,677.22 26.74%
ตัว แทน จำหน่าย $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 หารนิพจน์ที่รวมผลรวมของตาราง SalesSales Amount ค่าคอลัมน์ (ในบริบทตัวกรอง) โดยใช้นิพจน์เดียวกันในบริบทตัวกรองที่ปรับเปลี่ยนแล้ว เป็นฟังก์ชัน CALCULATE ที่ปรับเปลี่ยนบริบทตัวกรองโดยใช้ฟังก์ชัน REMOVEFILTERS ซึ่งเป็นฟังก์ชันตัวปรับเปลี่ยนตัวกรอง ซึ่งจะลบตัวกรองออกจากตาราง ของ Sales Order คอลัมน์ Channel

ข้อกําหนดคอลัมน์จากการคํานวณของตาราง ของลูกค้า ต่อไปนี้จะจําแนกประเภทลูกค้าเป็นระดับความภักดี นี่คือสถานการณ์ที่ง่ายมาก: เมื่อรายได้ที่เกิดจากลูกค้าน้อยกว่า $2500 พวกเขาจะถูกจัดประเภทเป็น ต่ํา มิฉะนั้น สูง

Customer Segment =
IF(
    CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
    "Low",
    "High"
)

ในตัวอย่างนี้ บริบทแถวจะถูกแปลงเป็นบริบทตัวกรอง ซึ่งเรียกว่า การเปลี่ยนบริบท ฟังก์ชัน จะเอาตัวกรองออกจากคอลัมน์ของตาราง Customer ทั้งหมด ยกเว้นคอลัมน์ CustomerKey

บริบทตัวกรอง ฟังก์ชันCALCULATETABLE บริบทแถวฟังก์ชันตัวกรอง