Tableau计算日期差异

时间:2015-09-18 20:36:59

标签: tableau

我正在处理一些销售数据,每个交易都有多个阶段。说A,B,C,D阶段...

在完美的世界中,每个交易都需要进入每个阶段,我想计算交易在每个阶段的差异。

假设数据可能如下所示:

transaction_id    stage    updated_date
1                 A        2015-01-01
1                 B        2015-01-02
1                 C        2015-01-05
1                 D        2015-01-06

我想要类似的东西:

transaction_id    stage    time_spent
1                 AB       1 day
1                 BC       3 days
1                 CD       1 day 

然后我将能够分析在每个阶段花费的时间并查看直方图或分布。但是,我唯一能找到的是函数datediff

有谁能告诉我如何在Tableau中实现这一目标?

2 个答案:

答案 0 :(得分:6)

您可以尝试使用$ionicPlatform.ready(function() {})使用分区上一行中的日期计算持续时间:

LOOKUP()

然后要获取“AB”标签,请再次使用DATEDIFF('day', LOOKUP(ATTR([Updated Date]), -1), ATTR([Updated Date])) 从上一行获取它:

LOOKUP()

要使用字段制作直方图,您可以将LOOKUP(ATTR([stage]), -1) + ATTR([stage]) 拖到列,然后拖动[stage](或者您选择调用我们制作的第二个计算字段)。将[stage label](我们制作的第一个字段)拖到行中。然后右键单击图表中的“A”并单击“隐藏”。隐藏它而不是过滤它是很重要的,因为它仍然需要在你的分区中才能使表计算正常工作!然后右键点击列卡中的[duration]药丸,取消选中“显示标题”。

重要的是要注意,如果您的数据中没有阶段C(例如),那么您的直方图中最终会出现“BD”,所以这里希望您的数据是原始的。

警告 - 使用像lookup()这样的表计算的一个成本是它们只对聚合查询结果进行操作,这意味着必须从数据库中将所有数据行提取到Tableau客户端或服务器。因此,如果您有大量数据并且只想显示完成每个阶段的汇总结果(例如最小/平均/最大时间),则表格计算可能是获取这些汇总度量的一种昂贵且复杂的方法。

另一种方法是重塑数据并使用行级计算,聚合计算或LOD计算 - 所有这些都可以由源数据库执行。这通常也更容易管理。

答案 1 :(得分:1)

以下是重塑数据的一种方法。还有其他选择。

此方法的每个入口或出口都有一个数据行。

transaction_id date        action   stage
1              2015-01-01  enter    A
1              2015-01-02  exit     A
1              2015-01-02  enter    B

这意味着您必须小心强制执行数据质量。确保在进入之前没有人退出舞台,或者您没有无与伦比的进入/退出对(除非交易当前仍在某个阶段并且已经进入但尚未退出)所以它对于自动记录的数据是好的,手动输入的数据则较少。

现在,您可以通过计算出口来计算通过舞台的交易数量,或者通过使用正在运行的总入口数来随时跟踪舞台中的# - 退出。没有假设交易总是遵循相同的路径,因此可能在C处被拒绝并返回到A.

您可能可以获得每个阶段所花费的时间,但如果您可以为其添加一列并包含在每个出口的数据中,则可能更容易管理。

正如我所提到的,这只是一种可能的结构。最佳表结构取决于您想要回答的问题。