我有一个用户表和另一个交易表。
所有交易都有针对它们的日期。我要为每个用户确定的是两次交易之间的平均时间。
User | Transaction Date
-----+-----------------
A | 2001-01-01
A | 2001-01-10
A | 2001-01-12
请考虑为用户A进行上述交易。我基本上是在按时间顺序寻找从一笔交易到下一笔交易的距离,以确定距离。
交易1和交易2之间有9天;交易3和交易4之间有2天的时间。这些平均值显然是4.5天,因此我想确定用户A两次交易之间的平均时间为4.5天。
关于如何在Tableau中实现此目标的任何想法?
我正在尝试为每笔交易创建一个计算字段,以识别“下一笔”交易的日期,但是我正在努力。
{ FIXED [user id] : MIN(IF [Transaction Date] > **this transaction date** THEN [Transaction Date]) }
我不确定用什么来代替该交易日期,或者不确定这是否是正确的方法。
任何建议将不胜感激。
答案 0 :(得分:1)
LOD无法直接访问先前的值,因此您需要在数据连接中创建一个自我联接。请按照以下步骤实现您想要的。
{FIXED [用户],[交易日期]: MIN(DATEDIFF('day',[交易日期],[交易日期(Data1)])) }
PS:如果要提高性能,可以使用自定义SQL。
答案 1 :(得分:0)
唯一可以考虑顺序的计算类型(例如,当计算字段的值取决于前一行的值时)是表calc。您不能将LOD calc用于此类问题。
您需要了解如何对表calcs进行分区和寻址,并指定排序顺序条件。请参阅在线帮助。然后,您可以执行类似的操作,例如将 days_since_last_transaction 定义为:
if first() > 0 then min([Transaction Date]) -
lookup(min([Transaction Date]), -1) end
如果您有非常大的数据或出于其他原因想要在数据库而不是通过Table calc在Tableau中进行计算,则可以使用SQL窗口查询(也称为分析),而不是通过Tableau的自定义SQL。
答案 2 :(得分:-1)
请附上示例工作簿以及您尝试过的所有内容以及出现的错误。
如果您无法将“用户ID字段”设置为过滤器,这可能没有用。
因此,您可以设置
用户ID
作为过滤器。然后按照here中提到的步骤进行操作,即可计算出任意两个日期之间的差值。理想情况下,如果您在过滤器中选择任意一个值,则链接中的计算字段将为您提供交易日期列中的日期差。