如何在 tableau 中聚合 table 计算

How to aggregate table calculation in tableau

这是我的作业本

在该工作簿上,我计算了每个用户的每笔交易之间的时间差。我首先构建的是过滤器 PUL 与此计算

{Fixed [User Id]: sum(
if [Created At]<=[END_DATE] then 1 else 0 end)}>=2
AND
{FIXED [User Id]: sum(
IF [Created At]<=[END_DATE] AND 
[Created At] >= [START_DATE] THEN 1 ELSE 0 END)}>=1

这个公式是找出符合条件的用户(在end_date参数前至少做2笔交易,在start_date参数和end_date参数之间至少做1笔交易参数)之后,我将此过滤器添加到上下文中以首先找出用户。

我用这个计算date_range制作了过滤器

lookup(min(([Created At])),0) >= [START_DATE] and 
lookup(min(([Created At])),0) <= [END_DATE]

因此它将仅可视化范围内的交易(start_date 作为第一个范围,end_date 作为最后一个范围)并且还会可视化第一个范围之前的最后日期交易(如果有的话)。

之后我进行了名为 datediff 的计算 DATEDIFF('day',LOOKUP(MIN([Created At]),-1), MIN([Created At])) 并将其贴在标签上,这样它就会计算出不同的日期。而且我把日期放在细节里,把日期也放在行里,让它成为 ATTR。

我的问题是,如何从这个计算中找出最大值、最小值、中值和平均值

我尝试计算最大值

MAX({FIXED [User Id]:DATEDIFF('day',INT(LOOKUP(MIN([Created At]),-1)), INT(MIN([Created At])))})

但是return错误datediff being called with string,integer,integer

对于 Max 和 Min,您可以像我为您提供上一个问题的解决方案一样继续。 (对于 max,创建排名计算并按降序排序,对于 Min,您创建第二个排名计算,按升序排序)。

然而,据我对 tableau 中 table 计算的了解,Tableau 不允许 硬编码 这些 table 计算字段,因此您不能-

  • 进一步汇总这些结果
  • 对这些执行 LOD 计算。

为了计算平均值中值,建议您创建一个硬编码的column/field 它可以让您了解任何订单与该客户之前订单的时差。您可以使用您选择的任何编程语言来完成此操作,例如 R 或 python(或其他)。

此外,Tableau 与 R/python 的集成是通过 script-real 类型的函数实现的,这些函数同样属于 table calculation 类别,并且将适用以上限制。

祝你好运。

EDIT 正如 Alex Blakemore 在另一个 question/answer 上所建议的那样,您可以稍微调整一下使用 window 函数。假设您的 datediff 计算字段名称是 [CF],然后使用以下计算创建四个计算字段。

window_max([CF])

window_min([CF])

window_avg([CF])

window_median([CF])

并将它们分别命名为[CF max][CF Min][CF avg][CF Median]

现在编辑table计算,每四个嵌套,如下-

  • 单击嵌套计算向下箭头。 CF 将在那里列出。将其计算更改为 specific dimensions,级别 deepest,并在 evrey user id 重新开始。截图是

  • 然后再次单击嵌套计算向下箭头。 select CF_max/min/med/avg(视情况而定)并创建 table 计算 table。

您会看到这样的视图。