我们如何在 Tableau 中将过滤器(来自计算字段)设置为上下文过滤器

How to we make a filter(from a calculated field) a context filter in Tableau

我有一个名为 Booking_Size 的计算字段,其公式为:

IF RANK_PERCENTILE(SUM(BK_Total)) >= 0 AND RANK_PERCENTILE(SUM(BK_Total)) < .5 然后 'Small'

ELSEIF RANK_PERCENTILE(SUM([BK_Total])) >= .5 AND RANK_PERCENTILE(SUM([BK_Total)) < .7 然后 'Medium Small'

ELSEIF RANK_PERCENTILE(SUM([BK_Total])) >= .7 AND RANK_PERCENTILE(SUM([BK_Total])) < .9 然后 'Medium'

ELSEIF RANK_PERCENTILE(SUM([BK_Total])) >= .9 AND RANK_PERCENTILE(SUM([BK_Total)) < .95 然后 'Medium Large'

否则'Large' 结束

我想将其设为上下文过滤器,因为如果我在上述过滤器之上使用任何其他过滤器,则上述过滤器(Booking_Size 过滤器)中的 RANK PERCENTILE 函数正在重新计算已过滤的 table.

您不能将 table 计算过滤器设置为上下文过滤器。

上下文过滤器在数据源(又名数据库服务器)的操作管道中很早就被评估。 Table 计算是由 Tableau(又名客户端)在操作管道中很晚才计算的。

所以你问为什么不能将在一台计算机上发生较晚的事情设置为在另一台计算机上发生较早。原因是table计算函数和rank_percentile一样,是由Tableau自己根据数据库或数据源返回的聚合查询结果实现的。

如果您想在管道的早期推送该功能,则需要使用原始数据源提供的功能。因此,如果您的数据库支持 rank_percentile 等功能,您可以将它们放入基础查询中,比如使用自定义 sql,或者通过 SQL 调用,或者通过在数据库中定义视图。

顺便说一句,您的计算字段不必要地重复比较测试

如果您将名为 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