Ocena grupowania języka DAX

Aug 16 2020

W tym przypadku - tworzę tabelę tymczasową, aby pogrupować według identyfikatora klienta i zwrócić rok minimalnej daty_zamówienia dla każdego klienta. Następnie chcę policzyć liczbę klientów, którzy pojawili się w danym roku (w zasadzie tylko liczba wierszy).

Usiłuję zrozumieć, że ta formuła wydaje się nie patrzeć na znajdującą się SUMMARIZEw niej tabelę. Jeśli wstawię rok i tę miarę do macierzy, liczy się ona na podstawie surowej tabeli, a nie zgrupowanej wersji zbudowanej przez SUMMARIZEformułę. Jakieś pomysły, dlaczego dokonuje oceny w ten sposób?

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

Odpowiedzi

1 mkRabbani Aug 16 2020 at 14:14

Formuła jest OK, zgodnie z logiką, którą do niej podałeś. Musisz wyjaśnić zarówno swoje wymagania, jak i to, co piszesz w swoim kodzie. Twoja formuła zwraca dokładnie to, co jej polecasz.

Jeśli dobrze rozumiem, potrzebujesz po prostu liczby klientów dla roku minimalnego. Na przykład, jeśli masz 6 unikalnych klientów w roku 2019 i 11 unikalnych klientów w roku 2020, szukasz tutaj wartości 6 do zwrotu według Twojej miary.

Co właściwie zwraca Twoja tabela podsumowań? jeśli utworzysz oddzielną niestandardową tabelę tylko dla kodu podsumowania, jak poniżej, zobaczysz, że tabela faktycznie będzie zawierała całą nazwę / identyfikator klienta w pierwszej kolumnie, a druga kolumna otworzy MIN dostępny rok dla tego klienta.

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

Więc w zasadzie masz listę wszystkich klientów w swojej tabeli podsumowania. A teraz zliczasz wiersze tabeli podsumowania, która w rzeczywistości zwraca całkowitą liczbę unikalnych klientów.

Wreszcie, jeśli chcesz, aby liczba klientów w konkretnym roku (np. Rok MIN), wykonaj następujące kroki:

Krok 1: Utwórz niestandardową podsumowaną tabelę, jak poniżej-

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

Krok 2: utwórz miarę jako

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

Krok 3: Teraz skonfiguruj wizualizacje Matrix, jak pokazano na poniższym obrazku. Możesz również uzyskać wynik w obrazie-

Aby uniknąć tabeli fizycznej, możesz to zrobić poniżej:

Krok 1: Utwórz kolumnę niestandardową, jak poniżej-

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)

LUB utwórz miarę jako

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)

Step-2: Utwórz miarę jak poniżej-

Dla utworzonej kolumny niestandardowej

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

Dla utworzonej miary

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

Teraz dodaj „Data zamówienia” i zmierz „count_cust_for_min_year” do swojej macierzy. Wyjście będzie takie samo jak poniżej-