适用于:计算列计算表度量值视觉计算

返回表中的所有行或列中的所有值,忽略可能已应用的任何筛选器。 此函数可用于清除筛选器并针对表中的所有行创建计算。

语法

ALL( [<table> | <column>[, <column>[, <column>[,…]]]] )  

参数

术语 定义
table 要清除筛选器的表。
column 要清除筛选器的列。

ALL 函数的参数必须是对基表的引用或对基列的引用。 不能对 ALL 函数使用表表达式或列表达式。

返回值

删除了筛选器的表或列。

言论

  • 此函数本身不使用,但用作中间函数,可用于更改执行其他一些计算的结果集。

  • 包含 ALL() 函数的 DAX 表达式的正常行为是,将忽略应用的任何筛选器。 但是,在某些情况下,由于 auto-exist,DAX 技术无法优化筛选,以减少某些 DAX 查询所需的处理量。 自动存在且 ALL()提供意外结果的示例是在筛选同一表的两列或更多列时(如使用切片器时),并且同一表上有一个使用 ALL()的度量值。 在这种情况下,自动存在将 合并 多个筛选器合并为一个筛选器,并且仅筛选现有值组合。 由于此合并,度量值将根据现有值组合进行计算,结果将基于筛选的值而不是所有值按预期计算。 若要详细了解自动存在及其对计算的影响,请参阅Microsoft MVP Alberto 法拉利的 了解 DAX 自动存在的 文章 sql.bi.com。

  • 下表介绍了如何在不同方案中使用 ALL 和 ALLEXCEPT 函数。

    函数和用法 描述
    ALL() 删除所有筛选器。 ALL() 只能用于清除筛选器,但不能返回表。
    ALL(表) 从指定表中删除所有筛选器。 实际上,ALL(Table)返回表中的所有值,从上下文中删除任何筛选器,否则可能已应用。 当你使用许多级别的分组时,此函数非常有用,并且想要创建一个计算,用于创建聚合值与总值的比率。 第一个示例演示了此方案。
    ALL (Column[, Column[, ...]]]) 从表中的指定列中删除所有筛选器;表中其他列的所有其他筛选器仍适用。 所有列参数都必须来自同一个表。 如果要删除一个或多个特定列的上下文筛选器并保留所有其他上下文筛选器,则 ALL(列)变体非常有用。 第二个和第三个示例演示了此方案。
    ALLEXCEPT(表, Column1 [,Column2]...) 删除表中的所有上下文筛选器,但应用于指定列的筛选器除外。 这是一种方便的快捷方式,用于在表中删除许多列(但不是全部)上的筛选器的情况。
  • 在计算列或行级别安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。

示例 1

计算类别销售额与总销售额的比率

假设你想要在数据透视表中查找当前单元格的销售量,除以所有经销商的总销售额。 为了确保分母是相同的,无论数据透视表用户如何筛选或分组数据,都可以定义一个公式,该公式使用 ALL 来创建正确的总计。

下表显示了使用代码部分中所示的公式创建新度量值(所有经销商销售比率)时的结果。 若要查看其工作原理,请将字段 CalendarYear 添加到数据透视表的 行标签 区域,并将字段 ProductCategoryName 添加到 列标签 区域。 然后,将度量值(“所有经销商销售比率”)拖到数据透视表的 区域。 若要将结果视为百分比,请使用 Excel 的格式设置功能将百分比数字格式应用于包含度量值的单元格。

行标签 辅料 自行车 服装 组件 总计
2005 0.02% 9.10% 0.04% 0.75% 9.91%
2006 0.11% 24.71% 0.60% 4.48% 29.90%
2007 0.36% 31.71% 1.07% 6.79% 39.93%
2008 0.20% 16.95% 0.48% 2.63% 20.26%
总计 0.70% 82.47% 2.18% 14.65% 100.00%

公式

= SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])/SUMX(ALL(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD])  

公式构造如下:

  1. numerator SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])是数据透视表中当前单元格的 ResellerSales_USD[SalesAmount_USD] 中的值之和,上下文筛选器应用于 CalendarYear 和 ProductCategoryName。

  2. 对于分母,首先指定表、ResellerSales_USD,并使用 ALL 函数删除表上的所有上下文筛选器。

  3. 然后使用 SUMX 函数对 ResellerSales_USD[SalesAmount_USD] 列中的值求和。 换句话说,你将获得所有经销商销售ResellerSales_USD[SalesAmount_USD]的总和。

