DAX Gruplama Değerlendirmesi

Aug 16 2020

Bu ölçüde - Müşteri kimliğine göre gruplamak ve her müşteri için minimum sipariş_tarihi yılını döndürmek için geçici bir tablo oluşturuyorum. Daha sonra, belirli bir yıl için görünen müşterilerin sayısını saymak istiyorum (temelde sadece bir satır sayısı).

Anlamakta zorlandığım şey - bu formül SUMMARIZEiçindeki tabloya bakmıyor gibi görünüyor . Yılı ve bu ölçüyü bir matrise koyarsam SUMMARIZE, formülde oluşturulan gruplanmış sürüme göre değil ham tabloya göre sayılır . Neden bu şekilde değerlendirildiğine dair bir fikriniz var mı?

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

Yanıtlar

1 mkRabbani Aug 16 2020 at 14:14

Formül, sağladığınız mantığa göre tamamdır. Hem gereksinimlerinizi hem de kodunuzda ne yazdığınızı netleştirmelisiniz. Formülünüz tam olarak size talimat verdiğiniz şeyi döndürüyor.

Doğru anladıysam, sadece Minimum Yıl için Müşteri sayısına ihtiyacınız var. Örneğin, 2019 Yılı için 6 benzersiz müşteriniz ve 2020 Yılı için 11 benzersiz müşteriniz varsa, önleminize göre geri dönmek için burada değer 6'yı arıyorsunuz.

Şimdi, özet tablonuz gerçekte ne dönüyor? Özetle kodu için yalnızca aşağıdaki gibi ayrı bir özel tablo oluşturursanız, tablonun aslında tüm müşteri adınızı / kimliğinizi ilk sütunda tutacağını ve ikinci sütunun bu müşteri için kullanılabilir olan MIN yılını dolduracağını görebilirsiniz.

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

Yani özet tablonuzda temel olarak tüm müşterilerin listesi var. Ve şimdi özet tablonuzun satırlarını sayıyorsunuz, bu da aslında toplam benzersiz müşteri sayısını döndürüyor.

Son olarak, belirli bir Yıl için (MIN yılı gibi) müşteri sayımı istiyorsanız, aşağıdaki adımları izleyin:

Adım-1: Aşağıdaki gibi özel bir özet tablo oluşturun-

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

Adım-2: bir ölçü oluşturun

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

Adım-3: Şimdi Matrix görsellerinizi aşağıdaki resimde gösterildiği gibi yapılandırın. Ayrıca görüntüdeki çıktıyı da alabilirsiniz.

Fiziksel Tablodan kaçınmak için bunu aşağıda yapabilirsiniz.

Adım 1: Bir oluşturun Özel Sütun aşağıda- olarak

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)

VEYA bir ölçü oluşturun

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)

Adım-2: Aşağıdaki gibi bir Ölçü Oluşturun-

Oluşturulan Özel Sütun için

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

Oluşturulan Ölçü için

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

Şimdi "Sipariş Tarihi" ekleyin ve Matrisinize "count_cust_for_min_year" ölçün. Çıkış aşağıdaki gibi aynı olacaktır.