我有一个名为Booking_Size的计算字段,公式为:
IF RANK_PERCENTILE(SUM(BK_Total))> = 0 AND RANK_PERCENTILE(SUM(BK_Total))< .5然后'小'
ELSEIF RANK_PERCENTILE(SUM([BK_Total]))> = .5 AND RANK_PERCENTILE(SUM([BK_Total))< .7然后'中等小'
ELSEIF RANK_PERCENTILE(SUM([BK_Total]))> =。7 AND RANK_PERCENTILE(SUM([BK_Total]))< .9然后'中等'
ELSEIF RANK_PERCENTILE(SUM([BK_Total]))> =。9 AND RANK_PERCENTILE(SUM([BK_Total))< .95然后'中等大'
ELSE'大' END
我想让它成为一个上下文过滤器,因为如果我在上面的过滤器上使用任何其他过滤器,上面的过滤器(Booking_Size过滤器)中的RANK PERCENTILE函数将重新计算已经过滤的表。
答案 0 :(得分:1)
您无法将表计算过滤器转换为上下文过滤器。
在数据源(也称为数据库服务器)的操作管道中很早就评估了上下文过滤器。表计算在Tableau(aka客户端)的操作管道中很晚才计算出来。
所以你问为什么在一台计算机上发生的事情可能会在不同的计算机上提前发生。原因是表计算函数(如rank_percentile)由Tableau本身实现,它们对数据库或数据源返回的聚合查询结果起作用。
如果要在管道的早期推送该功能,则需要使用原始数据源提供的功能。因此,如果您的数据库支持rank_percentile等功能,您可以将它们放入基础查询中,例如使用自定义sql,或者通过SQL调用,或者通过在数据库中定义视图。
BTW,您的计算字段不必要地重复比较测试如果您将名为 rk 的计算字段定义为RANK_PERCENTILE(SUM(BK_Total))
然后可以更有效地定义您的字段,如下所示,因为每个测试都可以假设先前的测试失败。
if rk < .5 then
'Small'
elseif rk < .7 then
'Medium Small'
elseif rk < .9 then
'Medium'
elseif rk < .95 then
'Medium Large'
else
'Large'
end