Loading

Suppression de données en double dans Tableau Prep

Date de publication: Jan 31, 2024
Tâche
Comment supprimer des données en double dans Tableau Prep. 

Des données en double peuvent se produire dans les données pour différentes raisons, et la meilleure manière de résoudre les doublons varie.Vous trouverez ci-dessous les scénarios couverts dans cet article :
  • Lorsque vous liez deux tables qui ont une relation 1-à-plusieurs ou plusieurs-à-plusieurs, les valeurs de mesures de la sortie sont dupliquées.
  • Lors de l'union de deux tables ou plus, certains enregistrements peuvent être répétés entre les tables, et donc dupliqués dans la sortie.
Étapes
Dans tous les cas, vous pouvez supprimer les doublons manuellement à l'aide de la méthode décrite dans Nettoyage (correction) des variations de la même valeur

CLIQUER POUR DÉVELOPPER LES ÉTAPES
Scénario 1 : Mesures en double suite à une jointure
Dans le classeur Tableau Prep « duplicates from join.tfl », la table « Inventaire de janvier » répertorie chaque produit une fois avec son inventaire total. La table « Commandes de janvier » peut comporter de nombreuses lignes pour un produit si plusieurs commandes ont été placées pour le même produit. Après la jointure de table « Ventes » et « Inventaire », la mesure [Inventaire] est dupliquée.La premier flux démontre le problème.

Option 1 : Utiliser une union au lieu d'une jointure

Remarque : aucune des valeurs d'[Inventaire] ne sera directement reliée à l'une des données des « Commandes de janvier ».Ceci peut générer des problèmes lors de la création de calculs sans agrégations, ou dans des vues qui affichent un haut niveau de granularité, puis le(s) champ(s) de la clause de jointure, ce qui serait [Produit] dans cet exemple

Option 2 : Créer un calcul pour répartir les mesures de valeurs de manière homogène

Nous pouvons utiliser une étape d'agrégation pour trouver le nombre de commandes par produit, puis diviser l'inventaire par nombre de commandes. Le résultat final sera qu'une partie égale de l'inventaire sera représentée pour chaque commande. Par exemple, nous avons 2 commandes de chapeaux.[Inventaire] sera de 100 pour chaque commande de chapeau.[Nouvel inventaire] sera de 50 pour chaque commande.

À noter : ceci peut générer des informations d'inventaire inappropriées dans une vue si seules certaines commandes pour un produit sont filtrées.
  1. Créez une jointure INTERNE « Inventaire de janvier » et « Commandes de janvier » sur [Produit] = [Produit]
  2. Ajoutez l'agrégation depuis la Jointure 2
  3. Dans l'étape Agrégation 1, procédez comme suit :
    1. Faites glisser [Produit] vers Champs groupés
    2. Faites glisser [ID de commande] sur Champs agrégés
    3. Modifiez l'agrégation pour l'ID de commande sur Total distinct
    4. Renommez l'ID de commande sur Commandes par produit par exemple
      • Au lieu de [Order ID], utilisez le champ issu de l'autre table qui a une valeur unique pour chaque ligne.
      • S'il n'y a pas d'identificateur unique, avant de créer l'étape d'agrégation, ajoutez une étape pour créer un champ calculé qui concatène les dimensions requises pour avoir une valeur unique pour chaque ligne.
      • Par exemple, STR([Order ID])+STR([Date])
  4. Faites glisser Jointure 2 sur Agrégation 1 et déposez Jointure 2 sur Nouvelle jointure
  5. Dans l'étape Jointure 3, créez une jointure GAUCHE sur [Produit] = [Produit]
  6. Ajoutez une étape à partir de la jointure 3
  7. Dans l'étape de nettoyage 1, cliquez sur le bouton Créer un champ calculé...
  8. 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é « Nouvel inventaire »
    2. Dans le champ de formule, créez un calcul du type suivant :
      [Inventory]/[Orders per Product]

