CALCULATE

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

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

โน้ต

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

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

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

พารามิเตอร์

เทอม นิยาม
expression นิพจน์ที่จะประเมิน
filter1, filter2,… (ไม่บังคับ) นิพจน์บูลีนหรือนิพจน์ตารางที่กําหนดตัวกรอง หรือฟังก์ชันตัวแก้ไขตัวกรอง

นิพจน์ที่คุณใช้เป็นพารามิเตอร์แรกทํางานเหมือนกับหน่วยวัด

ตัวกรองสามารถเป็น:

  • นิพจน์ตัวกรองบูลีน
  • นิพจน์ตัวกรองตาราง
  • ฟังก์ชันการปรับเปลี่ยนตัวกรอง

เมื่อคุณใช้ตัวกรองหลายตัว คุณสามารถประเมินได้โดยใช้ตัว AND ดําเนินการเชิงตรรกะ (&&) ซึ่งหมายความว่าเงื่อนไขทั้งหมดต้องเป็น TRUE, หรือ โดยตัว OR ดําเนินการเชิงตรรกะ (||) ซึ่งหมายความว่าเงื่อนไขอย่างใดอย่างหนึ่งสามารถเป็นจริงได้ สําหรับข้อมูลเพิ่มเติม ดู DAX ตัวดําเนินการเชิงตรรกะของตัวดําเนินการ>

นิพจน์ตัวกรองบูลีน

ตัวกรองนิพจน์บูลีนคือนิพจน์ที่ประเมินเป็น TRUE หรือ FALSE ซึ่งต้องปฏิบัติตามกฎหลายกฎ:

  • ซึ่งสามารถอ้างอิงคอลัมน์จากตารางเดียวได้

  • ซึ่งไม่สามารถอ้างอิงหน่วยวัดได้

  • ไม่สามารถใช้ฟังก์ชันที่ CALCULATE ซ้อนกันได้

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

  • ซึ่งอาจประกอบด้วยฟังก์ชันการรวมที่ส่งกลับค่าสเกลา เช่น:

    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)

ตัว อย่าง เช่น

ตัวอย่างในบทความนี้สามารถใช้ได้กับตัวอย่าง Adventure Works DW 2020 Power BI Desktop แบบจําลอง หากต้องการรับแบบจําลอง โปรดดู DAX แบบจําลองตัวอย่าง

ข้อกําหนดหน่วยวัดของตาราง Sales ต่อไปนี้สร้างผลลัพธ์รายได้ แต่เฉพาะผลิตภัณฑ์ที่มีสีน้ําเงินเท่านั้น

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 ต่อไปนี้สร้างอัตราส่วนของยอดขายต่อยอดขายสําหรับช่องทางการขายทั้งหมด

Revenue % Total Channel =
DIVIDE (
    SUM ( Sales[Sales Amount] ),
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        REMOVEFILTERS ( 'Sales Order'[Channel] )
    )
)
ช่อง ปริมาณยอดขาย รายได้ % ช่องทางทั้งหมด
อินเทอร์เน็ต $29,358,677.22 26.74%
ตัว แทน จำหน่าย $80,450,596.98 73.26%
ผลรวม $109,809,274.20 100.00%

ฟังก์ชัน DIVIDE หารนิพจน์ที่รวมผลรวมของตาราง SalesSales Amount ค่าคอลัมน์ (ในบริบทตัวกรอง) โดยใช้นิพจน์เดียวกันในบริบทตัวกรองที่ปรับเปลี่ยนแล้ว เป็นฟังก์ชัน CALCULATE ที่ปรับเปลี่ยนบริบทตัวกรองโดยใช้ฟังก์ชัน REMOVEFILTERS ซึ่งเป็นฟังก์ชันตัวปรับเปลี่ยนตัวกรอง ซึ่งจะลบตัวกรองออกจากตาราง ของ Sales Order คอลัมน์ Channel

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

Customer Segment =
IF (
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        ALLEXCEPT ( Customer, Customer[CustomerKey] )
    ) < 2500,
    "Low",
    "High"
)
เซกเมนต์ลูกค้า จํานวนลูกค้า ปริมาณยอดขาย
สูง 4,637 $102,670,663.09
ตํ่า 13,848 $7,138,611.11
ผลรวม 18,485 $109,809,274.20

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