Analyse avec la seconde date dans Tableau Desktop

Ceci est la seconde étape du tutoriel et présuppose que vous avez terminé la première étape, Trouver la seconde date avec Tableau Prep.

Lors de la première étape, nous avons examiné notre ensemble de données d’origine et l’avons structuré de manière à pouvoir répondre aux questions suivantes :

  1. Quelle était la durée, en jours, entre la première et la seconde infraction pour chaque conducteur?

  2. Comparez les montants des amendes pour la première et la seconde infraction. Sont-ils corrélés?

  3. Quel conducteur a eu la plus grosse amende? Lequel a eu l’amende la plus faible?

  4. Combien de conducteurs ont commis plusieurs types d’infractions?

  5. Quel était le montant moyen de l’amende pour les conducteurs n’ayant jamais effectué de stage de conduite obligatoire?

À mesure que nous explorions ces questions, il est apparu clairement que la première structure des données que nous avions créée présentait quelques avantages et quelques inconvénients. Nous retournerons dans Tableau Prep Builder et effectuerons quelques mises en forme supplémentaires, puis nous verrons l’incidence qu’a cette action sur la même analyse dans Desktop. Enfin, nous adopterons une approche strictement Tableau Desktop de l’analyse en utilisant les expression de niveau de détail (LOD) avec les données d’origine.

L’objectif de ce tutoriel est de présenter divers concepts dans le contexte d’un scénario de la vie réelle et d’explorer les options, en déterminant de manière non prescriptive quelle est la plus adaptée. Au terme de ce didacticiel, vous devriez mieux appréhender l’incidence de la structure des données sur les calculs et l’analyse, et être familiarisé avec divers aspects de Tableau Prep et les calculs dans Tableau Desktop.

Remarque : pour effectuer les tâches décrites dans ce tutoriel, vous aurez besoin d’installer Tableau Prep Builder et, de manière facultative, Tableau Desktop, et de télécharger les données.

Pour installer Tableau Prep et Tableau Desktop avant de poursuivre ce tutoriel, consultez le Guide de déploiement de Tableau Desktop et Tableau Prep(Le lien s’ouvre dans une nouvelle fenêtre). Sinon, vous pouvez télécharger les versions d’évaluation gratuites de Tableau Prep(Le lien s’ouvre dans une nouvelle fenêtre) et Tableau Desktop(Le lien s’ouvre dans une nouvelle fenêtre).

L’ensemble de données est la sortie de Driver Infractions.tflx, telle que nous l’avons créée dans la première étape.

Analyse dans Tableau Desktop

Maintenant que nous avons configuré nos données, nous allons les introduire dans Tableau Desktop. Nous pouvons facilement répondre à quelques questions, mais d’autres impliquent quelques calculs (ou beaucoup de calculs). Exercez-vous avec les questions ci-dessous. Vous pouvez développer l’information de base pour chacune d’elles et apprendre comment procéder si vous êtes bloqué.

Remarque : vous pouvez télécharger le classeur Driver Infractions.twbx(Le lien s’ouvre dans une nouvelle fenêtre) pour examiner les solutions en contexte. Gardez à l’esprit qu’il peut y avoir des moyens alternatifs d’interpréter l’analyse ou d’obtenir des réponses.

1. Quelle était la durée, en jours, entre la première et la seconde infraction pour chaque conducteur?
  1. Pour répondre à cette question dans Tableau Desktop, nous utilisons la fonction DATEDIFF. Cette fonction prend trois arguments—la partie de date, la date de début et la date de fin. Étant donné que nous souhaitons connaître le nombre de jours entre ces événements, nous allons utiliser la partie de date ’day’. Nos dates de début et de fin figurent dans l’ensemble de données en tant que 1st Infraction Date (Date de la 1ère infraction) et 2nd Infraction Date (Date de la 2e infraction).

  2. Le calcul est le suivant :

    Durée entre les infractions = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

  3. Nous pouvons tracer ces données par rapport à Driver ID dans un graphique à barres. Notez que sept conducteurs n’ont pas commis de seconde infraction, donc il y a sept valeurs nulles.

    Diagramme à barres des conducteurs par temps entre les infractions

2. Comparez les montants des amendes pour la première et la seconde infraction. Sont-ils corrélés?
  1. Pour répondre à cette question dans Tableau Desktop, nous allons créer un nuage de points de 1st Fine Amount (Montant de la 1ère amende) et 2nd Fine Amount (Montant de la 2e amende). En déposant Driver ID sur l’étagère Détails dans la fiche Repères, nous pouvons créer un repère pour chaque conducteur.

  2. Pour ajouter une courbe de tendance, utilisez l’onglet Analyses dans le volet de gauche et générez une courbe de tendance linéaire. En survolant la courbe de tendance, nous pouvons voir que la valeur R carrée est pratiquement de zéro, et que la valeur p est largement supérieure à un seuil de signification. Nous pouvons déterminer qu’il n’y a pas de corrélation entre le montant de la première et de la seconde amende.

    Si nous utilisions ce nuage de points dans un tableau de bord, il faudrait supprimer la ligne de tendance.

Diagramme de dispersion des premier et deuxième montants d’amende par ID de conducteur, avec l’info-bulle de la ligne de tendance indiquant

3. Quel conducteur a eu la plus grosse amende? Lequel a eu l’amende la plus faible?