Option 3 : Agrégez les données de manière à ce que les tables aient une relation 1:1

  1. Ajoutez une étape d'agrégation à partir de Commandes de janvier 4
  2. Dans l'étape Agrégation 2, procédez comme suit :
    1. Faites glisser [Produit] vers le volet Champs regroupés
    2. Faites glisser [Ventes], [Quantité], [ID de commande] et [Client] vers le volet Champs agrégés
    3. Cliquez sur CNT dans le champ [Customer] et sélectionnez Total distinct
    4. Cliquez sur SUM dans le champ [Order ID] et sélectionnez Total distinct
  3. Faites glisser Agrégation 2 sur Inventaire de janvier 4 pour créer une jointure INTERNE sur Produit = Produit
REMARQUE : le champ [Produit] a été glissé vers le volet Champs groupés parce que c'est le seul champ utilisé pour une jointure. La table finale ne comportera qu'une ligne par produit, ce qui signifie que des détails sur chaque commande seront perdus.



Option 4 : Utiliser une expression FIXED dans Tableau Desktop

Pour des instructions détaillées, consultez Supprimer des données en double avec des calculs LOD.

L'avantage d'utiliser une expression FIXED dans Tableau Desktop est que les expressions de niveau de détail (LOD) ont des règles d'agrégation spéciales. Un champ d'inventaire dé-dupliqué utilisant FIXED pourrait donc afficher l'inventaire complet non dupliqué pour un produit, qu'il y ait une seule commande de ce produit dans la vue, ou plusieurs.
 
CLIQUER POUR DÉVELOPPER LES ÉTAPES
Scénario 2 : Données en double après une union de sources de données contenant les mêmes valeurs
Dans le classeur Tableau Prep « duplicates from union.tfl », « Commandes de janvier (corrections) » est le premier rapport sur les commandes de janvier. La table « Commandes de janvier (corrections) » est un rapport généré ultérieurement avec quelques nouvelles commandes, mais également des corrections de commandes déjà présentes dans « Commandes de janvier ».Lorsque les deux tables sont réunies, toutes les lignes des deux tables sont conservées, ce qui crée des mesures en double.

Le premier flux dans le classeur « duplicates from union.tfl » démontre ce problème.

Option 1 : Conserver toutes les données provenant d'une table et les données non correspondantes de l'autre table

Pour cet exemple, nous voulons toutes les données de « Commandes de janvier (corrections) » et uniquement les commandes « Commandes de janvier » qui n'existent pas dans « Commandes de janvier (corrections) ».
  1. Créez une nouvelle jointure entre « Commandes de janvier » et « Commandes de janvier (corrections) »
  2. Dans l'étape Jointure 1, procédez comme suit :
    1. Pour les clauses de jointure appliquées, créez une clause de jointure sur [ID de commande] = [ID de commande]
    2. Dans Type de jointure, cliquez sur les sections du diagramme Venn de manière à ce que seul le segment le plus à gauche soit rempli.Tableau Prep appellera ceci une jointure « gauche sans correspondance uniquement ».
  3. Faite glisser « Commandes de janvier (corrections) » vers Jointure 1 et déposez la table sur Nouvelle union

Option 2 : Conserver les enregistrements affichant la date la plus récente

