6 votes

Tableau - Utiliser une palette différente selon le nom

Ce que je cherche, c'est à attribuer une palette de couleurs à une sous-catégorie. Je n'ai trouvé aucune information en ligne pour mon problème. Je vais expliquer en utilisant des valeurs fictives :

Imaginez que je dispose de données sur une école, avec les noms des enseignants, des élèves et des concierges. Dans la base de données, leur nom est précédé de leur fonction à l'école (par exemple : prof-John, st-Trinity, func-Manuel). Le but est de construire un graphique avec les années de travail de chaque personne. Il est possible de créer un champ calculé et d'attribuer le bleu aux enseignants, le rouge aux élèves et le vert aux concierges à l'aide de la fonction contient fonction. Cependant, je veux distinguer (dans le graphique) chaque personne dans sa fonction, en attribuant au lieu de la couleur bleue pour les enseignants, une palette bleue pour les enseignants et en suivant la même idée pour les étudiants et les concierges.

Quelqu'un sait-il comment procéder ? Merci d'avance

7voto

Andrew LaPrise Points 2508

EDIT : Cette solution permet de disposer d'une palette de couleurs pour continu données. Si vous souhaitez attribuer des couleurs à des champs distincts, cette solution est clairement excessive. La suggestion d'Alex Blakemore de discrétiser vos données continues simplifie considérablement ce processus. Mais si vous vous sentez d'attaque et que vous voulez une palette de couleurs continues pour chaque membre de votre dimension, ceci devrait faire l'affaire.


Tableau ne vous permet pas d'attribuer des palettes entières aux membres d'une dimension, mais j'ai trouvé une solution pour vous. Quelques mises en garde :

  1. Tableauing semble toujours être un hack stupide après l'autre, mais c'est vraiment la chose la plus hacktastique que j'ai jamais faite dans Tableau.
  2. Vous êtes sur le point d'effectuer un travail manuel important. Rien dans ce processus n'est dynamique, même de loin.
  3. Cette solution est extrêmement fragile. Si vos données ne contiennent actuellement que des étudiants, des professeurs et des concierges, mais qu'un jour, vous ajoutez une personne qui est un aventurier, cela se cassera immédiatement, et vous devrez refaire une grande partie de votre travail.

Alors... considérez-vous comme averti.


Pour des raisons de simplicité, les données ne comporteront que deux rôles, mais les formules que j'utilise s'appliqueront à n'importe quel nombre de rôles. J'ai également ajouté l'âge, juste pour avoir une mesure avec laquelle travailler.

+-------------+-----+
| Person      | Age |
+-------------+-----+
| prof-John   | 53  |
| st-Trinity  | 22  |
| prof-Andrew | 47  |
| st-Alice    | 21  |
| st-George   | 20  |
| st-Frank    | 21  |
| prof-Ed     | 74  |
| st-Ralph    | 26  |
| st-Skrillex | 18  |
+-------------+-----+

Commençons par la partie la plus facile. Tableau dispose d'une option intéressante appelée diviser qui divise les champs en fonction des délimiteurs. Si vous effectuez une division personnalisée, vous pouvez choisir le délimiteur, mais Tableau est assez intelligent, donc si vous choisissez simplement Diviser, il y a de fortes chances qu'il se débrouille pour vous.

Cliquez donc avec le bouton droit de la souris sur [Personne] et cliquez sur Transformer/Séparer . Vous obtiendrez deux champs calculés, dont le premier ressemble à ceci :

TRIM( SPLIT( [Person], "-", 1 ) )

Son rôle devrait être assez clair, de même que l'aspect du second champ. Renommons ces champs en Role et Name, afin que notre table ressemble à ceci :

+-------------+------+----------+-----+
| Person      | Role | Name     | Age |
+-------------+------+----------+-----+
| prof-John   | prof | John     | 53  |
| st-Trinity  | st   | Trinity  | 22  |
| prof-Andrew | prof | Andrew   | 47  |
| st-Alice    | st   | Alice    | 21  |
| st-George   | st   | George   | 20  |
| st-Frank    | st   | Frank    | 21  |
| prof-Ed     | prof | Ed       | 74  |
| st-Ralph    | st   | Ralph    | 26  |
| st-Skrillex | st   | Skrillex | 18  |
+-------------+------+----------+-----+

