ALL
返回表中的所有行或列中的所有值,同时忽略可能已应用的任何筛选器。 此函数对于清除表中所有行的筛选器以及创建针对表中所有行的计算非常有用。
语法
ALL( [<table> | <column>[, <column>[, <column>[,…]]]] )
parameters
术语 | 定义 |
---|---|
表 | 要清除筛选器的表。 |
柱形图 | 要清除筛选器的列。 |
ALL 函数的参数必须是对基表的引用或对基列的引用。 不能将 ALL 函数与表表达式或列表达式一起使用。
返回值
已删除的带筛选器的表或列。
备注
此函数不单独使用,而是用作中间函数,可用于更改执行过其他计算的结果集。
包含 ALL() 函数的 DAX 表达式的正常行为是将忽略所应用的全部筛选器。 但在某些情况下,由于“自动存在”(auto-exist) 而不会忽略。“自动存在”是一种 DAX 技术,它可优化筛选,从而减少某些 DAX 查询所需的处理量。 “自动存在”和 ALL() 提供意料之外的结果的一个示例是,对同一张表的两列或更多列进行筛选(例如使用切片器时),而且该表上有一个度量值使用了 ALL()。 这样的话,“自动存在”会将多个筛选器合并成一个,且仅对值的现有组合进行筛选。 由于该合并,将针对值的现有组合计算度量值,且根据筛选后的值而非预期的所有值来得出结果。 要详细了解“自动存在”及其对计算的影响,请参阅 Microsoft MVP Alberto Ferrari 的 Understanding DAX Auto-Exist(了解 DAX 自动存在技术)文章 (sql.bi.com)。
下表描述了如何在不同场景中使用 ALL 和 ALLEXCEPT 函数。
函数和用法 说明 ALL() 删除所有筛选器。 ALL() 只能用于清除筛选器,不能返回表。 ALL(Table) 从指定表删除所有筛选器。 实际上,ALL(Table) 返回表中的所有值,同时删除上下文中可能已以其他方式应用了的任何筛选器。 如果要处理多个级别的分组,并且想要创建一个计算来创建聚合值与总值的比率,此函数则很有用。 第一个示例演示了这种情况。 ALL (Column[, Column[, …]]) 删除表中指定列的所有筛选器;表中针对其他列的所有其他筛选器仍会应用。 所有列参数必须来自同一个表。 如果想要删除一个或多个特定列的上下文筛选器并保留所有其他上下文筛选器,ALL(Column) 变体则很有用。 第二个和第三个示例演示了这种情况。 ALLEXCEPT(Table, Column1 [,Column2]...) 删除表中所有的上下文筛选器,应用于指定列的筛选器除外。 如果要删除表中多个(但不是所有)列的筛选器,这是一个快捷的方法。 在已计算的列或行级安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。
示例 1
计算类别销售额与总销售额的比率
假设你要查找数据透视表中当前单元格的销售额,将其除以所有经销商的总销售额。 为确保分母相同,无论数据透视表用户如何对数据进行筛选或分组,你都可以定义一个公式,该公式使用 ALL 来创建正确的总计。
下表显示了使用代码部分中所示公式创建新度量值(所有经销商销售额比率)时的结果。 若要查看其工作原理,请将字段 CalendarYear 添加到数据透视表的“行标签”区域,然后将字段 ProductCategoryName 添加到“列标签”区域 。 然后,将度量值“所有经销商销售额比率”拖到数据透视表的“值”区域 。 若要按百分比查看结果,使用 Excel 的格式设置功能将百分比数字格式应用于包含度量值的单元。
行标签 | Accessories | Bikes | 服装 | 部件 | 总计 |
---|---|---|---|---|---|
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])
公式构造如下:
分子
SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])
是 CalendarYear 和 ProductCategoryName 上应用了上下文筛选器时,数据透视表的当前单元格中 ResellerSales_USD[SalesAmount_USD] 的值的总和。对于分母,首先指定表 ResellerSales_USD,然后使用 ALL 函数删除表上的所有上下文筛选器。
然后,使用 SUMX 函数对 ResellerSales_USD[SalesAmount_USD] 列中的值求和。 换句话说,你将获得所有经销商销售额的 ResellerSales_USD[SalesAmount_USD] 之和。
示例 2
计算截至本年份的产品销售额和总销售额的比率
假设你想要创建一个表,其中显示各个产品类别 (ProductCategoryName) 多年来的所占的销售额百分比。 若要获取相对每个 ProductCategoryName 值的各年份百分比,你需要将该特定年份和产品类别的销售额总和除以所有年份同一产品类别的销售总额。 换句话说,你需要在计算百分比的分母时,保留 ProductCategoryName 上的筛选器但删除年份上的筛选器。
下表显示了使用代码部分中所示公式创建新度量值(经销商销售年份)时的结果。 若要查看其工作原理,请将字段 CalendarYear 添加到数据透视表的“行标签”区域,然后将字段 ProductCategoryName 添加到“列标签”区域 。 若要按百分比查看结果,使用 Excel 的格式设置功能将百分比数字格式应用于包含度量值(经销商销售年份)的单元。
行标签 | Accessories | Bikes | 服装 | 部件 | 总计 |
---|---|---|---|---|---|
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]))
公式构造如下:
分子
SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])
是 CalendarYear 和 ProductCategoryName 上应用了列上下文筛选器时,数据透视表的当前单元格中 ResellerSales_USD[SalesAmount_USD] 的值的总和。对于分母,使用 ALL(Column) 函数删除 CalendarYear 上的现有筛选器。 这将在应用了列标签中的现有上下文筛选器后,计算 ResellerSales_USD 表上其余行的总和。 最终效果是,对于分母,总和是对所选 ProductCategoryName(隐含的上下文筛选器)和年份中的所有值进行求和。
示例 3
计算产品类别对每年总销售额的贡献
假设你要创建一个表,按年显示每个产品类别的销售额百分比。 若要获取特定年份中每个产品类别的百分比,你需要计算在年份 n 该特定产品类别 (ProductCategoryName) 的销售总额,然后将结果值除以年份 n 所有产品类别的销售额总和。 换句话说,你需要在计算百分比的分母时,保留年份上的筛选器但删除 ProductCategoryName 上的筛选器。
下表显示了使用代码部分中所示公式创建新度量值(经销商销售 CategoryName)时的结果。 若要查看其工作原理,请将字段 CalendarYear 添加到数据透视表的“行标签”区域,然后将字段 ProductCategoryName 添加到“列标签”区域 。 然后,将新度量值添加到数据透视表的“值”区域。 若要按百分比查看结果,使用 Excel 的格式设置功能将百分比数字格式应用于包含新度量值(经销商销售 CategoryName)的单元。
行标签 | Accessories | Bikes | 服装 | 部件 | 总计 |
---|---|---|---|---|---|
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]))
公式构造如下:
分子
SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD])
是字段 CalendarYear 和 ProductCategoryName 上应用了上下文筛选器时,数据透视表的当前单元格中 ResellerSales_USD[SalesAmount_USD] 的值的总和。对于分母,使用函数 ALL(Column) 删除 ProductCategoryName 上的筛选器,然后在应用了行标签中的现有上下文筛选器后计算 ResellerSales_USD 表中其余行的总和。 最终效果是,对于分母,总和是对所选年份(隐含的上下文筛选器)和 ProductCategoryName 中的所有值进行求和。