Tableau - 基于参数的过滤器

Tableau - Filter based on parameter

我有一个日期数据集。它只有一列 CreatedOnDate,其值在日期时间中,如下所示。

此数据集有 6 个月的值,如图所示。我有一个名为 Report Type 的参数,它有可能的值 Monthly、Weekly、Daily(下面的屏幕截图)

我创建了一个计算字段(称为创建日期),它根据所选的报告类型转换日期。公式如下所示

CASE [Report Type]
    WHEN "Monthly" THEN DATENAME('month', [CreatedOnDate])
    WHEN "Weekly" THEN "Week " + STR(DATEPART('week',[CreatedOnDate]))
    WHEN "Daily" THEN STR(MONTH([CreatedOnDate])) + "/" + STR(DAY([CreatedOnDate])) + "/" + STR(YEAR([CreatedOnDate]))
END

这非常有效。计算字段的结果如下图

我现在需要合并以下逻辑

IFF Report Type = "Daily" Display only the last 30 days in the dataset
Other cases Show all values

如何实现?

为您的条件创建一个计算字段,然后将其放在过滤器架上以仅包含计算结果为真的行。

[Report Date] <> "Daily" or 
datediff('day', [CreatedOnDate], { max[CreatedOnDate] } < 30

Curley 括号很重要,LOD 计算

woodhead92,我建议使用 Tableau v8 中引入的所谓 Level of Detail expressions。首先创建一个计算字段,用于计算最近的 (=MAX) 可用日期:

{FIXED : MAX(CreatedOnDate) }

我们称其为 MaxDate LOD。然后添加一个新的计算字段 Show/Hide:

IF [Report Type] = "Daily" AND 
  ([CreatedOnDate] >= DATEADD('day', -30, [MaxDate LOD]) THEN 'Show'
ELSEIF [Report Type] = "Weekly" OR [Report Type] = "Monthly" THEN 'Show'
ELSE 'Hide'
END

仅添加此过滤器和 select 'Show' 值。我假设您想查看 Weekly/Monthly 日期粒度为 selected 的所有日期 - 如果不是这种情况,只需添加更多 ELSEIF 条件。

上面的公式可以简化,但我想让它尽可能详细,以便帮助您了解详细级别表达式的工作原理。

请记住一件事 - FIXED LOD 计算会覆盖过滤器,因此如果您有可用的日期范围过滤器,则必须确保它是 添加到上下文this a bit out-dated, but still excellent blog post.

中提供了有关过滤器上下文的更多详细信息。