Par exemple, Mme Mouse a modifié sa commande pour ajouter un autre manteau, mais cette modification a été enregistrée par accident dans les « Commandes de janvier ». L'ordre correct est celui affichant la date la plus récente.
  1. Créez une jointure EXTERNE ENTIÈRE entre « Commandes de janvier » et « Commandes de janvier (corrections) » sur [ID de commande] = [ID de commande]
  2. Ajoutez une étape à partir de la jointure 2
  3. Fusionnez tous les champs correspondants, à l'exception des champs de date et des valeurs de mesure :
    1. Cliquez sur le champ dont les valeurs doivent remplacer l'autre dans le volet Profil
    2. Faites un Ctrl+clic sur le champ correspondant
    3. Faites un clic droit sur l'un des champs et sélectionnez Fusionner les champs
      • Lorsque les champs sont fusionnés, Tableau Prep ne conserve pas les deux valeurs (si ce sont deux valeurs différentes), mais conserve plutôt les valeurs du champ sélectionné, le cas échéant.
      • Par exemple, le nom Mme Horse a été enregistré par accident sous Mme House dans la table « Commandes de janvier » et son nom correct apparaissent dans « Commandes de janvier (corrections) ». Lors de la fusion de [Customer] et [Customer-1], je souhaite sélectionner [Customer-1] en premier.
      • Vous pouvez vérifier quel champ remplace l'autre à partir du nom du champ fusionné. Le nom peut être mis en forme en tant que [nom du premier champ & nom du second champ]. Le nom du champ répertorié en premier sera le champ qui remplacera l'autre.
      • Si les champs ont été fusionnés dans le mauvais ordre, vous pouvez annuler la fusion en faisant un clic droit sur l'icône de fusion au-dessus du nom du champ fusionné dans le volet Profil et en sélectionnant Supprimer.
    4. Cliquez sur le bouton Créer un champ calculé…
    5. 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é « Date la plus récente »
      2. Dans le champ de formule, créez un calcul du type suivant :
        IF [Date] > [Date-1]
        THEN [Date]
        ELSE IFNULL( [Date-1], [Date] )
        END
      3. Le calcul ci-dessus renverra [Date] s'il est « plus grand », ou dans le cas de dates plus récentes, que [Date-1]. Sinon, le calcul renverra [Date-1].
      4. Si l'un des champs est une valeur NULL, la première condition sera toujours « false ».La fonction IFNULL() remplace [Date-1] par [Date] quand [Date-1] est NULL. Cela signifie que le calcul renverra toujours une valeur non NULL s'il en existe une.
      5. Supprimez [Date] et [Date-1]
    6. Créez un champ calculé appelé par exemple « Nouveau coût » comportant un calcul du type suivant :
      IF [Date] > [Date-1]
      THEN [Cost]
      ELSE IFNULL( [Cost-1], [Cost] )
      END
      
    7. Supprimez [Coût] et [Coût-1]
    8. Répétez les étapes 6-7 pour chaque mesure

Option 3 : Chaque doublon devrait être traité différemment

  1. Créez une jointure EXTERNE ENTIÈRE entre « Commandes de janvier » et « Commandes de janvier (corrections) » sur [ID de commande] = [ID de commande]
  2. Ajoutez une étape à partir de la jointure 3
  3. Fusionnez tous les champs qui ont a) les mêmes valeurs dans les deux tables, ou b) que les valeurs d'une autre table doivent toujours remplacer
  4. Cliquez sur le bouton Créer un champ calculé…
  5. 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é « Nouveau coût »
    2. Dans le champ de formule, créez un calcul du type suivant :
      CASE [Order ID-1 & Order ID]
      WHEN 5 THEN [Date]
      WHEN 9 THEN [Date]
      ELSE IFNULL([Date-1],[Date])
      END
      
    • Le calcul ci-dessus sera lu pour toute valeur de [Order ID-1 & Order ID] et renverra le champ de date spécifiée. Pour simplifier les choses, j'ai uniquement spécifié quels ID renverront [Date] et indiqué que tout le reste renverra [Date-1] ou [Date] si [Date-1] est NULL, en raison de l'instruction ELSE.
    • La valeur [Order ID-1 & Order ID] est utilisée dans l'instruction CASE parce que ce champ aura une valeur unique pour chaque ligne de données.
    • Cela signifie également que les nouveaux ID ajoutés renverront [Date-1] si ce flux est à nouveau exécuté à l'avenir.
  6. Supprimez [Date] et [Date-1]
  7. Répétez les étapes 4-6 pour tous les champs où les doublons doivent être traités sur une base individuelle
Numéro d’article de la base de connaissances

001453799

Pièces jointes

duplicates from join.tflx

11 KB

duplicates from union.tflx

12 KB

 
Chargement
Salesforce Help | Article