示例 2

计算产品销售额与当前年度总销售额的比率

假设要创建一个表,其中显示了每个产品类别(ProductCategoryName)多年来相比的销售百分比。 若要获取 ProductCategoryName 每个值每年的百分比,需要将特定年份的销售和产品类别的总和除以所有年份内同一产品类别的销售总和。 换句话说,你想要保留 ProductCategoryName 上的筛选器,但在计算百分比分母时删除年份的筛选器。

下表显示了使用代码节中显示的公式创建新度量值(Reseller Sales Year)时的结果。 若要查看其工作原理,请将字段 CalendarYear 添加到数据透视表的 行标签 区域,并将字段 ProductCategoryName 添加到 列标签 区域。 若要将结果查看为百分比,请使用 Excel 的格式设置功能将百分比数字格式应用于包含度量值的单元格,Reseller Sales Year

行标签 辅料 自行车 服装 组件 总计
2005 3.48% 11.03% 1.91% 5.12% 9.91%
2006 16.21% 29.96% 27.29% 30.59% 29.90%
2007 51.62% 38.45% 48.86% 46.36% 39.93%
2008 28.69% 20.56% 21.95% 17.92% 20.26%
总计 100.00% 100.00% 100.00% 100.00% 100.00%

公式

= SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])/CALCULATE( SUM( ResellerSales_USD[SalesAmount_USD]), ALL(DateTime[CalendarYear]))  

公式构造如下:

  1. numerator SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])是数据透视表中当前单元格的 ResellerSales_USD[SalesAmount_USD] 中的值之和,其中上下文筛选器应用于 CalendarYear 和 ProductCategoryName 列。

  2. 对于分母,使用 ALL(Column) 函数删除 CalendarYear 上的现有筛选器。 这在从列标签应用现有上下文筛选器后,计算ResellerSales_USD表中剩余行的总和。 净效果是,对于分母,在所选 ProductCategoryName(隐含上下文筛选器)和 Year 中的所有值上计算总和。

示例 3

计算产品类别对每年总销售额的贡献

假设要创建一个表,以逐年显示每个产品类别的销售百分比。 若要获取特定年份中每个产品类别的百分比,需要在年份 n 中计算该特定产品类别(ProductCategoryName)的销售总和,然后将结果值除以所有产品类别的销售额之和。 换句话说,你想要按年份保留筛选器,但在计算百分比分母时删除 ProductCategoryName 上的筛选器。

下表显示了使用代码节中显示的公式创建新度量值(Reseller Sales CategoryName)时的结果。 若要查看其工作原理,请将字段 CalendarYear 添加到数据透视表的 行标签 区域,并将字段 ProductCategoryName 添加到 列标签 区域。 然后将新度量值添加到数据透视表的 区域。 若要将结果视为百分比,请使用 Excel 的格式设置功能将百分比数字格式应用于包含新度量值的单元格,Reseller Sales CategoryName

行标签 辅料 自行车 服装 组件 总计
2005 0.25% 91.76% 0.42% 7.57% 100.00%
2006 0.38% 82.64% 1.99% 14.99% 100.00%
2007 0.90% 79.42% 2.67% 17.01% 100.00%
2008 0.99% 83.69% 2.37% 12.96% 100.00%
总计 0.70% 82.47% 2.18% 14.65% 100.00%

公式

= SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])/CALCULATE( SUM( ResellerSales_USD[SalesAmount_USD]), ALL(ProductCategory[ProductCategoryName]))  

公式构造如下:

  1. numerator SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])是数据透视表中当前单元格的 ResellerSales_USD[SalesAmount_USD] 中的值的总和,其中上下文筛选器应用于字段、CalendarYear 和 ProductCategoryName。

  2. 对于分母,使用函数 ALL(Column)删除 ProductCategoryName 上的筛选器,并在从行标签应用现有上下文筛选器后计算ResellerSales_USD表中剩余行的总和。 净效果是,对于分母,总和根据所选年份(隐含上下文筛选器)和 ProductCategoryName 的所有值计算。

筛选器函数
ALL 函数
ALLEXCEPT 函数
FILTER 函数