Évaluation du groupement DAX

Aug 16 2020

Dans cette mesure, je crée une table temporaire pour regrouper par ID client et renvoyer l'année de la date de commande minimale pour chaque client. Je veux ensuite compter le nombre de clients qui se présentent pour une année donnée (essentiellement juste un nombre de lignes).

Ce que j'ai du mal à comprendre, c'est que cette formule ne semble pas regarder le SUMMARIZEtableau qu'elle contient. Si je mets l'année et cette mesure dans une matrice, cela compte en fonction de la table brute, pas de la version groupée construite par SUMMARIZEdans la formule. Des idées pourquoi il évalue de cette façon?

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

Réponses

1 mkRabbani Aug 16 2020 at 14:14

La formule est OK selon la logique que vous lui avez fournie. Vous devez clarifier à la fois vos besoins et ce que vous écrivez dans votre code. Votre formule renvoie exactement ce que vous lui demandez.

Si je comprends bien, vous avez simplement besoin du nombre de clients pour l'année minimale. Par exemple, si vous avez 6 clients uniques pour l'année 2019 et 11 clients uniques pour l'année 2020, vous recherchez ici la valeur 6 à renvoyer à votre mesure.

Maintenant, qu'est-ce que votre tableau récapitulatif renvoie réellement ? si vous créez un tableau personnalisé séparé pour le code Summarize uniquement comme ci-dessous, vous pouvez voir que le tableau contiendra en fait tous vos nom/identifiant de client dans la première colonne et la deuxième colonne trouera l'année MIN disponible pour ce client.

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

Donc, fondamentalement, vous avez la liste de tous les clients dans votre tableau récapitulatif. Et maintenant, vous comptez les lignes de votre tableau récapitulatif qui renvoie en fait le nombre total de clients uniques.

Enfin, si vous souhaitez compter les clients pour une année spécifique (comme l'année MIN), suivez les étapes ci-dessous :

Étape 1 : Créez un tableau récapitulatif personnalisé comme ci-dessous.

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

Étape 2 : créez une mesure comme-

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

Étape 3 : Configurez maintenant vos visuels Matrix comme indiqué dans l'image ci-dessous. Vous pouvez également obtenir la sortie dans l'image-

Pour éviter le tableau physique, vous pouvez le faire ci-dessous-

Étape 1 : Créez une colonne personnalisée comme ci-dessous.

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)

OU créer une mesure comme-

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)

Étape 2 : Créer une mesure comme ci-dessous-

Pour la colonne personnalisée créée

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

Pour la mesure créée

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

Ajoutez maintenant "Order Date" et mesurez "count_cust_for_min_year" à votre matrice. La sortie sera la même que ci-dessous-