Il sera éventuellement important d'ajouter un numéro de série pour chacun des rôles, en commençant par 0. Nous utiliserons ce numéro pour des calculs ultérieurs. Comme nous n'avons que deux rôles, nous pouvons le faire manuellement sans trop d'efforts :

  1. Rôle #

    IF [Role] = 'st'
    THEN 0
    ELSEIF [Role] = 'prof'
    THEN 1
    END

Si vous avez plus de valeurs que cela, vous devrez trouver quelque chose d'intelligent, mais franchement, si vous avez suffisamment de valeurs pour que faire cela manuellement soit un défi, vous ne devriez probablement pas donner à chacune de ces valeurs sa propre palette de couleurs de toute façon.


Voici maintenant la solution que j'ai concoctée pour vous : une monstruosité dure, hideuse, hacktastique. Nous allons fabriquer un palette de couleurs personnalisée . (Vous allez devoir comprendre comment cela fonctionne pour que le reste de cet article ait un sens, alors cliquez sur ce lien si vous ne savez pas comment créer des palettes de couleurs personnalisées. Ne vous inquiétez pas, c'est facile). Plus précisément, nous allons construire une palette séquentielle unique avec une région pour chacun de vos rôles.

Our hacktastic color palette

Notre objectif sera de normaliser et de manipuler nos données de manière à ce que les étudiants se trouvent dans la région verte et les professeurs dans la région bleue. Commençons par la normalisation.

Nous aurons besoin des âges minimum et maximum dans chaque rôle, nous utiliserons donc des expressions LOD :

  1. Âge maximum :

    { FIXED [Role] : MAX([Age]) }
  2. Âge minimum

    { FIXED [Role] : MIN([Age]) }

Normalisons maintenant les âges :

  1. Valeur d'âge normalisée (VAN)

    ( ([Age] - [Minimum Age]) / ([Maximum Age] - [Minimum Age]) )

Nous disposons à présent d'une [valeur normalisée de l'âge] (ci-après VNA) comprise entre 0 et 1 pour chaque personne, normalisée au sein de chaque rôle. Nos données se présentent désormais comme suit :

+-------------+------+--------+----------+-----+-----+-----+------+
| Person      | Role | Role # | Name     | Age | Min | Max | NAV  |
+-------------+------+--------+----------+-----+-----+-----+------+
| prof-John   | prof | 1      | John     | 53  | 47  | 74  | .22  |
| st-Trinity  | st   | 0      | Trinity  | 22  | 18  | 26  | .5   |
| prof-Andrew | prof | 1      | Andrew   | 47  | 47  | 74  | 0    |
| st-Alice    | st   | 0      | Alice    | 21  | 18  | 26  | .375 |
| st-George   | st   | 0      | George   | 20  | 18  | 26  | .25  |
| st-Frank    | st   | 0      | Frank    | 21  | 18  | 26  | .375 |
| prof-Ed     | prof | 1      | Ed       | 74  | 47  | 74  | 1    |
| st-Ralph    | st   | 0      | Ralph    | 26  | 18  | 26  | 1    |
| st-Skrillex | st   | 0      | Skrillex | 18  | 18  | 26  | 0    |
+-------------+------+--------+----------+-----+-----+-----+------+

Nous devons maintenant déplacer les professeurs vers la région bleue de notre palette, et c'est là que les choses deviennent un peu plus délicates.

Dans un monde parfait qui n'existe que dans nos rêves, nous pourrions simplement ajouter 1 aux VNI de nos professeurs, ce qui nous donnerait des VNI entre 0 et 1 pour nos étudiants et entre 1 et 2 pour nos professeurs, mais ce que nos rêves n'ont pas remarqué, c'est que comme nous utilisons une palette de couleurs séquentielles, il y a des "zones mortes" entre chaque région de la palette.

Supposons que nous ayons construit une palette de couleurs séquentielle avec seulement deux couleurs pour chaque région de couleur. Appelons-les Vert0, Vert1, Bleu0 et Bleu1. Entre Vert1 et Bleu0, il y aura un espace où la couleur passera continuellement du vert au bleu, ce qui rendra cette zone inutilisable dans notre palette. Nous pouvons insister sur ce point en discrétisant la palette :

Dead zone!

