我正在处理一些销售数据,每个交易都有多个阶段。说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中实现这一目标?
答案 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.
您可能可以获得每个阶段所花费的时间,但如果您可以为其添加一列并包含在每个出口的数据中,则可能更容易管理。
正如我所提到的,这只是一种可能的结构。最佳表结构取决于您想要回答的问题。