Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tableau api 表计算日期差_Tableau Api - Fatal编程技术网

Tableau api 表计算日期差

Tableau api 表计算日期差,tableau-api,Tableau Api,我正在处理一些销售数据,每个交易都有多个阶段。比如说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

我正在处理一些销售数据,每个交易都有多个阶段。比如说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 
然后,我将能够分析每个阶段花费的时间,并查看直方图或分布。然而,我唯一能找到的就是函数

有人能告诉我如何在Tableau中实现这一点吗

包括
NOW()
函数

DATEDIFF('day', updated_date, NOW())

您可以尝试使用
LOOKUP()
使用分区上一行中的日期计算持续时间:

DATEDIFF('day', LOOKUP(ATTR([Updated Date]), -1), ATTR([Updated Date]))
然后,要获取“AB”标签,请再次使用
LOOKUP()
从上一行获取:

LOOKUP(ATTR([stage]), -1) + ATTR([stage])
要制作包含字段的直方图,您可以将
[stage]
拖动到列中,然后再拖动
[stage label]
(或者您选择称为我们制作的第二个计算字段的任何内容)。将
[duration]
(我们创建的第一个字段)拖到行中。然后右键单击图表中的“A”,然后单击“隐藏”。隐藏它而不是过滤掉它是很重要的,因为它仍然需要在分区中才能让表计算工作!然后右键单击列卡中的
[stage]
pill并取消选中“显示标题”

需要注意的是,如果数据中不存在阶段C(例如),那么柱状图中会出现一个“BD”,因此希望数据是原始的

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


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

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

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

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

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


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

如果您使用的是日期而不是日期时间,那么为了简单起见,您可能应该使用今天()函数而不是现在()函数。是否有任何方法可以使用datediff(不管怎样,date where Stage=X,date where Stage=Y)??我的意思是设定一个条件