【问题标题】:Create a drill down and drill up in tableau with multiple one to many relationships在具有多个一对多关系的画面中创建向下钻取和向上钻取
【发布时间】:2015-09-19 04:08:29
【问题描述】:

所以我有 3 个数据集,结构如下:


+-----------+--------+--------+
| Last_Name | Salary | Tenure |
+-----------+--------+--------+  
| Hoinski   | 40000  | 2      |  
| Smith     | 90000  | 4      |
| Jones     | 120000 | 10     |
+-----------+--------+--------+

+-----------+---------+-------+
| Last_Name | Status  | Count |
+-----------+---------+-------+
| Jones     | On Time | 4     |
| Jones     | Late    | 0     |
| Jones     | Missing | 1     |
| Hoinski   | On Time | 1     |
| Hoinski   | Late    | 2     |
| Hoinski   | Missing | 1     |
+-----------+---------+-------+

+-----------+---------+-------+
| Last_Name | Risk    | Count |
+-----------+---------+-------+  
| Jones     | High    | 2     |
| Jones     | Low     | 1     |
| Jones     | Medium  | 4     |
| Smith     | High    | 0     |
| Smith     | Low     | 1     |
| Smith     | Medium  | 3     |
| Hoinski   | High    | 2     |
| Hoinski   | Low     | 1     |
| Hoinski   | Medium  | 0     |
+-----------+---------+-------+

我想要完成的事情

我想要 2 个用于状态和风险的饼图,以及 1 个用于工资/任期的散点图。当我单击 Salary/Tenure 的散点图时,我希望饼图从总计切换到按我的选择过滤。我得到了这个工作。
问题是当我单击饼图总计时,可以说“状态 = 准时”其他饼图不过滤。在此示例中,只有 Jones 和 Hoinski 具有“准时”状态,因此其他风险饼图应删除 Smith,但事实并非如此。

饼图仅在我单击散点图时过滤(并且数据总和不正确)。

这很好用,但我需要删除姓氏的详细程度。

【问题讨论】:

  • 我将此标记为 SO 题外话,因为它不是编程问题。另外,sql和join标签的原因也不清楚。
  • 使用 sql 和 join 标签的原因是因为我在这 3 个数据集之间使用了两个左连接,我想知道那里是否有出错的余地。你建议在哪里发帖?
  • 有一个pretty serious precedent 用于向 Tableau 提出关于 SO 的问题。软件中有一个非常真实的编程元素。如果 Excel 和类似软件在 SO 上是一个可行的主题,那么 Tableau 也应该如此。
  • @barker 您的编辑只会隐藏数据和仪表板中的问题。我建议在尝试分析之前了解data normalization。否则,您的所有结果要么是错误的,要么会被粘贴到您期望从规范化数据中获得的结果中。
  • 我愿意,但是在阅读了下面的答案和 cmets 之后,@AndrewLaPrise 似乎为此提供了一些很好的建议。如果您想要一个比这更全面的答案,我会问一个关于 Tableau 的标准化/推荐数据的新问题。 Tableau 不喜欢吃不相交的汇总数据,see here。该链接中的数字 1、3 和 5 直接适用于您正在做的事情。

标签: sql join charts visualization tableau-api


【解决方案1】:

我怀疑您只是将这三个表连接在一起。这是你最终得到的结果(我只会给琼斯看):

+-----------+--------+--------+---------+--------+---------+--------+
| Last_Name | Salary | Tenure | Status  | CountS | Risk    | CountR |
+-----------+--------+--------+---------+--------+---------+--------+
| Jones     | 120000 | 10     | On Time | 4      | High    | 2      |
| Jones     | 120000 | 10     | Late    | 0      | High    | 2      |
| Jones     | 120000 | 10     | Missing | 1      | High    | 2      |
| Jones     | 120000 | 10     | On Time | 4      | Low     | 1      |
| Jones     | 120000 | 10     | Late    | 0      | Low     | 1      |
| Jones     | 120000 | 10     | Missing | 1      | Low     | 1      |
| Jones     | 120000 | 10     | On Time | 4      | Medium  | 4      |
| Jones     | 120000 | 10     | Late    | 0      | Medium  | 4      |
| Jones     | 120000 | 10     | Missing | 1      | Medium  | 4      |
+-----------+--------+--------+---------+--------+---------+--------+

问题在于,您处理的是已经聚合的 Tableau 数据,而不是未经汇总的原始数据。这使得表格很难直观地连接起来,也使得 Tableau 聚合和过滤数据的工作非常具有挑战性。您可以看到加入这些表会导致大量重复。

这种重复是状态饼图中奇数的来源:

SELECT Status,
       SUM(CountS)
FROM [The joined tables]
WHERE last_name = 'Jones' -- Filtering by Jones
GROUP BY Status;

产量:

+---------+--------+
| Status  | CountS |
+---------+--------+
| On Time | 12     |
| Late    | 0      |
| Missing | 3      |
+---------+--------+

所有原始数字都乘以三,因为每一行都重复了两次。

此外,让我们按“准时”过滤(点击饼图),看看我们的风险饼图会发生什么:

SELECT Risk,
       SUM(CountR)
FROM [The joined tables]
WHERE last_name = 'Jones' -- Filtering by Jones
AND Status = 'On Time' -- Filtering by On Time, by clicking the pie slice
GROUP BY Risk;

产量:

+--------+--------+
| Risk   | CountR |
+--------+--------+
| High   | 2      |
| Low    | 1      |
| Medium | 4      |
+--------+--------+

这种重复又给我们带来了麻烦。

如果您可能获得此数据的原始、未汇总版本,Tableau 会更好地处理这些数据,并且您将能够用它做更多事情。否则,您将不得不在如何设置过滤器和聚合方面发挥创意(坦率地说是愚蠢的),您会发现整个仪表板最终将成为一个又一个丑陋的黑客。天哪,伙计。

【讨论】:

  • 非常感谢安德鲁的帮助,正是我的问题。我可以获得原始数据...我的联接是否相同?
  • 我认为如果没有我所做的聚合,连接仍然会复制数据。它仍然包含一对多关系。
  • 您的联接可能基本相同。我希望您最终会得到一个状态表,其中每个日期都有一行,Status 有一个字段。所以一行可能看起来像:|Jones|18/09/2015|Late||Jones|19/09/2015|On Time|。然后,您可以将该表加入last_nameDate 上的风险表,以及last_name 上的employee_info 表。然后您的饼图可以使用Number of Records 来确定@​​987654334@ 的每个值的计数,而不是预先汇总的计数。你的数据看起来像那样吗?
  • 澄清一下,如果你有一个包含薪水和任期的employee_info 表(看起来像你这样做),那么每个员工应该只有一行。您的状态和风险表可能每个员工/日期(或类似的东西)只有一行。只要您能够以可比较的方式唯一标识每一行,您就应该能够避免重复问题并让 Tableau 为您处理聚合。
  • 这对我来说听起来像是一个新问题。如果您可以向我们展示您的未聚合数据的结构,那么 SO 社区也许可以联合起来寻找一种方法来使其适合 Tableau。在不知道这一点的情况下,我提供的答案确实是任何人都可以为您做的最好的。日期/时间绝不是必需的,但如果您希望在它们之间进行过滤,您将需要一种方法将这些风险和状态表连接在一起而不会出现任何重复。
猜你喜欢
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
相关资源
最近更新 更多