我有一个日期数据集。它只有一列 CreatedOnDate ,其值在datetime中,如下所示。
此数据集有6个月的值,如图所示。我有一个名为报告类型的参数,其中包含每月,每周,每日可能的值(下面的屏幕截图)
我创建了一个计算字段(称为创建日期),该字段根据所选的报告类型转换日期。公式如下所示
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
我如何实现这一目标?
答案 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计算