La partie verdâtre/bleuâtre au milieu est en fait plus léger que Green1. Nous devons donc nous assurer que nos élèves n'obtiennent que l'aire de la palette entre Green0 et Green1, et que nos professeurs n'obtiennent que l'aire de la palette entre Blue0 et Blue1.

Nous ne devrions pas considérer les régions Green0 et Green1 comme faisant partie de notre palette. points . Ces points ont divisé notre palette en trois régions distinctes : la zone verte, la zone morte et la zone bleue.

The Zones

Étant donné que la zone morte n'est que l'espace entre nos deux régions de couleur (entre notre dernière couleur verte et notre première couleur bleue), nous pouvons réduire la taille de la zone morte en ajoutant plus de couleurs, ce qui, à mon avis, n'est pas nécessairement utile, mais mérite d'être noté. Voici à quoi ressemblent les zones si nous construisons une palette avec dix couleurs par région.

More Zones

Si nous ajoutons d'autres régions de couleur à notre palette (par exemple, une zone rouge), nous ajouterons d'autres zones mortes.

Il ne nous reste plus qu'à déterminer le point de départ de chaque zone de couleur et la taille d'une zone de couleur, et nous obtenons la formule suivante :

[NAV] * [Color Zone Size] + [Color Zone Starting Point]

Il n'est pas difficile de calculer la taille des zones lorsque l'on connaît la taille des zones mortes :

Zone sizes

La formule pour déterminer la taille d'une zone de couleur est donc la suivante :

  1. Zone de couleur Taille

    ( ([numColorCodes] / [numColorZones]) - 1 ) / ([numColorCodes] - 1)

Le point de départ est facile à déduire : il s'agit simplement de la taille d'une zone de couleur plus la taille de la zone morte suivante. Nous devrons multiplier par le numéro de rôle que nous avons calculé plus tôt :

  1. Zone de couleur Point de départ

    ( ([numColorCodes] / [numColorZones]) * [Role #] ) / ([numColorCodes] - 1)

Donc, pour réitérer, notre champ de couleurs sera :

  1. Couleur coordonnée

    [NAV] * [Color Zone Size] + [Color Zone Starting Point]

Je suis allé de l'avant et j'ai mis cela en place - voici un diagramme à barres comme preuve de concept.

Proof of concept

Et, en prime, voici la palette de couleurs des 20 codes que j'ai créée.

<color-palette name="Hacktastic" type="ordered-sequential">
  <color>#DBE9B1</color>
  <color>#BFE38D</color>
  <color>#A7DA72</color>
  <color>#92D064</color>
  <color>#80C45D</color>
  <color>#70B557</color>
  <color>#62A74D</color>
  <color>#569A33</color>
  <color>#498E0F</color>
  <color>#398300</color>
  <color>#B3D4DB</color>
  <color>#8CCCE0</color>
  <color>#71BFDF</color>
  <color>#63ADD6</color>
  <color>#4592C2</color>
  <color>#2B7FB7</color>
  <color>#1471B3</color>
  <color>#1660A2</color>
  <color>#1C508C</color>
  <color>#24446F</color>
</color-palette>

Il est évident que vous devrez ajouter une autre couleur à cette palette pour inclure les concierges. Malheureusement, cette étape sera toujours manuelle, mais vous pouvez conserver quelques palettes de couleurs avec différents nombres de zones que vous pourrez recycler à l'avenir. Vous pouvez également demander à Tableau de compter le nombre de zones de couleur dont vous aurez besoin :

{ FIXED : COUNTD([Role]) }

Bon vent.

5voto

Alex Blakemore Points 2010

L'approche la plus simple consiste à s'assurer que vous disposez de deux discret champs (c'est-à-dire bleus), généralement des dimensions. Disons que l'un d'eux est la profession et l'autre le nombre d'années de travail. poubelle . Vous pouvez utiliser la commande create bins pour créer une dimension discrète basée sur les années de la mesure du travail. Vous pouvez ajuster la taille de l'emplacement en modifiant le champ de l'emplacement.

Vous pouvez alors placer deux champs distincts sur l'étagère de couleurs si vous maintenez la touche MAJ enfoncée lors de l'ajout du deuxième champ. Dans ce cas, Tableau créera effectivement un champ combiné et attribuera les couleurs de manière intelligente. Vous pouvez modifier les attributions de couleurs en double-cliquant sur la légende des couleurs.

En voici un exemple.

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X