我要找的是为子类别指定调色板。我在网上找不到任何有关我的问题的信息。我将解释使用虚拟值:
想象一下,我有学校的数据,有老师,学生和看门人的名字。在数据库上,他们的名字前面是他们在学校的工作(例如:prof-John,st-Trinity,func-Manuel)。 目的是建立一个图表,其中包含每个人的工作年限。可以使用包含功能创建计算字段并将蓝色指定给教师,红色指向学生,绿色指定给门卫。但是,我想区分(在图表中)每个人的工作,为教师分配蓝色而不是教师的蓝色调色板,并为学生和门卫遵循相同的意识形态。
有谁知道怎么做? 提前致谢
答案 0 :(得分:7)
编辑:此解决方案为您提供 连续 数据的调色板。如果您正在寻找为离散字段指定颜色,这显然是过度的。 Alex Blakemore关于将您的连续数据离散化的建议简化了这个过程很多。但是,如果你感觉活泼,并且想要为你的每个维度成员提供连续的调色板,那么这就可以了。
Tableau不允许您将整个调色板分配给维度的成员,但我为您提供了一个解决方案。一些警告:
所以...考虑自己警告。
为简单起见,我在数据中只有两个角色,但我使用的公式将针对任意数量的角色进行推广。我还添加了Age,因此我们有一个可以使用的方法。
+-------------+-----+
| 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 |
+-------------+-----+
让我们从容易的部分开始吧。 Tableau有一个称为split的简洁选项,用于拆分分隔符上的字段。如果你进行自定义拆分,你可以选择分隔符,但Tableau非常聪明,所以如果你只选择拆分,那么很有可能它会为你解决问题。
右键单击[人物]并单击转换/拆分。它将为您提供两个计算字段,第一个字段如下所示:
TRIM( SPLIT( [Person], "-", 1 ) )
应该很清楚这是做什么的,同样清楚第二个字段会是什么样子。让我们继续并将这些字段重命名为Role和Name,因此我们的表格如下所示:
+-------------+------+----------+-----+
| 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 |
+-------------+------+----------+-----+
从0开始,为每个角色添加序列ID最重要。我们稍后会使用该数字进行一些数学运算。由于我们只有两个角色,我们可以手动完成而不需要太多努力:
角色#
IF [Role] = 'st'
THEN 0
ELSEIF [Role] = 'prof'
THEN 1
END
如果你有更多的价值观,那么你需要提出一些聪明的东西,但坦率地说,如果你有足够的价值,手动这样做会是一个挑战,那么你可能不应该这样做无论如何,要给每个值都有自己的调色板。
现在,我为你制作了一个解决方案的难以辨认的,可怕的,骇人听闻的怪物。我们要制作custom color palette。 (你需要了解这篇文章的其他内容是如何有效的,所以如果你不知道如何制作自定义调色板,请点击该链接。不用担心,它&#39很容易。)更具体地说,我们将为每个角色构建一个带有区域的顺序调色板。
我们的目标是规范化和操纵我们的数据,使学生处于绿色区域,教授们处于蓝色区域。让我们从规范化开始。
我们需要在每个角色中使用最小和最大年龄,因此我们将使用LOD表达式:
最大年龄:
{ FIXED [Role] : MAX([Age]) }
最低年龄
{ FIXED [Role] : MIN([Age]) }
现在让我们规范化年龄:
归一化年龄值(NAV)
( ([Age] - [Minimum Age]) / ([Maximum Age] - [Minimum Age]) )
我们现在每个人的[标准化年龄值](以下称为NAV)介于0和1之间,并在每个角色内进行标准化。我们的数据现在看起来像这样:
+-------------+------+--------+----------+-----+-----+-----+------+
| 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 |
+-------------+------+--------+----------+-----+-----+-----+------+
现在我们需要将教授们转移到我们调色板的蓝色区域,这就是事情变得有点棘手的地方。
在一个只存在于我们梦想中的完美世界中,我们可以为我们的教授增加一个'资产净值为我们的学生提供0到1之间的资产净值,为我们的教授提供1到2之间的资产净值,但我们的梦想并没有注意到,因为我们使用顺序调色板,有&#34 ;死区"在调色板的每个区域之间。
让我们说我们为每个颜色区域构建了一个只有两种颜色的顺序调色板。我们称它们为Green0,Green1,Blue0和Blue1。 Green1和Blue0之间会有一个空格,颜色不断从绿色变为蓝色,因此在我们的调色板中无法使用此区域。我们可以通过离散化调色板来推动这一点:
中间的绿色/蓝色部分实际上比Green1 更轻。因此,我们需要确保我们的学生只获得 Green0和Green1之间的调色板区域,并且我们的教授只获得 Blue0和Blue1之间的调色板区域
我们不应该在调色板上考虑Green0和Green1区域 - 它们是点。这些要点将我们的调色板分为三个不同的区域,绿区,死区和蓝区。
由于死区只是我们两个颜色区域之间的空间(在我们的最终绿色和我们的第一个蓝色之间),我们可以通过添加更多颜色来降低死区的大小,我不会这样做。认为必然有价值,但值得注意。如果我们构建一个每个区域有十种颜色的调色板,这就是区域的样子。
现在,如果我们在调色板中添加更多颜色区域(例如,红色区域),则会添加更多死区。
现在我们只需要每个颜色区域的起点和颜色区域的大小,我们最终得到公式:
[NAV] * [Color Zone Size] + [Color Zone Starting Point]
当你知道死区的大小时,不难计算区域的大小:
因此,颜色区域大小的公式为:
颜色区域大小
( ([numColorCodes] / [numColorZones]) - 1 ) / ([numColorCodes] - 1)
起点很容易从那里得出 - 它只是颜色区域的大小加上后续死区的大小。我们需要乘以我们之前计算的角色#:
色域起点
( ([numColorCodes] / [numColorZones]) * [Role #] ) / ([numColorCodes] - 1)
因此,重申一下,我们的色域将是:
颜色坐标
[NAV] * [Color Zone Size] + [Color Zone Starting Point]
我继续把它们放在一起 - 这是一个条形图作为概念证明。
而且,作为奖励,这里是我制作的20个代码调色板。
<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>
现在很明显,您需要为该调色板添加另一种颜色以包含看门人。不幸的是,这一点总是手动的,但您可以保存一些具有不同数量区域的调色板,以便将来可以回收。您还可以让Tableau计算您需要的颜色区域数量:
{ FIXED : COUNTD([Role]) }
一帆风顺。
答案 1 :(得分:5)