Pour approfondir notre analyse, nous devrons sans doute créer quelques calculs.

  1. Pour répondre à ces questions dans Tableau Desktop, nous devons ajouter les amendes des deux infractions à un seul champ. Étant donné que certains conducteurs n’ont pas nécessairement commis de seconde infraction, nous devons utiliser la fonction zéro null ZN pour transformer toute valeur nulle dans 2nd Fine Amount en zéros. Ne pas le faire entraînera des valeurs nulles s’il n’y a pas de deuxième amende.

  2. Le calcul est le suivant :

    Montant total payé = [1st Fine Amount] + ZN([2nd Fine Amount])

  3. Nous pouvons tracer le Montant total payé par rapport à Driver ID et trier le graphique à barres.

Diagramme à barres du montant payé par ID de conducteur, avec l’éditeur de calcul indiquant le montant payé

4. Combien de conducteurs ont commis plusieurs types d’infractions?
  1. Pour répondre à cette question dans Tableau Desktop, nous devons créer un calcul plus complexe IF , qui compare si les types de la première et de la seconde infraction sont identiques. S’ils sont identiques, nous attribuons la valeur « 1 ». S’ils sont différents, nous attribuons la valeur « 2 ». Étant donné que nous ne nous soucions que des types d’infractions multiples, tout autre résultat, par exemple un deuxième type d’infraction null, se verra attribuer la valeur « 1 ».

  2. Le calcul est le suivant :

    Nombre de types d’infractions =

    IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 
    ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 
    ELSE 1 END
  3. Nous pouvons tracer le Nombre de types d’infractions par rapport à Driver ID et trier le graphique à barres.

Diagramme à barres du nombre de types d’infractions par ID de conducteur, avec l’éditeur de calcul affiché pour le nombre de types d’infractions

