การประเมินการจัดกลุ่ม DAX

Aug 16 2020

ในมาตรการนี้ - ฉันกำลังสร้างตารางชั่วคราวเพื่อจัดกลุ่มตามรหัสลูกค้าและส่งคืนปีของวันสั่งซื้อขั้นต่ำสำหรับลูกค้าแต่ละราย จากนั้นฉันต้องการนับจำนวนลูกค้าที่ปรากฏในปีหนึ่ง ๆ (โดยทั่วไปเป็นเพียงการนับแถว)

สิ่งที่ฉันพยายามทำความเข้าใจคือ - สูตรนี้ดูเหมือนจะไม่ได้ดูSUMMARIZEตารางข้างใน ถ้าฉันใส่ปีและหน่วยวัดนี้ในเมทริกซ์จะนับตามตารางดิบไม่ใช่เวอร์ชันที่จัดกลุ่มที่สร้างขึ้นSUMMARIZEในสูตร มีความคิดว่าทำไมจึงประเมินด้วยวิธีนี้?

COUNTROWS(
SUMMARIZE(
    Orders,
    Orders[Customer ID],
    "min_order_date_year",
    MIN(Orders[Order Date].[Year])))

คำตอบ

1 mkRabbani Aug 16 2020 at 14:14

สูตรใช้ได้ตามตรรกะที่คุณระบุไว้ คุณต้องชัดเจนเกี่ยวกับความต้องการของคุณและสิ่งที่คุณกำลังเขียนในโค้ดของคุณ สูตรของคุณกำลังส่งคืนสิ่งที่คุณกำลังสั่ง

หากฉันเข้าใจถูกต้องคุณเพียงแค่ต้องมีการนับลูกค้าสำหรับปีขั้นต่ำ หากคุณมีลูกค้าที่ไม่ซ้ำกัน 6 รายสำหรับปี 2019 และลูกค้าที่ไม่ซ้ำกัน 11 รายสำหรับปี 2020 คุณกำลังมองหามูลค่า 6 เพื่อตอบแทนตามการวัดของคุณ

ตอนนี้ตารางสรุปของคุณกลับมาเป็นอย่างไร? หากคุณสร้างตารางที่กำหนดเองแยกต่างหากสำหรับโค้ด Summarize ดังต่อไปนี้คุณจะเห็นว่าตารางจะเก็บชื่อ / รหัสลูกค้าทั้งหมดของคุณไว้ในคอลัมน์แรกและคอลัมน์ที่สองจะเจาะรู MIN ปีที่มีให้สำหรับลูกค้ารายนั้น

orders_summarize = 
SUMMARIZE(
    Orders,
    Orders[customer id],
    "min_order_date_year",MIN(Orders[Order Date].[Year])
)

โดยพื้นฐานแล้วคุณมีรายชื่อลูกค้าทั้งหมดในตารางสรุปของคุณ และตอนนี้คุณกำลังนับแถวของตารางสรุปของคุณซึ่งส่งคืนจำนวนลูกค้าที่ไม่ซ้ำกันทั้งหมด

สุดท้ายหากคุณต้องการให้มีการนับลูกค้าสำหรับปีใดปีหนึ่ง (เช่นปีขั้นต่ำ) ให้ทำตามขั้นตอนด้านล่าง

ขั้นตอนที่ 1:สร้างตารางสรุปที่กำหนดเองดังต่อไปนี้ -

store_summarized_table = 
SUMMARIZE(
    store,
    store[Customer ID],
    "mindate",MIN(store[Order Date])
)

ขั้นตอนที่ 2:สร้างการวัดเป็น -

count_cust_id = COUNT('store_summarized_table'[Customer ID])

ขั้นตอนที่ 3:กำหนดค่าภาพเมทริกซ์ของคุณตามที่แสดงในภาพด้านล่าง คุณยังสามารถรับผลลัพธ์ในภาพ -

เพื่อหลีกเลี่ยงตารางทางกายภาพคุณสามารถทำสิ่งนี้ได้ด้านล่าง -

ขั้นตอนที่ 1:สร้างคอลัมน์ที่กำหนดเองดังต่อไปนี้ -

is_min_year = 

// -- keep current row's customer id to a variable
VAR current_cust_id = store[Customer ID]
// -- keep current row's YEAR value to a variable
VAR current_year = store[Order Date].[Year]

// -- find the MIN YEAR from order date for the current row customer id
VAR min_year_current_custommer_id =  
CALCULATE(
    MIN(store[Order Date].[Year]),
    FILTER(
        store,
        store[Customer ID] = current_cust_id
    )
)

// -- check the current row's year is the MIN year of order date for the customer as well or not.
RETURN IF(current_year = min_year_current_custommer_id, 1,0)

หรือสร้างการวัดเป็น -

is_min_year_measure = 

VAR min_order_year_for_current_customer = 
CALCULATE(
    MIN(store[Order Date].[Year]),
    FILTER(
        ALL(store),
        store[Customer ID] = MIN(store[Customer ID])
    )
)

RETURN
IF ( MIN(store[Order Date].[Year]) = min_order_year_for_current_customer, 1,0)

ขั้นตอนที่ 2:สร้างการวัดดังต่อไปนี้ -

สำหรับคอลัมน์ที่กำหนดเองที่สร้างขึ้น

count_cust_for_min_year = 
CALCULATE(
    DISTINCTCOUNT(store[Customer ID]),
    FILTER(
        store,
        store[is_min_year] = 1
    )
)

สำหรับการวัดที่สร้างขึ้น

count_cust_for_min_year = 
CALCULATE(
    DISTINCTCOUNT(store[Customer ID]),
    FILTER(
        store,
        [is_min_year_measure] = 1
    )
)

ตอนนี้เพิ่ม "วันที่สั่งซื้อ" และวัด "count_cust_for_min_year" ในเมทริกซ์ของคุณ การใส่ออกจะเหมือนกับด้านล่าง -