知识库

在计算中包括筛选器,而不将它们包括在“筛选器”卡上


发布时间: 30 Nov 2015
上次修改日期: 20 Jul 2023

问题

如何在未筛选整个视图的情况下筛选一个或多个字段。

环境

Tableau Desktop

答案

通过使用一个 IF/THEN 语句创建一个逻辑计算,以便仅为特定维度值返回度量。维度值可以硬编码,也可以使用参数或集动态定义。

下面的指引从工作簿中的工作表“Original”(原始)开始,该工作簿可从本文右侧窗格中下载。工作簿中还包括了用于创建工作表“Original”(原始)的指引,以及所有变化的演示。

变化 1:对维度值进行硬编码

  1. 选择“分析”>“创建计算字段”
  2. 在打开的“计算字段”对话框中,执行以下操作,然后单击“确定”:
    1. 命名此计算字段。在此示例中,计算字段名为“Sales Label (variation 1)”(销售额标签(变化 1))
    2. 在公式字段中,创建一个类似于如下的计算:

      IF DATEPART('year', [Order Date]) = 2019
      THEN [Sales]
      END

      如果“[Order Date]”(订单日期)位于 2019 年,上面的计算将返回度量“[Sales]”(销售额)。否则计算将返回 NULL。可以在“END”前添加“ELSE 0”以返回零而不是 NULL。

      可以使用其他条件,比如使用“[Order Date] = #1/1/2019#”以筛选到特定日期,或使用“[Segment] = "Consumer"”以筛选到特定文本值。重要的是要确保等号后面的值的数据类型与维度相同。
  3. 将“标签”上的“[Sales]”(销售额)替换为“[Sales Label (variation 1)]”(销售额标签(变化 1))
 

变化 2:使用参数

  1. 选择“分析”>“创建计算字段”
  2. 在打开的“计算字段”对话框中,执行以下操作,然后单击“确定”:
    1. 命名此计算字段。在此示例中,计算字段名为“Year of Order Date”(订单日期的年份)
    2. 在公式字段中,创建一个类似于如下的计算:

      DATEPART('year', [Order Date])

      步骤 1 和 2 创建一个字段,其中仅以整数值形式包含“[Order Date]”(订单日期)的年份日期部分。“[Year of Order Date]”(订单日期的年份)字段使创建参数变得更容易,但在其他情况下是不必要的
  3. 在数据窗格中,右键单击“[Year of Order Date]”(订单日期的年份)字段,并选择“创建”>“参数...”
  4. 在“创建参数”对话框中,执行以下操作,并单击“确定”
    1. 在“名称”文本框中,键入一个名称。在此示例中,我将该参数命名为“"Select a year”(选择年份)
    2. 在“属性”下的“数据类型”列表中,选择“整数”
    3. 在“允许的值”下,选择“列表”
    4. 在“显示格式”下拉列表中,选择“数字(自定义)”,将格式设置为 0 个小数位并取消选中“包括千位分隔符”
    • 从 Tableau Desktop 2020.1 开始,通过在“工作簿打开时”下拉列表中选择一个字体,参数可从数据源的字段中拉取列表值。
  5. 在数据窗格中右键单击“[Select a year]”(选择年份),并选择“显示参数控件”
  6. 使用类似于如下的计算创建一个名称类似于“Sales Label (variation 2)”(销售额标签(变化2))的计算字段:

    IF DATEPART('year', [Order Date]) = [Parameters].[Select a year]
    THEN [Sales]
    END

    注意: 当参数具有和数据源中的另一个字段相同的名称时,会自动添加语法“[Parameters].”。
  7. 将“标签”上的“[Sales]”(销售额)替换为“[Sales Label (variation 1)]”(销售额标签(变化 2))

变化 3:使用集控件

从 Tableau Desktop 2020.2 开始,可以显示集控件以允许最终用户更改集中的值。
  1. 选择“分析”>“创建计算字段”
  2. 在打开的“计算字段”对话框中,执行以下操作,然后单击“确定”:
    1. 命名此计算字段。在此示例中,计算字段名为“Year of Order Date”(订单日期的年份)
    2. 在公式字段中,创建一个类似于如下的计算:

      DATEPART('year', [Order Date])
  3. 右键单击“[Year of Order Date]”(订单日期的年份),并选择“转换为维度”

    步骤 1-3 创建一个维度,其中仅以整数值形式包含“[Order Date]”(订单日期)的年份日期部分。“[Year of Order Date]”(订单日期的年份)字段是创建一组年份所必需的,因为必须依据数据源中的字段来构建集。
  4. 在数据窗格中,右键单击“[Year of Order Date]”(订单日期的年份)字段,并选择“创建”>“集...”
  5. 为集指定一个名称,并单击“确定”。在此示例中,集名为“Select a year”(选择年份)
  6. 使用类似于如下的计算创建一个名称类似于“Sales Label (variation 3)”(销售额标签(变化 3))的计算字段:

    IF [Select a year]
    THEN [Sales]
    END

    如果“[Order Date]”(订单日期)位于用户选择年份中,上面的计算将返回度量“[Sales]”(销售额)。否则计算将返回 NULL。可以在“END”前添加“ELSE 0”来返回零,而不是 NULL。

    集是返回 TRUE 或 FALSE 的布尔值字段。因此集本身就是完整的条件。
  7. 将“标签”上的“[Sales]”(销售额)替换为“[Sales Label (variation 3)]”(销售额标签(变化 3))
  8. 在数据窗格中右键单击集“[[Select a year]]”(选择年份),并选中“显示集”

其他信息

参数与集

  • 参数只能包含单个值,而集控件允许选择多个值。
  • 参数可以包含任意值,而集始终绑定到数据源中的某个字段。尽管可以为这些字段值重新指定别名。
  • 参数可用于跨没有关系的数据源进行筛选。请参见使用参数跨多个数据源进行筛选。只有在数据源之间建立了关系时,集才能跨数据源进行筛选。请参见跨多个数据源筛选数据
  • 参数可在仪表板文本对象或标题中使用,而集(或使用集的计算字段)只能在工作表元素中使用,因为集是数据源的一部分。
  • 将新数据引入数据源时,集始终会更新。可以设置参数来引入新数据。请参见创建参数中的步骤 5


此解决方案可嵌套在其他计算内。例如,可以将它包括在详细级别 (LOD) 计算中,比如
{INCLUDE [Dimension]: SUM(IF [Dimension] = 'FilterValue' THEN [Non-Aggregated Measure] END)}


此文章是否已解决问题?