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.
中提供了有关过滤器上下文的更多详细信息。
我有一个日期数据集。它只有一列 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.
中提供了有关过滤器上下文的更多详细信息。