Tableau - 基于参数的过滤器

时间:2016-10-06 20:36:10

标签: date filter parameters tableau

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

enter image description here

此数据集有6个月的值,如图所示。我有一个名为报告类型的参数,其中包含每月,每周,每日可能的值(下面的屏幕截图)

enter image description here

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

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

这完美无缺。计算字段的结果如下所示。

enter image description here

我现在需要加入以下逻辑

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

我如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

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

{FIXED : MAX(CreatedOnDate) }

我们称之为 MaxDate LOD 。然后添加新的计算字段显示/隐藏

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

添加此过滤器并仅选择“显示”值。我假设您希望查看选择每周/每月日期粒度的所有日期 - 如果不是这样,只需添加更多 ELSEIF 条件。

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

要注意的一件事 - FIXED LOD计算会覆盖过滤器,因此如果您有可用的日期范围过滤器,则必须确保将添加到上下文。有关过滤器上下文的更多详细信息,请参见this a bit out-dated, but still excellent blog post

答案 1 :(得分:0)

为您的条件创建一个计算字段,然后将其放在过滤器架上,只包含评估为true的行。

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

Curley括号很重要,LOD计算