如何在 Tableau 中建立 Marimekko 图

完善计算

在 Tableau 中制作 Marimekko 图确实需要付出一些努力。我们需要考虑每个标记需要在正确的位置,以正确的大小和颜色绘制哪些值。让我们记住这一点,然后开始考查数据。六个院系的数据来自 R UCB 招生样本数据集

这是一个高数据集,具有三个维度 — Department(院系)、Gender(性别)和 Admission Status(入学状态),因此我们需要使用一些更高级的计算来处理数据的细粒度信息。下面是构建以上 Marimekko 图的步骤:

1. 从交叉表开始以便验证值。将决定详细级别的 x 轴维度以离散胶囊的形式放到行上。然后在其右边添加将用于“颜色”功能区的离散胶囊:

2.将感兴趣的初始度量(在本例中为 SUM(Applicants))添加到“文本”功能区。

3.使用总计百分比快速表计算创建 y 轴度量。在本例中,我们将使用“Applicants”(报考人数)度量,并在“计算依据”选项中选择“Admission Status”。

4.在“度量”窗口中双击“度量值”。Tableau 将创建“度量名称/值”交叉表,并显示“度量值”卡。

5.将感兴趣的初始度量(在本例中为“Applicants”)从“度量”窗口拖至“度量值”卡。

6.现在,我们将生成每个 Marimekko 列的大小(宽度)。在本例中,我们将使用详细级别 (LOD) 表达式来创建计算字段,因为这样我们就无需进行复杂的表计算。

“Applicants per Column”(每列报考人数)度量的公式为 {EXCLUDE [Admission Status]: SUM([Applicants])}。这样,它将汇总院系和性别的每种组合的所有报考人,结果就是我们需要的列宽。将其拖至“度量值”卡。

7. 现在,我们需要创建每列的 x 轴位置。为此,我们需要回答两个问题。首先,我们要用这个度量来确定列的左边缘还是右边缘?在本例中,我们将使用右边缘,因为它更易于计算。

其次,我们如何为每个列(根据 Department 和 Gender 维度创建)中的每个标记(根据“Admission Status”维度创建)获得相同的值?现在,似乎我们只需要为“Applicants per Column”度量生成一个汇总。

但是,使用 Tableau 的“汇总”快速表计算时,我们无法找到一种对任何数据结构(特别是稀疏数据)都有效的“计算依据”设置。所以我们必须自行构建。

我们可以通过几种方法来实现这个目的。我认为以下计算最简单,因为它只需要一步就可以获得所需的结果。这是报考人数公式。该计算使用特定维度作为计算依据:Department、Gender 和 Admission Status(依次):

IF FIRST()==0 THEN
MIN([Applicants per Column])
ELSEIF MIN([Department]) != LOOKUP(MIN([Department]),-1) THEN
PREVIOUS_VALUE(0) + MIN([Applicants per Column])
ELSEIF MIN([Gender]) != LOOKUP(MIN([Gender]),-1) THEN
PREVIOUS_VALUE(0) + MIN([Applicants per Column])
ELSE
PREVIOUS_VALUE(0)
END

它在练习工作表视图中是这样的:

“# of Applicants”字段的公式有一些复杂。原理如下:

a. 如果是第一个地址(分区中的行),则返回“Applicants per Column”。

b. 如果 Department 或 Gender 与前一个地址不同(即我们在新列中),则返回此度量的前一个值(来自前一个地址)与当前“Applicants per Column”之和。这样,运行总和会针对每个 Department 或 Gender 而递增。

c. 如果 Department 或 Gender 没有变化,则返回此度量的前一个值(来自前一个地址)。这样就可以跨 Admission Status 保留运行总和,使其不发生改变,从而使同一列中的所有“Admission Statuses”具有相同的值。

请注意,将胶囊添加到视图中并对具体维度进行寻址设置时,Tableau 10 会自动选取我们在步骤 2 中定义的行维度的顺序:

这是 Tableau 10 中的新默认行为。在以前的版本中,等效对话框中的顺序是字母顺序,有时这会导致错误的寻址。感谢 Tableau!

