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 结构取决于您要回答的问题。
我正在处理一些销售数据,每笔交易都有多个阶段。说阶段 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 结构取决于您要回答的问题。