Tableau 计算日期差异

Tableau Calculate Date Difference

我正在处理一些销售数据,每笔交易都有多个阶段。说阶段 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 中实现这一点?

包括 NOW() 函数

DATEDIFF('day', updated_date, NOW())

您可以尝试使用 LOOKUP() 使用分区前一行中的日期计算持续时间:

DATEDIFF('day', LOOKUP(ATTR([Updated Date]), -1), ATTR([Updated Date]))

然后要获取 "AB" 标签,请再次使用 LOOKUP() 从上一行中获取它:

LOOKUP(ATTR([stage]), -1) + ATTR([stage])

要制作带有字段的直方图,您可以将 [stage] 拖到列,然后拖到 [stage label](或者您选择调用我们创建的第二个计算字段的任何名称)。将 [duration](我们创建的第一个字段)拖到行中。然后右键单击图表中的 "A",然后单击 "Hide"。隐藏它而不是过滤掉它很重要,因为它仍然需要在您的分区中才能进行 table 计算!然后右键单击 Columns 卡中的 [stage] 药丸并取消选中 "Show Header".

重要的是要注意,如果 C 阶段(例如)不存在于您的数据中,那么您最终会在直方图中得到一个 "BD",所以希望您的数据是原始的。

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

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

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

这种方法有一个阶段的每个入口或出口的数据行。

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

等等

这意味着您必须谨慎执行数据质量。确保没有人在进入之前退出一个阶段,或者你没有不匹配的 enter/exits 对(除非交易当前仍在一个阶段并且已经进入但尚未退出)所以它可以自动记录的数据,手工输入的数据较少。

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

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

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