我们已经对此进行了视觉验证,现在可以构建 Marimekko 图视图了。

8. 复制练习工作表。

9. 将度量值从“文本”移至“详细级别”功能区。视图中的值将被替换为“Abc”。

10. 从列中移除“度量名称”。Tableau 现在将绘制叠印的“Abc”。

11. 将“Department”、“Gender”和“Admission Status”移至“详细级别”功能区(按照此顺序)。Tableau 会将视图更改为一堆正方形标记。

12. 将 SUM(Applicants) 总计百分比快速表计算胶囊从“度量值”移至“行”。该视图现在将具有单个堆叠条形。

13. 将“# of Applicants”度量从“度量值”移至“列”。Tableau 将创建一个散点图。

14. 将标记类型更改为条形。您现在将有很多条形:

15. 将“ATTR(Applicants per Column)”度量从“度量值”移至大小功能区。除了应用大小并创建图例外,Tableau 还将自动移除“度量值”,并将“SUM(Applicants) ”度量放到“详细级别”上。

16. 单击大小功能区,然后将设置更改为“固定”,对齐方式设置为“右侧”。

Tableau 10 中的这个新固定控件告诉 Tableau,可使用大小功能区内胶囊中的值来设置每个条形图段的宽度。设置为右侧对齐可以告诉 Tableau,每个条形图段将从右边缘延伸,这些图段是根据列上的连续胶囊(在本例中为“# of Applicants ”表计算)来定位的。

现在,您应该看到一个无色的 Marimekko 图:

如果此时 Marimekko 中的所有条形并未垂直和水平堆叠,请在继续操作之前参考这些故障排除提示

17. 将“Admission Status”放置到“颜色”功能区。

18. 将“Gender”放置到“标签”上。

19. 编辑工具提示,然后关闭“包括命令按钮”。(对于这种视图,我们不希望用户因为无意中筛选了数据而破坏图表。)

在您的 Marimekko 图中添加小标题

由于 Marimekko 的水平轴是使用连续胶囊(即“# of Applicants”)绘制的,因此找不到可以用来区分不同院系的小标题。因此,我们需要添加小标题以使其更易于阅读。我们可以通过突出显示操作使用仪表板上的两个工作表来手动添加小标题,也可以使用另外一个计算和一个双轴来实现部分自动操作。

我将在此处演示手动方法,因为我认为它可以实现更好的交互性。此方法使用堆积条形图来获得小标题的效果,并对条形中的标记进行格式设置,使其看起来类似小标题并启用突出显示操作。

1. 创建一个新的工作表。

2. 将初始度量(此处为“Applicants ”)拖至“列”。Tableau 将创建水平条形图。

3. 将小标题维度(此处为“Department”)拖至“标签”。Tableau 将创建一个堆叠条形图,以小标题作为标签。

4. 确保小标题维度的排列顺序与 Marimekko 图相反。

5. 编辑工具提示,然后关闭“包括命令按钮”。

6. 设置格式,使其具有小标题外观。以下是一个简单示例:

7. 创建一个具有固定大小的新仪表板。

8. 根据您喜欢的方式,将 Marimekko 工作表作为平铺或浮动对象放置在仪表板上。

9. 调整 Marimekko 标题的大小(例如,添加一些新行),以便在标题和工作表之间隔出一些空间。

10. 将小标题工作表作为浮动工作表添加到仪表板,并将其更改为“固定宽度”,然后关闭标题。

11. 现在要做一点精细活:您需要调整小标题工作表的大小并使其对齐,以便将其正确放置在 Marimekko 图的列上:

12. 使用小标题维度(此处为“Department”)添加一个由鼠标悬停触发的突出显示操作,以小标题工作表为来源,以 Marimekko 工作表为目标。

13. 使用小标题维度(此处为“Department”)添加一个由鼠标悬停触发的突出显示操作,以 Marimekko 工作表为来源,以小标题工作表为目标。

请注意,在这里我们需要两个单独的突出显示操作,以防止 Tableau 在用户每次将鼠标悬停在任何条形上时都突出显示一个“Department”中的所有四个标记。

仪表板已经制作好了:

订阅我们的博客