5. Quel était le montant moyen de l’amende pour les conducteurs n’ayant jamais effectué de stage de conduite obligatoire?
  1. Pour répondre à cette question dans Tableau Desktop, nous ne pouvons pas simplement diviser le montant total des amendes par deux, puisque certains conducteurs n’ont commis qu’une seule infraction. Nous ne pouvons pas non plus calculer l’amende moyenne par conducteur et prendre la valeur de ces moyennes, parce que les moyennes de moyennes peuvent générer des incohérences. Au lieu de cela, nous devons calculer le montant total payé par les conducteurs qui n’ont jamais suivi de stage obligatoire, puis diviser par le nombre total d’infractions associées à ces amendes.

    1. Tout d’abord, nous devons déterminer si chaque conducteur a commis une seconde infraction. Nous pouvons utiliser le fait que les informations dans tous les champs « 2nd » seront null s’il n’y a pas eu de seconde infraction et commencer le calcul :

      IFNULL([2nd Infraction Type], 'no')

      Ceci renvoie un type d’infraction, le cas échéant, ou « no » s’il n’y a pas eu de seconde infraction.

    2. Ensuite, nous devons transformer ces informations en nombre d’infractions, 1 ou 2. Si le résultat de notre calcul IFNULL est « no », alors le conducteur doit être marqué comme ayant une seule amende. Tout autre résultat doit entraîner le marquage comme ayant deux amendes. Le calcul est le suivant :

      Nombre d’infractions =

      IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 
      ELSE 2 
      END
    3. Nous devons maintenant considérer le montant total de l’amende. Comme pour la question 3 ci-dessus, nous ajouterons les montants de la première et de la seconde amende, avec une fonction ZN pour la seconde. Toutefois, comme nous souhaitons effectuer le calcul à l’échelle de tout l’ensemble de données, il est recommandé de spécifier les agrégations, SUM, dans le calcul lui-même. Le calcul est le suivant : 

      SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) )

    4. Pour réunir tous ces éléments, nous prenons le montant total des amendes et nous le divisons par notre nouveau champ calculé Nombre d’infractions pour déterminer le montant moyen de l’amende :

      Montant moyen de l’amende = ( SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) ) ) / SUM([Number of Infractions])

  2. Nous devons également filtrer les conducteurs qui n’ont jamais suivi de stage obligatoire—mais cette information est également stockée sur deux champs différents.

    1. Tableau est très efficace en matière de calculs numériques. Nous formulerons ceci avec des nombres pour obtenir les meilleures performances possibles. Pour combiner ces deux champs, nous créerons un calcul pour chaque champ indiquant « Yes = 1 » et « No = 0 » (la valeur nulle devrait également = 0 pour les conducteurs n’ayant pas commis de seconde infraction). En totalisant le résultat de ces calculs, tout conducteur ayant une valeur totale de 0 n’a jamais suivi de stage obligatoire (et une valeur de 1 ou 2 indique combien de fois il a suivi ce stage). Nous pouvons ensuite appliquer un filtre de manière à conserver uniquement les conducteurs associés à une valeur de 0.

    2. Cette fois-ci, nous utiliserons une déclaration CASE au lieu de IF. Le fonctionnement est très similaire, mais la syntaxe est différente. Le début du calcul devrait se présenter ainsi :

      CASE [1st Traffic School]
      WHEN 'Yes' THEN 1
      WHEN 'No' THEN 
      ELSE 0
      END
    3. Nous procédons ensuite de même pour le 2nd stage obligatoire. Nous pouvons ajouter les deux éléments dans le même calcul en mettant chaque déclaration de cas entre parenthèses et en ajoutant un signe plus entre eux. En supprimant quelques sauts de ligne, le calcul se présente comme suit :

      Nombre de participations à des stages obligatoires =

      (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
      +
      (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
      
    4. Si nous faisons glisser Nombre de participations à des stages obligatoires vers la zone Dimensions du volet Données (au-dessus de la ligne), les valeurs 0-2 deviennent discrètes.

    5. Maintenant si nous appliquons un filtre à Nombre de participations à des stages obligatoires, nous pouvons sélectionner simplement le 0 et savoir que nous obtenons ainsi les conducteurs qui n’ont jamais suivi de stages obligatoires.

  3. Pour répondre à la question d’origine, nous pouvons simplement déposer Montant moyen de l’amende sur l’étagère Texte dans la fiche Repères.

    Étant donné que nous avons intégré les agrégations dans le calcul, l’agrégation dans la pile sera AGG et nous ne pouvons pas la modifier, ce qui est attendu.

Vue numérique unique du montant moyen payé avec l’éditeur de calcul ouvert pour afficher le nombre de fréquentations scolaires de la circulation

Aller plus loin—Données permutées

Si les données avec lesquelles nous avons travaillé sont bien structurées pour répondre à des questions centrées spécifiquement sur les premières et secondes infractions, ce n’est pas la structure standard recommandée à utiliser avec Tableau Desktop. Plus notre analyse s’écarte des questions de base sur les dates des infractions, plus nos calculs se complexifient pour combiner les informations pertinentes sous une forme utilisable.

En règle générale, lorsque les données sont stockées avec plusieurs colonnes pour le même type de données (par exemple deux colonnes pour la date, deux colonnes pour le montant de l’amende, etc.) et que des renseignements uniques sont stockés dans le nom du champ (par exemple s’il s’agit de la première ou de la seconde infraction), ceci indique que les données devraient être permutées.

Une permutation multiple dans Tableau Prep Builder peut gérer cette tâche avec efficacité. Nous pouvons travailler à partir de la fin du flux Driver Infraction que Tableau Prep a créé dans le tutoriel précédent Trouver la seconde date avec Tableau Prep.

Conseil : veillez à revenir dans Tableau Prep pour les étapes suivantes.

  1. Depuis l’étape de nettoyage finale, ajoutez une étape Permutation pour permuter chaque champ dupliqué. Utilisez l’icône plus en haut à droite de la zone Champs permutés pour ajouter d’autres Valeurs de permutation. Chaque ensemble de champ (par exemple les montants de 1ère et 2nd amende) devrait être permuté ensemble.

    Pour plus d’informations sur les permutations, consultez Nettoyer et organiser les données.

  2. Dans la zone Champs pivotés, sous la colonne Noms Permutation1, cliquez deux fois sur chaque valeur et renommez-les en 1ère et 2e.

    Volet de configuration Permutation 1 dans Tableau Prep affichant les cinq permutations

Les résultats peuvent être mis en ordre en supprimant les dates null et en renommant et réorganisant les champs.

  1. Ajoutez une étape de nettoyage après la permutation. Dans la colonne Infraction Date, faites un clic droit sur la barre null et choisissez Exclure.

  2. Double-cliquez sur le nom du champ Pivot1 Names et renommez-le Infraction Number.

  3. Faites glisser les champs comme approprié pour les réorganiser comme ci-dessous :

    Aperçu des données permutées et nettoyées

  1. À partir des nouvelles données permutées, créez une sortie appelée Pivoted Driver Infractions (Infractions des conducteurs Données permutées) et insérez-la dans Tableau Desktop. (N’oubliez pas d’exécuter le flux après avoir ajouté l’étape Sortie.)

Nous pouvons maintenant examiner nos cinq questions à nouveau en nous basant sur cette structure de données permutées. Vous pouvez développer chaque information de base pour savoir comment procéder si vous êtes bloqué.

Remarque : vous pouvez télécharger le fichier de flux terminé Pivoted Driver Infractions.tflx pour vérifier votre travail, ou télécharger le classeur Pivoted Driver Infractions.twbx pour examiner les solutions en contexte. Gardez à l’esprit qu’il peut y avoir des moyens alternatifs d’interpréter l’analyse ou d’obtenir des réponses.

1. Quelle était la durée, en jours, entre la première et la seconde infraction pour chaque conducteur?
  1. Pour répondre à cette question dans Tableau Desktop, comme nous l’avons fait avec le premier ensemble de données, nous allons utiliser la fonction DATEDIFF . Cette fonction exige une date de début et une date de fin. Cette information est présente dans nos données, mais toutes dans un seul champ. Nous devons l’extraire dans deux champs séparés.

    1. Créez deux champs calculés préliminaires :

      Date de la 1ère infraction = IF [Infraction Number] = "1st" THEN [Infraction Date] END

      Date de la 2nde infraction = IF [Infraction Number] = "2nd" THEN [Infraction Date] END

    2. Nous voulons nous assurer que ces deux valeurs sont disponibles pour être comparées pour chaque conducteur, donc nous devons les corriger au niveau de Driver ID.

      Remarque : vous avez des doutes? Essayez d’effectuer un calcul DATEDIFF avec ces deux champs en l’état : Durée entre les infractions = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])
      Vous obtiendrez des résultats null partout parce que Tableau tente d’effectuer des comparaisons dans une structure de données qui se présente comme ceci :
      tableau de texte affichant des résultats nuls
      Ici, la ligne qui sait quelle est la première date ne sait pas quelle est la seconde date, et vice versa. Pour contourner ce problème, nous utiliserons une expression LOD FIXED pour que ces premières et secondes dates soient obligatoirement associées par Driver ID.

    3. Modifiez chaque calcul comme suit :

      Date de la 1ère infraction = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Infraction Date] END ) }

      Date de la 2nde infraction = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Infraction Date] END ) }

      Remarque : le calcul d’origine IF doit être agrégé lorsqu’il est intégré dans une expression LOD. Nous pouvons utiliser une agrégation de base qui préservera la valeur de date (des agrégations telles que SUM, AVG ou MIN fonctionneront, mais pas CNT ou CNTD).

      Remarque : ces calculs peuvent également être créés dans Tableau Prep Builder. Pour plus d’informations sur les expressions LOD, consultez Créer des calculs de niveau de détail, de classement et de section.

    4. Nous pouvons maintenant créer le calcul DATEDIFF comme suit :

      Durée entre les infractions = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

      • Pour examiner des semaines ou des mois, modifiez simplement la partie de date (actuellement 'day').

      • Il serait également possible de créer un calcul unique pour l’ensemble du processus en plaçant les calculs FIXED à l’intérieur de DATEDIFF directement : 

        DATEDIFF ( 'day',

        { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Infraction Date] END ) },

        { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Infraction Date] END ) }

        )

    5. Tracez Durée entre les infractions sur les colonnes et Driver ID sur les lignes.

