ALL 函数

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

语法

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

参数

术语

定义

table

您要清除其筛选器的表。

column

您要清除其筛选器的列。

ALL 函数的参数必须或者是对某一基表的引用,或者是对某一基列的引用。 不能将表的表达式或列的表达式与 ALL 函数一起使用。

返回值

删除了筛选器的表或列。

注释

此函数不能由自身使用,而是作为可用于更改某个其他计算的执行结果集的临时函数。

<主题状态:> 本主题中的一些信息为预发布文档,在将来的版本中可能会有更改。预发布信息介绍 Microsoft SQL Server 2012 Service Pack 1 (SP1) 社区技术预览 4 (CTP4) 的新功能以及对现有功能的更改。 如果使用“标记为日期表”将 [Column] 标记为 Date 列

如下表所述,您可以在不同环境下使用 ALL 和 ALLEXCEPT 函数。

函数和用法

说明

ALL(Table)

从指定表中删除所有筛选器。 实际上,ALL(Table) 返回表中的所有值,并且删除上下文中可能已应用的任何筛选器。

在您使用具有很多级别的分组并且想要创建计算(该计算创建聚合值与总值的比率)时,该函数很有用。 第一个示例演示这一情况。

ALL (Column[, Column[, …]])

删除表中指定列的所有筛选器;表中针对其他列的所有其他筛选器仍应用。 所有列参数必须都来自同一个表。

在您想要删除一个或多个特定列的上下文筛选器并且要保留所有其他上下文筛选器时,此 ALL(Column) 变量很有用。

第二个和第三个示例演示这种情况。

ALLEXCEPT(Table, Column1 [,Column2]...)

删除表中所有上下文筛选器,但已应用于指定列的筛选器除外。

在您想要删除针对表中许多列(但不是所有列)的筛选器时,这是一个方便快捷的方法。

示例:计算类别销售额和总销售额的比率

说明

假定您要查找数据透视表中按所有分销商的总销售额划分的当前单元的销售额。 为了确保不管数据透视表用户是如何筛选数据或对数据进行分组的,分母都相同,可以定义使用 ALL 的公式来创建正确的总计。

下表显示在通过使用代码部分中所示的公式创建名为 All Reseller Sales Ratio 的新度量值时的结果。 为了阐释其工作方式,向该数据透视表的**“行标签”区域添加字段 CalendarYear,向该数据透视表的“列标签”区域添加字段 ProductCategoryName。 然后,将度量值 All Reseller Sales Ratio 拖到数据透视表的“值”**区域中。 若要将结果作为百分比查看,请使用 Excel 的格式设置功能将百分比数字格式应用于包含该度量值的单元格。

所有分销商销售额

列标签

 

 

 

 

行标签

Accessories

Bikes

Clothing

Components

总计

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. 分子 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] 之和。

有关创建度量值的详细信息,请参阅在数据透视表或数据透视图中创建度量值

注意注意

上面的示例中使用来自 DAX 示例工作簿的表 ResellerSales_USD、DateTime 和 ProductCategory。 有关示例的详细信息,请参阅获取示例数据

示例:计算当前年份产品销售额和总销售额的比率

说明

假定您要创建一个表,该表显示与每个产品类别 (ProductCategoryName) 在各年的销售额相比的销售额百分比。 为了获取每一年对 ProductCategoryName 的每个值的百分比,您需要将产品类别在该特定年份的销售额的总和除以同一产品类别在所有年份的销售额的总和。 换言之,您需要保持对 ProductCategoryName 的筛选器,但在计算百分比的分母时删除针对年份的筛选器。

下表显示在通过使用代码部分中所示的公式创建名为 Reseller Sales Year 的新度量值时的结果。 为了阐释其工作方式,向该数据透视表的**“行标签”区域添加字段 CalendarYear,向该数据透视表的“列标签”**区域添加字段 ProductCategoryName。 若要将结果作为百分比查看,请使用 Excel 的格式设置功能将百分比数字格式应用于包含度量值 Reseller Sales Year 的单元格。

年度分销商销售额

列标签

 

 

 

 

行标签

Accessories

Bikes

Clothing

Components

总计

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. 分子 SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD]) 是 ResellerSales_USD[SalesAmount_USD] 中针对数据透视表的当前单元格的值的总和,并且上下文筛选器应用于 CalendarYear 和 ProductCategoryName 列。

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

有关创建度量值的详细信息,请参阅在数据透视表或数据透视图中创建度量值

注意注意

此示例使用来自 DAX 示例工作簿的表 ResellerSales_USD、DateTime 和 ProductCategory。 有关示例的详细信息,请参阅获取示例数据

示例:按年份计算产品类别占总销售额的比率

说明

假定您要创建一个表,该表按年显示每个产品类别的销售额的百分比。 为了获取每个产品类别在某个特定年度的百分比,您需要计算该特定产品类别 (ProductCategoryName) 在 n 年中的销售额的总和,然后将得出的值除以在 n 年所有产品类别的销售额的总和。 换言之,您需要保持针对年度的筛选器,但在计算百分比的分母时删除针对 ProductCategoryName 的筛选器。

下表显示在通过使用代码部分中所示的公式创建名为 Reseller Sales CategoryName 的新度量值时的结果。 为了阐释其工作方式,向该数据透视表的**“行标签”区域添加字段 CalendarYear,向该数据透视表的“列标签”区域添加字段 ProductCategoryName。 然后向该数据透视表的“值”**区域添加新度量值。 若要将结果作为百分比查看,请使用 Excel 的格式设置功能将百分比数字格式应用于包含新度量值 Reseller Sales CategoryName 的单元格。

分销商销售额 CategoryName

列标签

 

 

 

 

行标签

Accessories

Bikes

Clothing

Components

总计

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. 分子 SUMX(ResellerSales_USD, ResellerSales_USD[SalesAmount_USD]) 是 ResellerSales_USD[SalesAmount_USD] 中针对数据透视表的当前单元格的值的总和,并且上下文筛选器应用于字段 CalendarYear 和 ProductCategoryName。

  2. 对于分母,您在从行标签应用现有上下文筛选器后,通过使用 All(Column) 函数删除针对 ProductCategoryName 的筛选器并且对 ResellerSales_USD 表上的剩余行计算总和。 上述操作的净效果是,对于分母,对所选 Year(隐含的上下文筛选器)和对于 ProductCategoryName 的所有值计算总和。

有关创建度量值的详细信息,请参阅在数据透视表或数据透视图中创建度量值

注意注意

此示例使用来自 DAX 示例工作簿的表 ResellerSales_USD、DateTime 和 ProductCategory。 有关示例的详细信息,请参阅获取示例数据

请参阅

参考

ALL 函数

ALLEXCEPT 函数

FILTER 函数

其他资源

筛选器函数 (DAX)