【问题标题】:Tableau - Filter based on parameterTableau - 根据参数筛选
【发布时间】:2016-10-07 16:25:32
【问题描述】:

我有一个日期数据集。它只有一列 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

我如何做到这一点?

【问题讨论】:

    标签: date filter parameters tableau-api


    【解决方案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 条件。

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

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

    【讨论】:

      【解决方案2】:

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

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

      Curley 大括号很重要,LOD 计算

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-20
        • 2017-08-06
        相关资源
        最近更新 更多