Les résultats seront identiques à la sortie obtenue avec la structure de données non permutées.

2. Comparez les montants des amendes pour la première et la seconde infraction. Sont-ils corrélés?
  1. Pour répondre à cette question dans Tableau Desktop, nous utiliserons une logique très similaire à la question précédente. Nous utiliserons Infraction Number pour identifier si une ligne donnée est la première ou la seconde infraction, puis nous extrairons le montant de l’amende en conséquence.

    1. Si nous souhaitons simplement créer un nuage de points, nous pouvons ignorer la partie LOD et utiliser simplement le calcul IF  :

      Montant de la 1ère amende = IF [Infraction Number] = "1st" THEN [Fine Amount] END

      Montant de la 2nde amende = IF [Infraction Number] = "2nd" THEN [Fine Amount] END

    2. Toutefois, si nous souhaitions comparer et voir la différence de montant entre la première et la seconde amende pour un conducteur spécifique, nous nous heurterions au même problème de valeur nulle qu’avec les dates. Cela ne peut pas faire de mal d’entourer ces calculs dans une expression LOD FIXED , donc c’est sans doute une bonne idée de procéder ainsi dès le début :

      Montant de la 1ère amende = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Fine Amount] END ) }

      Montant de la 2nde amende = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Fine Amount] END ) }

      Ces calculs peuvent également être créés dans Tableau Prep Builder. Pour plus d’informations sur les expressions LOD, consultez Créer des calculs de niveau de détail, de classement et de section.

    3. Créez un nuage de points avec Montant de la 1ère amende sur les colonnes et Montant de la 2nde amende sur les lignes, et faites ressortir une courbe de tendance linéaire comme précédemment.

Les résultats seront identiques à la sortie obtenue avec la structure de données non permutées.

3. Quel conducteur a eu la plus grosse amende? Lequel a eu l’amende la plus faible?
  1. Pour répondre à cette question dans Tableau Desktop, la structure de données permutées est idéale. Il nous suffit de faire ressortir Driver ID et Fine Amount dans un graphique à barres. L’agrégation par défaut est déjà SUM, donc le montant total payé par le conducteur sera automatiquement tracé.

Les résultats seront identiques à la sortie obtenue avec la structure de données non permutées.

4. Combien de conducteurs ont commis plusieurs types d’infractions?
  1. Pour répondre à cette question dans Tableau Desktop, la structure de données permutées est idéale. Il nous suffit de faire ressortir Driver ID et un Total distinct de Infraction Type sous forme de graphique à barres et nous aurons notre réponse.

Les résultats seront identiques à la sortie obtenue avec la structure de données non permutées.

