【发布时间】:2020-06-13 07:13:58
【问题描述】:
我有两个字段:日期和新患者。我需要计算患者的累计总数。使用表格计算来运行总计可以完成这项工作,但会阻止我在分析中使用预测和集群。如果日期小于图表上维度中使用的日期,有没有办法创建一个计算字段来计算患者总和?
【问题讨论】:
标签: tableau-api
我有两个字段:日期和新患者。我需要计算患者的累计总数。使用表格计算来运行总计可以完成这项工作,但会阻止我在分析中使用预测和集群。如果日期小于图表上维度中使用的日期,有没有办法创建一个计算字段来计算患者总和?
【问题讨论】:
标签: tableau-api
是否要保留累计总和但不显示用于计算总和的日期?如果是这样,请查看包含如何filter dates but maintain the running sum in Tableau 的示例的这篇文章。
【讨论】:
这里有两种方法,都涉及编辑数据源的物理层
Andy Granowitz 写了一个明确的example,展示了 SQL 中的这两种方法。 (我将他的 SQL 复制到这个答案的底部,以防链接消失,但建议阅读他的帖子以获得更好的解释。)
在这种情况下,我认为自联接更容易一些,因为您不必编写任何 SQL,但在更复杂的情况下,窗口查询方法将为您提供更大的灵活性。如果您有非常大的数据集,则窗口查询可能会更有效。请注意,一些数据库可能还不支持窗口查询,但大多数都支持。如果您使用的是 CSV 或 Excel 文件,则可能必须先将其转换为 Hyper 数据提取,然后才能使用自定义 SQL。
要在 Tableau 中定义自联接,请编辑数据源,双击您的表以拖放到物理层,然后再次将您的表拖到画布上。然后定义您的加入标准。自定义 SQL 可用于大多数数据库,但可能不适用于文本文件。请参阅帮助。
在大多数情况下,最好避免使用自定义 SQL 并让 Tableau 生成优化的 SQL。 Tableau 经常被高级用户描述为“带有图表包的 SQL 生成器”,以强调它非常擅长生成 SQL。新用户经常坚持手写 SQL,因为他们习惯了它,这牺牲了 Tableau 带来的一些主要好处。 Tableau 已经发展到很少需要编写自定义 SQL 的地步,但仍有一些重要的用例。利用窗口查询是自定义 SQL 的一个很好的用例。另一种情况是当您想使用数据库提供的非标准特性或函数时(但在这种情况下,首先尝试使用 Tableau 中的 RAW SQL 函数 - 它允许您仅嵌入自定义 SQL 的片段)
表计算在很多方面都受到 SQL 窗口查询的启发,并且通常快速简单(但有时并不那么容易)。表格计算是在客户端计算的,这可能有助于或损害性能,具体取决于您是否已获取数据。
hyper API 现在支持一些窗口查询。希望有朝一日,无需自定义 SQL 即可从 Tableau 轻松访问它们。
————
用于自连接方法的 SQL
select
a.date,
sum(b.sales) as cumulative_sales
from sales_table a
join sales_table b on a.date >= b.date
group by a.date
用于窗口查询的 SQL 方法
select
date,
sum(sales) over (order by date rows unbounded preceding) as cumulative_sales
from sales_table
【讨论】: