在Tableau中按日期标识下一个最接近的记录

时间:2018-10-30 16:11:10

标签: tableau

我有一个用户表和另一个交易表。

所有交易都有针对它们的日期。我要为每个用户确定的是两次交易之间的平均时间。

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]) }

我不确定用什么来代替该交易日期,或者不确定这是否是正确的方法。

任何建议将不胜感激。

3 个答案:

答案 0 :(得分:1)

LOD无法直接访问先前的值,因此您需要在数据连接中创建一个自我联接。请按照以下步骤实现您想要的。

  1. 使用以下条件使用数据创建自我联接

enter image description here

  1. 按如下所示创建LOD计算
  

{FIXED [用户],[交易日期]:           MIN(DATEDIFF('day',[交易日期],[交易日期(Data1)]))       }

enter image description here

  1. 构建视图

enter image description here

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中提到的步骤进行操作,即可计算出任意两个日期之间的差值。理想情况下,如果您在过滤器中选择任意一个值,则链接中的计算字段将为您提供交易日期列中的日期差。