我正在处理一些销售数据,每个交易都有多个阶段.说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
Run Code Online (Sandbox Code Playgroud)
我想要的东西:
transaction_id stage time_spent
1 AB 1 day
1 BC 3 days
1 CD 1 day
Run Code Online (Sandbox Code Playgroud)
然后,我将能够分析在每个阶段花费的时间,并查看直方图或分布.但是,我唯一能找到的是dateiff函数.
谁能告诉我如何在Tableau中实现这一目标?
您可以尝试使用LOOKUP()分区上一行中的日期来计算持续时间:
DATEDIFF('day', LOOKUP(ATTR([Updated Date]), -1), ATTR([Updated Date]))
Run Code Online (Sandbox Code Playgroud)
然后要获得"AB"标签,请使用 LOOKUP()再次从上一行获取它:
LOOKUP(ATTR([stage]), -1) + ATTR([stage])
Run Code Online (Sandbox Code Playgroud)
要使用字段制作直方图,您可以拖动[stage]到列,然后拖动[stage label](或者您选择调用我们制作的第二个计算字段).将[duration](我们制作的第一个字段)拖动到Rows中.然后右键单击图表中的"A"并单击"隐藏".隐藏它而不是过滤它是很重要的,因为它仍然需要在你的分区中才能使表计算正常工作!然后右键单击[stage]Columns卡中的药丸并取消选中"Show Header".
重要的是要注意,如果你的数据中没有阶段C(例如),那么你的直方图中最终会得到一个"BD",所以这里希望你的数据是原始的.
警告 - 使用像lookup()这样的表计算的一个成本是它们只对聚合查询结果进行操作,这意味着必须从数据库中将所有数据行提取到Tableau客户端或服务器.因此,如果您有大量数据并且只想显示汇总结果(例如完成每个阶段的最小/平均/最大时间),则表格计算可能是获取这些汇总度量的一种昂贵且复杂的方法.
另一种方法是重塑数据并使用行级计算,聚合计算或LOD计算 - 所有这些都可以由源数据库执行.这通常也更容易管理.