BASE DE CONNAISSANCES

Calcul d'un total distinct cumulé ou mobile


Date de publication : 07 Nov 2015
Date de dernière modification : 20 Jul 2023

Question

Comment calculer un total distinct cumulé, ou mobile, d'une dimension.

Par exemple, le total cumulé de clients uniques qui ont passé une seule commande sur toute la durée, ou un total mobile de clients uniques qui ont passé une commande dans une fenêtre temporelle, par exemple les trois dernières semaines.

Environnement

Tableau Desktop

Réponse

L'exemple de classeur joint utilise l'ensemble de données de l'exemple Superstore pour démontrer les instructions suivantes.
CLIQUER POUR DÉVELOPPER LES ÉTAPES
Option 1 : Utiliser FIXED pour trouver le total distinct cumulé
Remarque : cette méthode ne fonctionne pas pour trouver un total distinct mobile.
  1. Sélectionnez Analyse > Créer un champ calculé.
  2. Dans la boîte de dialogue Champ calculé qui s'ouvre, procédez comme suit, puis cliquez sur OK :
    1. Nommez le champ calculé. Dans cet exemple, le champ calculé est appelé « Première commande du client »
    2. Dans le champ de formule, créez un calcul du type suivant :
      { FIXED [Customer Name], [Order Date] : MIN(
      IF [Order Date] = { EXCLUDE [Order Date] : MIN([Order Date])}
      THEN 1
      ELSE 0
      END
      ) }
      
  3. Créez un champ calculé appelé par exemple « COUNTD cumulé précis de clients » comportant un calcul du type suivant :
    RUNNING_SUM(SUM([Count Customer's 1st Order]))
  4. Faites un clic droit et faites glisser [Date de commande] dans la vue
  5. Dans la boîte de dialogue Déposer un champ, sélectionnez WEEK(Date de commande) affichant l'icône verte de calendrier
  6. Faites glisser [COUNTD cumulé précis de clients] vers l'étagère Lignes
CLIQUER POUR DÉVELOPPER LES ÉTAPES
Option 2 : Utiliser les fonctions de table pour trouver le total distinct mobile
Remarque : cette solution risque de provoquer des problèmes de performances étant donné que la vue finale doit contenir toutes les dimensions nécessaires pour exécuter le calcul de table.
Étape 1 - Créer 3 champs calculés
  1. Sélectionnez Analyse > Créer un champ calculé.
    1. Dans la boîte de dialogue Champ calculé qui s'ouvre, procédez comme suit, puis cliquez sur OK :
    2. Nommez le champ calculé. Dans cet exemple, le champ calculé est appelé « Chaque période de 3 semaines dans laquelle un client se trouve »
    3. Dans le champ de formule, créez un calcul du type suivant :
      	WINDOW_MAX( MAX(1), -2, 0 )
    • Les calculs Tableau dépendent fortement de la vue. Donc, sans le contexte de la vue, le calcul retournera d'abord la valeur 1 pour chaque repère (à savoir ligne, point, barre, etc...) dans la vue, puis retournera le maximum de ces 1 depuis deux repères pour les ramener à ce repère.
    • Dans cet exemple, la vue finale comporte un repère pour chaque semaine pour chaque client. Donc dans ce contexte, ce calcul retourne un 1 si le client a passé une commande cette semaine ou les deux semaines auparavant. Si un client a une commande chaque semaine, ce calcul continue de renvoyer un 1 parce que nous utilisons WINDOW_MAX() au lieu de WINDOW_SUM().
    • Ce calcul seul renvoie uniquement un 1 ou un 0 pour chaque client.Nous avons donc besoin d'imbriquer ce calcul dans une formule WINDOW_SUM() de manière à additionner tous les 1ers pour tous les clients. Ces calculs doivent se trouver dans des champs calculés séparés afin que nous puissions définir des calculs différents pour les fonctions de table.
  2. Créez un champ calculé appelé par exemple « Total mobile de clients pour chaque période de 3 semaines » comportant un calcul du type suivant :
    WINDOW_SUM([Every 3 Week Period a Customer is In])
  3. Créez un champ calculé appelé par exemple « Premier filtre » comportant un calcul du type suivant :
    FIRST() = 0
Étape 2 - Créer la vue
  1. Faites un clic droit et faites glisser [Date de commande] vers l'étagère Colonnes.
  2. Dans la boîte de dialogue Déposer un champ, sélectionnez WEEK(Date de commande) affichant l'icône verte de calendrier
    1. Faites un clic droit sur WEEK(Date de commande) dans l'étagère Colonnes et sélectionnez Discret
    2. Le champ de date doit être discret, sans quoi le graphique en courbes sera interrompu par [Nom du client]
  3. Faites glisser [Nom du client] vers Détails sur la fiche Repères.
    • Le champ [Nom du client] doit être dans la vue pour que les calculs de table s'exécutent correctement. Nous filtrerons ultérieurement la vue de manière à ce qu'elle ne paraisse contenir qu'une seule ligne
  4. Faites glisser [Total mobile de clients pour chaque période de 3 semaines] vers l'étagère Lignes
Étape 3 - Modifier les calculs de table
  1. Faites un clic droit sur [Total mobile de clients pour chaque période de 3 semaines] dans l'étagère Lignes et sélectionnez Modifier le calcul de table…
  2. Dans la boîte de dialogue Calcul de table, effectuez la procédure suivante et fermez la boîte de dialogue :
    1. Dans Calculs imbriqués, sélectionnez Chaque période de 3 semaines dans laquelle un client se trouve
    2. Dans Calculer au moyen de, sélectionnez Dimensions spécifiques
    3. Dans la liste de dimensions, cochez uniquement Semaine de la date de commande
    4. Dans Calculs imbriqués, sélectionnez Total mobile de clients pour chaque période de 3 semaines
    5. Dans Calculer au moyen de, sélectionnez Dimensions spécifiques
    6. Dans la liste de dimensions, cochez uniquement Nom du client
      • Pour [Chaque période de 3 semaines dans laquelle un client se trouve], nous souhaitons que Tableau Desktop totalise chaque période de 3 semaines dans laquelle un client se trouve, pour chaque client. En d'autres termes, nous souhaitons que Tableau Desktop comptabilise les semaines pour chaque client. Lorsqu'une dimension est cochée, cela signifie que le calcul de table s'exécutera pour chaque valeur de la dimension. Lorsqu'une dimension est désélectionnée, cela signifie que Tableau Desktop démarrera toujours le calcul pour chaque valeur de cette dimension.
      • De même, nous souhaitons que [Total mobile de clients pour chaque période de 3 semaines] comptabilise tous les clients dans chaque semaine.
  3. Faites glisser [Premier filtre] vers l'étagère Filtres, et cliquez sur OK pour fermer la boîte de dialogue Filtre
  4. Faites un clic droit sur [Premier filtre] sur l'étagère Filtres et sélectionnez Calculer au moyen de > Nom du client.
  5. Dans la boîte de dialogue Filtrer, cochez True puis cliquez sur OK.

Informations supplémentaires

Remarque sur l'Option 1 :
  • Ce calcul comptabilise chaque client une seule fois, lors de sa première apparition dans l'ensemble de données.Cela signifie que cette méthode ne fonctionnera pas pour trouver un total distinct mobile, parce que l'expression FIXED ne peut pas trouver la première date de commande pour une période temporelle mobile.
  • Le calcul à l'étape 2 effectue l'opération suivante :
    • En premier, l'expression { EXCLUDE [Date de commande]: MIN([Date de commande])} trouve la première date de commande par client. Normalement, nous utiliserions l'expression { FIXED [Nom du client]: MIN([Date de commande])} pour trouver la première commande.Toutefois, l'étendue de l'instruction EXCLUDE est définie par l'instruction FIXED externe. En d'autres termes, l'instruction EXCLUDE commence par les dimensions [Nom du client] et [Date de commande] puis exclut [Date de commande].
    • Ensuite, l'instruction IF retourne 1 pour la date correspondant à la première date de commande pour ce client.
    • L'instruction IF retourne 1 pour chaque ligne où la date correspond à la date de la première commande. Cela signifie que, si les données sous-jacentes comportent plusieurs enregistrements pour cette première commande, chacune de ces lignes sera 1. Comme nous ne souhaitons comptabiliser chaque client qu'une seule fois, le minimum de la déclaration IF est fixé sur [Nom du client].
    • Nous avons également besoin d'ajouter [Date de commande] à la déclaration de dimension de l'instruction FIXED de manière à ce que la vue finale affiche le changement dans la durée.
Remarque sur l'Option 2 :
  • Les calculs Tableau dépendent fortement de la vue. Donc, sans le contexte de la vue, le calcul à l'étape 2 retournera la valeur 1 pour chaque repère (à savoir ligne, point, barre, etc...) dans la vue, puis retournera le maximum de ces 1 depuis deux repères pour les ramener à ce repère.
  • Dans cet exemple, la vue finale comporte un repère pour chaque semaine pour chaque client. Donc dans ce contexte, ce calcul retourne un 1 si le client a passé une commande cette semaine ou les deux semaines auparavant. Si un client a une commande chaque semaine, ce calcul continue de renvoyer un 1 parce que nous utilisons WINDOW_MAX() au lieu de WINDOW_SUM().
  • Ce calcul seul renvoie uniquement un 1 ou un 0 pour chaque client. Nous avons donc besoin d'imbriquer ce calcul dans une formule WINDOW_SUM() de manière à additionner tous les 1ers pour tous les clients.
  • Ces calculs doivent se trouver dans des champs calculés séparés afin que nous puissions définir des calculs différents pour les fonctions de table.
Cet article vous a-t-il permis de résoudre le problème ?