5. Quel était le montant moyen de l’amende pour les conducteurs n’ayant jamais effectué de stage de conduite obligatoire?
  1. Pour répondre à cette question dans Tableau Desktop, nous ne pouvons pas simplement diviser le montant total des amendes par deux, puisque certains conducteurs n’ont commis qu’une seule infraction. Nous ne pouvons pas non plus calculer l’amende moyenne par conducteur et prendre la valeur de ces moyennes, parce que les moyennes de moyennes peuvent générer des incohérences. Au lieu de cela, nous devons calculer le montant total payé par les conducteurs qui n’ont jamais suivi de stage obligatoire, puis diviser par le nombre total d’infractions associées à ces amendes.

    1. Tout d’abord, nous devons déterminer si chaque conducteur a commis une seconde infraction. Nous pouvons utiliser le fait que les valeurs dans 2nd Infraction Date seront null s’il n’y a pas eu de seconde infraction et commencer le calcul :

      IFNULL(STR([2nd Infraction Date]), 'no')

      Ceci renvoie la date de la seconde infraction, le cas échéant, ou « no » s’il n’y a pas eu de seconde infraction.

      Remarque : la partie STR de ce calcul est nécessaire parce que IFNULL a besoin de types de données cohérents dans ses arguments. Étant donné que nous souhaitons renvoyer la chaîne « no » pour les valeurs nulles, nous avons également besoin de convertir la date en une chaîne.

    2. Ensuite, nous devons transformer ces informations en nombre d’infractions, 1 ou 2. Si le résultat de notre calcul IFNULL est « no », alors le conducteur doit être marqué comme ayant une seule amende. Tout autre résultat doit entraîner le marquage comme ayant deux amendes. Le calcul est le suivant :

      Nombre d’infractions =

      IF IFNULL(STR([2nd Infraction Date]), 'no')= 'no' THEN 1 
      ELSE 2 
      END
      
    3. Nous devons maintenant considérer le montant moyen de l’amende. Nous avons déjà un champ unique pour Fine Amount (Montant de l’amende). Il nous suffit de le diviser par notre nouveau champ Number of Infractions (Nombre d’infractions), en entourant les deux dans SUM : 

      Montant moyen de l’amende = (SUM([Fine Amount]) / SUM([Number of Infractions])

  2. Nous devons également filtrer les conducteurs qui ont suivi un stage obligatoire. Il semble que nous pourrions utiliser le champ Traffic School et filtrer sur Traffic School = no. Cependant, cela filtrerait les infractions non associées à l’école de circulation, et non les conducteurs qui ne sont jamais allés à l’école de circulation. Si un conducteur a suivi un stage obligatoire pour une infraction, mais pas l’autre, nous ne voulons pas que l’une ou l’autre infraction soit prise en compte ici. Ce conducteur a suivi un stage obligatoire et ne correspond donc pas aux paramètres de la question.

    Nous souhaitons simplement filtrer les conducteurs qui ont suivi un stage obligatoire. En termes de données, nous souhaitons filtrer les conducteurs qui affichent une valeur « Yes » pour Traffic School (Stage obligatoire) sur une ligne, quelle que soit l’infraction à laquelle la valeur est associée. Créons notre calcul par étapes, en utilisant une vue simple pour nous aider à suivre ce qui se passe :

    1. Tout d’abord, nous souhaitons savoir si un pilote affiche une valeur « Yes » pour le stage obligatoire. Faites glisser Driver ID vers Lignes et Traffic School vers Colonnes. Nous obtenons un tableau de texte avec le texte d’espace réservé « Abc » qui indique les valeurs pertinentes pour chaque conducteur.

    2. Ensuite, nous souhaitons créer un calcul qui identifie si la valeur de Traffic School est « Yes ». La première étape du calcul est :

      Suivi de stage obligatoire = CONTAINS([Traffic School), 'Yes')

      Si vous déposons Attended Traffic School (Suivi de stage obligatoire) sur l’étagère Couleur dans la fiche Repères, nous voyons clairement les étiquettes « False » pour chaque repère dans la colonne « No », et « True » pour chaque repère dans la colonne « Yes ».

    3. Toutefois, ce que nous recherchons en réalité est l’information au niveau du conducteur, non de l’infraction. Une expression LOD est parfaitement adaptée pour tenter de calculer un résultat à un niveau de détail autre que celui de la structure de base des données. Nous allons en faire une expression LOD FIXED . Mais comme vous le savez, la partie de l’expression agrégée d’une LOD doit être agrégée. Nous avions précédemment utilisé MIN. Est-ce que cela va fonctionner dans ce cas? Nous allons modifier le calcul comme suit : 

      Suivi de stage obligatoire = { FIXED [Driver ID] : MIN( CONTAINS([Traffic School], 'Yes'))}

      Une vue de l’ID de conducteur par l’école de circulation, avec l’école de circulation assistée en couleur

      En appliquant cette modification dans la vue, nous voyons l’opposé de ce que nous recherchons. Tout conducteur associé à une valeur « No » est marqué comme « False » dans le tableau. Au lieu de cela, nous voulons que la valeur « Yes » apparaisse comme « True » pour chaque enregistrement concernant ce conducteur. Que fait la fonction MIN dans ce cas? Elle prend la première réponse dans l’ordre alphabétique, à savoir « No ».

    4. Et si nous la changions sur MAX? Prendrait-elle la dernière réponse dans l’ordre alphabétique? Nous allons modifier le calcul comme suit : 

      Suivi de stage obligatoire = { FIXED [Driver ID] : MAX ( CONTAINS( [Traffic School], 'Yes') ) }

      Une vue de l’ID de conducteur par l’école de circulation, avec l’école de circulation assistée en couleur

      Et voilà ce que nous obtenons : si un conducteur affiche la valeur « Yes » quelque part dans les données, il est marqué comme « True » pour le suivi d’un stage obligatoire, même pour l’infraction n’impliquant pas de stage obligatoire.

    5. Si nous déposons Attended Traffic School sur l’étagère Filtre et que nous sélectionnons simplement « False », nous nous retrouvons seulement avec les conducteurs qui n’ont jamais suivi de stage obligatoire.

  3. Pour répondre à la question d’origine, avec notre filtre en place, nous pouvons simplement déposer Average Fine sur l’étagère Texte dans la fiche Repères. Étant donné que nous avons intégré les agrégations dans le calcul, l’agrégation dans le champ sera AGG et nous ne pouvons pas le modifier, ce qui est attendu.

Les résultats seront identiques à la sortie obtenue avec la structure de données non permutées.

Avantages des données permutées

Nous pourrions nous en tenir à la structure de données d’origine du tutoriel s’il n’y avait que des questions auxquelles cette structure permettrait de répondre facilement. Mais le format de données permutées est plus flexible. Même s’il exige quelques calculs, une fois en place, l’ensemble de données résultant est bien adapté pour répondre à des questions plus larges.

Aller encore plus loin—Calculs seulement

Que faire si vous n’avez pas accès à Tableau Prep Builder? La situation est-elle désespérée si vous êtes bloqué avec les données d’origine? Absolument pas!

Tableau Desktop et les expressions LOD peuvent répondre à toutes vos questions analytiques. Si nous nous connectons au fichier Traffic Violations.xlsx(Le lien s’ouvre dans une nouvelle fenêtre) d’origine, il semble très similaire à l’ensemble de données permutées, à l’exception du champ crucial Infraction Number. Nous devons reproduire le résultat des étapes d’agrégation via les expressions LOD.

Remarque : vous pouvez télécharger le classeur LOD Driver Infractions.twbx(Le lien s’ouvre dans une nouvelle fenêtre) pour examiner les solutions en contexte. Gardez à l’esprit qu’il peut y avoir des moyens alternatifs d’interpréter l’analyse ou d’obtenir des réponses.

1. Quelle était la durée, en jours, entre la première et la seconde infraction pour chaque conducteur?
  1. Pour répondre à cette question dans Tableau Desktop, nous utilisons à nouveau la fonction DATEDIFF . Cette fonction exige une date de début et une date de fin. Cette information est présente dans nos données, mais toutes dans un seul champ. Nous devons l’extraire dans deux champs séparés. Nous voulons nous assurer que ces deux valeurs sont disponibles pour être comparées pour chaque conducteur, donc nous devons les corriger au niveau de Driver ID.

    1. Pour trouver la date de la première infraction, nous utilisons le calcul :

      1ère infraction = { FIXED [Driver ID] : MIN ( [Infraction Date] ) } 

    2. Nous effectuerons le calcul de la date de seconde infraction par étapes.

      1. Pour commencer, nous devons simplement examiner les dates qui sont supérieures à la première date :

        IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END

      2. Mais ceci nous donnera chaque infraction suivant la première, et nous souhaitons seulement la seconde. Donc nous voulons la plus petite de ces dates. Entourons les données dans MIN :

        MIN( IF [Infraction] : [1st Infraction] THEN [Infraction Date] END )

      3. Nous souhaitons également recalculer la date de la seconde infraction pour chaque conducteur. C’est là qu’interviennent les expressions LOD. Nous ferons la correction nécessaire au niveau de Driver ID :

        2nde infraction = { FIXED [Driver ID] : MIN ( IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END ) }

    3. Et nous pouvons maintenant créer le calcul DATEDIFF  :

      Durée entre les infractions = DATEDIFF('day', [1st Infraction], [2nd Infraction])

Les résultats seront identiques aux sorties obtenues avec les deux autres structures de données.

2. Comparez les montants des amendes pour la première et la seconde infraction. Sont-ils corrélés?
  1. Pour répondre à cette question dans Tableau Desktop, nous utiliserons une logique similaire à la version de données permutées pour cette question. Nous utiliserons les champs 1st Infraction et 2nd Infraction que nous avons créés pour la question I pour identifier si une ligne donnée est la première ou la seconde infraction, puis nous extrairons le montant de l’amende en conséquence.

    1. Si nous souhaitons simplement créer un nuage de points, nous pouvons ignorer la partie LOD et utiliser simplement un calcul IF  :

      Montant de la 1ère amende = IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END

      Montant de la 2nde amende = IF [2nd Infraction] = [Infraction Date] THEN [Fine Amount] END

    2. Toutefois, si nous souhaitons comparer et voir la différence de montant entre la première et la seconde amende pour un conducteur spécifique, nous nous heurterions au même problème de valeurs nulles qu’avec la première structure de données. Cela ne peut pas faire de mal d’entourer ces calculs dans une expression LOD FIXED donc c’est sans doute une bonne idée de procéder ainsi dès le début :

      Montant de la 1ère amende = { FIXED [Driver ID] : MIN ( IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

      Montant de la 2nde amende = {FIXED [Driver ID] : MIN( IF [2ndInfraction] = [Infraction Date] THEN [Fine Amount] END ) }

Les résultats seront identiques aux sorties obtenues avec les deux autres structures de données.

3. Quel conducteur a eu la plus grosse amende? Lequel a eu l’amende la plus faible?
  1. Pour répondre à cette question dans Tableau Desktop, nous devons d’abord prendre conscience d’une caractéristique de la méthode basée sur l’expression LOD seulement. Les deux méthodes utilisant Tableau Prep filtrent les enregistrements qui ne sont pas la première ou la seconde infraction pour un conducteur. La méthode LOD dans Tableau Desktop conserve tous les enregistrements. Cela signifie que si nous devions créer une visualisation SUM(Amount Paid) par Driver ID, la version Tableau Desktop seulement afficherait des montants plus élevés pour les conducteurs ayant commis plus de deux infractions. Pour obtenir une valeur Total Amount Paid (Montant total payé) à partir des données complètes correspondant aux autres méthodes, au lieu d’utiliser le champ Fine Amount (Montant de l’amende) d’origine, nous devons totaliser les premières et secondes amendes comme nous l’avions fait avec la première structure de données.

  2. En utilisant les champs que nous avons créés pour la question 2, nous ajouterons les deux montants d’amende. ZN  est nécessaire pour éviter un résultat nul pour les pilotes qui n’ont commis qu’une seule infraction. Le calcul est le suivant : 

    Montant total payé = [1st Fine Amount] + ZN([2nd Fine Amount])

Les résultats seront identiques aux sorties obtenues avec les deux autres structures de données.

4. Combien de conducteurs ont commis plusieurs types d’infractions?
  1. Pour répondre à cette question dans Tableau Desktop, nous ne pouvons pas nous contenter de faire ressortir Driver ID et un Total distinct pour Infraction Type. Étant donné que cet ensemble de données inclut les infractions au-delà de la seconde, certains conducteurs peuvent être associés à plus de deux types d’infractions. Pour que les résultats correspondent à ceux des autres méthodes, nous devons limiter la portée aux deux premières infractions seulement.

  1. Nous pouvons extraire les types de 1ère et 2nde infraction, les entourer dans des expressions LOD pour les rendre FIXED pour le conducteur, et utiliser un calcul IF pour compter les types :

    1. Type de la 1ère infraction = { FIXED [Driver ID] : MIN ( IF [1st Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

    2. Type de la 2nde infraction = { FIXED [Driver ID] : MIN ( IF [2nd Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

    3. Nombre de types d’infractions =

      IF [1st Infraction Type] = [2nd Infraction Type] THEN 1 
      ELSEIF [1st Infraction Type] != [2nd Infraction Type] THEN 2
      ELSE 1 END 

      Remarque : il est également possible de créer un grand nombre de ces calculs en tant que champ unique en imbriquant les calculs initiaux directement dans un calcul plus large. Dans ce cas, le calcul combiné se présenterait ainsi :
      IF
      {FIXED [Driver ID] : MIN(IF [1st Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      =
      {FIXED [Driver ID] : MIN(IF [2nd Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      THEN 1

      ELSEIF
      {FIXED [Driver ID] : MIN(IF [1st Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      !=
      {FIXED [Driver ID] : MIN(IF [2nd Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      THEN 2

      ELSE 1
      END


      Ce qui est un peu difficile à appréhender mais fonctionne si vous avez une préférence pour ce calcul. (Notez que les sauts de ligne et certains espaces n’ont pas d’incidence sur l’interprétation d’un calcul par Tableau.)

  2. Nous pouvons tracer le Nombre de types d’infractions par rapport à Driver ID et trier le graphique à barres.

Les résultats seront identiques aux sorties obtenues avec les deux autres structures de données.

5. Quel était le montant moyen de l’amende pour les conducteurs n’ayant jamais effectué de stage de conduite obligatoire?
  1. Pour répondre à cette question dans Tableau Desktop, nous ne pouvons pas simplement diviser le montant total des amendes par deux, puisque certains conducteurs n’ont commis qu’une seule infraction. Nous ne pouvons pas non plus calculer l’amende moyenne par conducteur et prendre la valeur de ces moyennes, parce que les moyennes de moyennes peuvent générer des incohérences. Au lieu de cela, nous devons calculer le montant total payé par les conducteurs qui n’ont jamais suivi de stage obligatoire, puis diviser par le nombre total d’infractions associées à ces amendes.

    1. Tout d’abord, nous devons déterminer si chaque conducteur a commis une seconde infraction. Nous pouvons utiliser le fait que les informations dans tous les champs « 2nd » seront null s’il n’y a pas eu de seconde infraction et commencer le calcul :

      IFNULL([2nd Infraction Type], 'no')

      Ceci renvoie un type d’infraction, le cas échéant, ou « no » s’il n’y a pas eu de seconde infraction.

    2. Ensuite, nous devons transformer ces informations en nombre d’infractions, 1 ou 2. Si le résultat de notre calcul IFNULL est « no », alors le conducteur doit être marqué comme ayant une seule amende. Tout autre résultat doit entraîner le marquage comme ayant deux amendes. Le calcul est le suivant :

      Nombre d’infractions =

      IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1
      ELSE 2
      END
    3. Pour le montant total payé, nous pouvons utiliser le calcul de la question 3. Pour réunir tous ces éléments, nous prenons le montant total des amendes et nous le divisons par notre nouveau champ calculé Nombre d’infractions pour déterminer le montant moyen de l’amende :

      Montant moyen de l’amende = SUM([Total Amount Paid]) / SUM([Number of Infractions])

  2. Nous devons également filtrer les conducteurs qui ont suivi un stage obligatoire. Étant donné que cet ensemble de données inclut des conducteurs ayant commis une troisième ou une quatrième infraction, nous ne pouvons pas utiliser la même méthode que la structure de données permutées. Au lieu de cela, nous suivrons la même méthode que les données non permutées, résumée ici :

    1. Tout d’abord nous devons créer deux calculs qui identifient si la première et la seconde infractions impliquaient ou non un stage obligatoire : 

      1er stage obligatoire = { FIXED [Driver ID] : MIN (IF [1st Infraction] = [Infraction Date] THEN [Traffic School] END ) }

      2nd stage obligatoire = { FIXED [Driver ID] : MIN (IF [2nd Infraction] = [Infraction Date] THEN [Traffic School] END ) }

    2. Nous additionnerons ces valeurs pour obtenir le nombre total de participations à des stages obligatoires : 

      Nombre de participations à des stages obligatoires =

      (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
      +
      (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
    3. Si nous faisons glisser Nombre de participations à des stages obligatoires vers la zone Dimensions du volet Données, les valeurs 0–2 deviennent discrètes.

    4. Maintenant si nous appliquons un filtre à Nombre de participations à des stages obligatoires, nous pouvons sélectionner simplement le 0 et savoir que nous obtenons ainsi les conducteurs qui n’ont jamais suivi de stages obligatoires.

  3. Pour répondre à la question d’origine, nous pouvons simplement déposer Montant moyen de l’amende sur l’étagère Texte dans la fiche Repères. Étant donné que nous avons intégré les agrégations dans le calcul, l’agrégation dans le champ sera AGG et nous ne pouvons pas le modifier, ce qui est attendu.

Les résultats seront identiques aux sorties obtenues avec les deux autres structures de données.

Il est important de se rappeler que cette solution comporte de nombreux calculs imbriqués et expressions LOD. Selon la taille de l’ensemble de données et la complexité des données, les performances peuvent poser problème.

Réflexions sur les méthodes

Donc, quelle voie choisir? C’est à vous de décider, en fonction aussi des outils dont vous disposez.

  • Si vous souhaitez éviter les expressions LOD, il existe une solution d’organisation des données, même si des calculs peuvent s’avérer nécessaires pour certaines analyses (Analyse dans Tableau Desktop).

  • Si vous pouvez organiser les données et que vous maîtrisez les calculs, y compris les expressions LOD, l’option intermédiaire offre la flexibilité optimale (Aller plus loin—Données permutées).

  • Si vous êtes à l’aise avec les expressions LOD, l’impact sur les performances est minimal, et/ou si vous n’avez pas accès à Tableau Prep, résoudre la question avec les seules expressions LOD est une option tout à fait viable (Aller encore plus loin—Calculs seulement).

Au minimum, il est utile de comprendre comment l’agrégation dans Tableau Prep et les expressions LOD dans Tableau Desktop sont liées ensemble et affectent l’analyse des données. Comme pour la plupart des choses avec Tableau, il existe plusieurs manières de procéder. Explorer toutes les options possibles peut vous aider à rassembler les concepts et à choisir la solution la plus adaptée à votre cas.

Calculs utilisés :

Infractions de conducteurs

  • Durée entre les infractions = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

  • Montant total payé =[1st Fine Amount] + ZN([2nd Fine Amount])

  • Nombre de types d’infractions = IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 ELSE 1 END

  • Nombre d’infractions = IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 ELSE 2 END

  • Montant moyen de l’amende = ( SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) ) ) / SUM([Number of Infractions])

  • Nombre de participations à des stages obligatoires = (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END) + (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)

Infractions de conducteur avec données permutées

  • 1ère infraction = {FIXED [Driver ID] : MIN(IF [Infraction Number] = "1st" THEN [Infraction Date] END)}

  • 2nde infraction = {FIXED [Driver ID] : MIN(IF [Infraction Number] = "2nd" THEN [Infraction Date] END)}

  • Durée entre les infractions = DATEDIFF('day', [1st Infraction], [2nd Infraction])

  • Montant de la 1ère amende = {FIXED [Driver ID] : MIN( IF [Infraction Number] = "1st" THEN [Fine Amount] END ) }

  • Nombre d’infractions = IF IFNULL(STR([2nd Infraction]), 'no')= 'no' THEN 1 ELSE 2 END

  • Montant moyen de l’amende = SUM([Fine Amount])/SUM([Number of Infractions])

  • Suivi de stage obligatoire = { FIXED [Driver ID] : MAX( CONTAINS([Traffic School], 'Yes'))}

Infractions de conducteurs avec expressions LOD

  • 1ère infraction = {FIXED [Driver ID] : MIN([Infraction Date])}

  • 2nde infraction = { FIXED [Driver ID] : MIN( IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END ) }

  • Durée entre les infractions = DATEDIFF('day', [1st Infraction], [2nd Infraction])

  • Montant de la 1ère amende = {FIXED [Driver ID] : MIN( IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

  • Montant de la 2nde amende = {FIXED [Driver ID] : MIN( IF [2nd Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

  • Montant total payé = [1st Fine Amount] + ZN([2nd Fine Amount])

  • Type de la 1ère infraction = {FIXED [Driver ID] : MIN( IF [1st Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

  • Type de la 2nde infraction = {FIXED [Driver ID] : MIN( IF [2nd Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

  • Nombre de types d’infractions = IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 ELSE 1 END

  • Nombre d’infractions = IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 ELSE 2 END

  • Montant moyen de l’amende = SUM ([Total Amount Paid]) / SUM([Number of Infractions])

  • 1er stage obligatoire = {FIXED [Driver ID] : MIN (IF [1st Infraction] = [Infraction Date] THEN [Traffic School] END ) }

  • 2nd stage obligatoire = {FIXED [Driver ID] : MIN (IF [2nd Infraction] = [Infraction Date] THEN [Traffic School] END ) }

  • Nombre de participations à des stages obligatoires = (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END) + (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)

Remarque : nous tenons à remercier Ann Jackson pour sa rubrique Workout Wednesday Do Customers Spend More on Their First or Second Purchase?(Le lien s’ouvre dans une nouvelle fenêtre) et Andy Kriebel pour son astuce Tableau Prep Returning the First and Second Purchase Dates(Le lien s’ouvre dans une nouvelle fenêtre) qui ont fourni l’inspiration initiale pour ce tutoriel. Si vous cliquez sur ces liens, vous quitterez le site Web de Tableau. Tableau décline toute responsabilité quant à l’exactitude ou l’actualité des pages gérées par les fournisseurs externes. Contactez les propriétaires si vous avez des questions concernant son contenu.

Merci de vos commentaires!Votre commentaire s été envoyé avec succès. Merci!