使用 Microsoft 登录
登录或创建帐户。
你好,
使用其他帐户。
你有多个帐户
选择要登录的帐户。

本部分介绍如何使用 DAX 公式在数据分析表达式 () 筛选器。 可以在公式内创建筛选器,以限制计算中使用的源数据中的值。 为此,请指定表作为公式的输入,然后定义筛选器表达式。 提供的筛选器表达式用于查询数据并仅返回源数据的子集。 每次更新公式的结果时,将动态应用筛选器,具体取决于数据的当前上下文。

本文内容

在公式中使用的表上创建筛选器

可以在采用表格作为输入的公式中应用筛选器。 可以使用 FILTER 函数定义指定表中的行子集,而不是输入表名称。 然后,该子集将传递到另一个函数,用于自定义聚合等操作。

例如,假设你有一个数据表,其中包含有关经销商的订单信息,并且你想要计算每个经销商的销量。 但是,只希望为销售多单位高价值产品的经销商显示销售额。 以下公式基于 DAX 示例工作簿,显示了如何使用筛选器创建此计算的一个示例:

=SUMX (
     FILTER ('ResellerSales_USD','ResellerSales_USD'[数量] > 5 &&
     "ResellerSales_USD'[ProductStandardCost_USD] > 100) ,
     'ResellerSales_USD'[SalesAmt]
     )

  • 公式的第一部分指定一个 Power Pivot 聚合函数,该函数采用表作为参数。 SUMX 计算表的总和。

  • 公式的第二部分, FILTER(table, expression),告知 SUMX 要使用哪些数据。 SUMX 需要一个表或一个结果为表的表达式。 此处,不使用表中的所有数据,而是使用 FILTER 函数指定使用表中的哪一行。

    筛选器表达式包含两个部分:第一部分为应用筛选器的表命名。 第二部分定义要用作筛选条件的表达式。 在这种情况下,你将筛选销售超过 5 个单位的经销商以及价格超过 $100 的产品。 运算符( &&)是逻辑 AND 运算符,指示条件两个部分都必须为 true,行必须属于筛选的子集。

  • 公式的第三部分告知 SUMX 函数应该对哪些值求和。 在这种情况下,你只需使用销售额。

    请注意,函数 FILTER(返回表)永远不会直接返回表或行,但始终嵌入到另一个函数中。 有关 FILTER 和其他用于筛选的函数(包括更多示例)详细信息,请参阅筛选函数 (DAX) 。

    注意: 筛选器表达式受其使用的上下文影响。 例如,如果在度量值中使用筛选器,并且度量值在数据透视表或 数据透视图 中使用,则返回的数据子集可能受用户在数据透视表中应用的其他筛选器或切片器的影响。 有关上下文详细信息,请参阅 DAX 公式中的上下文

用于删除重复项的筛选器

除了筛选特定值之外,还可以返回另一个表或列中的唯一值集。 当你想要计算列中的唯一值数,或者将唯一值列表用于其他操作时,这非常有用。 DAX 提供两个函数用于返回非重复值 :DISTINCT 函数和VALUES 函数

  • DISTINCT 函数检查指定为函数参数的单个列,并返回仅包含非重复值的新列。

  • VALUES 函数还返回唯一值的列表,但也返回 Unknown 成员。 使用由关系联接的两个表中的值时,这非常有用,一个表中缺少一个值,另一个表中存在一个值。 有关未知成员的信息,请参阅 DAX 公式中的上下文

这两个函数返回整列值;因此,使用 函数获取随后传递到另一个函数的值列表。 例如,可以使用以下公式通过唯一的产品密钥获取特定经销商所销售不同产品的列表,然后使用 COUNTROWS 函数对该列表中的产品进行计数:

=COUNTROWS (DISTINCT ('ResellerSales_USD'[ProductKey]) )

返回页首

上下文如何影响筛选器

将 DAX 公式添加到数据透视表或数据透视图时,该公式的结果可能会受上下文的影响。 如果正在处理数据 Power Pivot ,则上下文是当前行及其值。 如果在数据透视表或数据透视数据透视图,则上下文是指通过切片或筛选等操作定义的数据集或数据子集。 数据透视表或数据透视图也施加其自己的上下文。 例如,如果创建按地区和年份对销售额进行分组的数据透视表,则数据透视表中只显示适用于这些地区和年份的数据。 因此,添加到数据透视表的任何度量值均在列标题和行标题以及度量值公式中任何筛选器的上下文中计算。

有关详细信息,请参阅 DAX 公式中的上下文

返回页首

删除筛选器

使用复杂公式时,您可能希望确切知道当前筛选器是什么,或者您可能希望修改公式的筛选器部分。 DAX 提供了多个函数,用于删除筛选器,以及控制当前筛选器上下文中保留的列。 本部分概述这些函数如何影响公式中的结果。

使用 ALL 函数替代所有筛选器

可以使用 ALL 函数替代以前应用的任何筛选器,将表中的所有行返回到执行聚合或其他操作的函数。 如果使用一列或多列而不是表作为 ALL参数, ALL 函数将返回所有行,忽略任何上下文筛选器。

注意: 如果熟悉关系数据库术语,可以将 ALL 视为生成所有表的自然外部联接左键。

例如,假设你拥有表"销售额"和"产品",并且想要创建一个公式,该公式将计算当前产品的销售额总和除以所有产品的销售额。 必须考虑以下事实:如果公式用于度量值,数据透视表的用户可能正在使用切片器筛选特定产品,行上包含产品名称。 因此,若要获取分母的真实值,而不考虑任何筛选器或切片器,必须添加 ALL 函数来替代任何筛选器。 下面的公式是如何使用 ALL 替代以前筛选器的效果的一个示例:

=SUM (Sales[Amount]) /SUMX (Sales[Amount], FILTER (Sales, all (Products) ) )

  • 公式的第一部分 SUM (Sales[Amount]) 计算分子。

  • 求和会考虑当前上下文,这意味着,如果将公式添加到计算列中,则应用行上下文;如果将公式作为度量值添加到数据透视表中,则应用在数据透视表中应用的任何筛选器 (筛选上下文) 。

  • 公式的第二部分计算分母。 ALL 函数将替代可能应用于表 Products 筛选器。

有关详细信息(包括详细示例,请参阅 ALL 函数)。

使用 ALLEXCEPT 函数重写特定筛选器

ALLEXCEPT 函数还替代现有筛选器,但可以指定应保留某些现有筛选器。 指定为 ALLEXCEPT 函数的参数的列指定将继续筛选的列。 如果要替代大多数列而非所有列中的筛选器,则 ALLEXCEPT 比 ALL 更方便。 创建数据透视表时,ALLEXCEPT 函数特别有用,因为数据透视表可能筛选了许多不同的列,并且您想要控制公式中使用的值。 有关详细信息,包括如何在数据透视表中使用 ALLEXCEPT 的详细示例,请参阅 ALLEXCEPT 函数

返回页首

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?
按“提交”即表示你的反馈将用于改进 Microsoft 产品和服务。 你的 IT 管理员将能够收集此数据。 隐私声明。

谢谢您的反馈!

×