代码之家  ›  专栏  ›  技术社区  ›  B.Mr.W.

Tableau计算日期差

  •  3
  • B.Mr.W.  · 技术社区  · 10 年前

    我正在处理一些销售数据,每个交易都有多个阶段。例如阶段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实现这一目标吗?

    3 回复  |  直到 10 年前
        1
  •  6
  •   Alex Blakemore    10 年前

    你可以尝试使用 LOOKUP() 要使用分区前一行中的日期计算持续时间,请执行以下操作:

    DATEDIFF('day', LOOKUP(ATTR([Updated Date]), -1), ATTR([Updated Date]))
    

    然后,要获得“AB”标签,请使用 查找() 再次从上一行获取:

    LOOKUP(ATTR([stage]), -1) + ATTR([stage])
    

    要使用字段制作直方图,可以拖动 [stage] 到列,然后是 [stage label] (或您选择调用我们创建的第二个计算字段)。拖曳 [duration] (我们制作的第一个字段)。然后右键单击图表中的“A”,然后单击“隐藏”。隐藏它而不是过滤掉它是很重要的,因为它仍然需要在分区中才能进行表计算!然后右键单击 [阶段] 在您的列卡片中填充并取消选中“显示标题”。

    需要注意的是,如果数据中没有阶段C(例如),那么你的直方图中会出现一个“BD”,所以这里希望你的数据是原始的。

    注意:使用lookup()之类的表计算的一个代价是它们只对聚合查询结果进行操作,这意味着所有有问题的数据行都必须从数据库中提取到Tableau客户端或服务器。因此,如果您有大量数据,并且只想显示总结结果,例如完成每个阶段所需的最小/平均/最大时间,那么表计算可能是获取这些总结度量值的一种昂贵且复杂的方法。

    另一种方法是重塑数据并使用行级计算、聚合计算或LOD计算——所有这些都可以由源数据库执行。这通常也更容易管理。

        2
  •  1
  •   Morpheus    10 年前

    包括 NOW() 作用

    DATEDIFF('day', updated_date, NOW())
    
        3
  •  1
  •   Alex Blakemore    10 年前

    这里有一种重塑数据的方法。还有其他选择。

    这种方法对于舞台的每个入口或出口都有一个数据行。

    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。

    您可能可以导出每个阶段所花费的时间,但如果您可以为此添加一列并将其包含在每个出口的数据中,则可能更容易管理。

    正如我提到的,这只是一种可能的结构。最好的表格结构取决于你想回答的问题。