ALLSELECTED 函数 (DAX)
从当前查询的列和行中删除上下文筛选器,同时保留所有其他上下文筛选器或显式筛选器。
ALLSELECTED 函数获取表示查询中所有行和列的上下文,同时保留显式筛选器以及行和列筛选器之外的上下文。 此函数可用于获取查询中的直观合计。
语法
ALLSELECTED([<tableName> | <columnName>])
参数
tableName
使用标准 DAX 语法的现有表的名称。 此参数不能是表达式。 此参数可选。columnName
使用标准 DAX 语法的现有列的名称,通常是完全限定的名称。 它不能是表达式。 此参数可选。
返回值
没有任何列和行筛选器的查询的上下文。
注释
此函数有一个参数或没有任何参数。 如果有一个参数,则此参数为 tableName 或 columnName。
此函数与 ALL() 不同,因为它显式保留在查询内设置的所有筛选器,并且它保留除行和列筛选器之外的所有上下文筛选器。
示例
以下示例说明如何使用 DAX 表达式在表报表中生成不同级别的直观合计。 在此报表中,两 (2) 个先前的筛选器已应用于 Reseller Sales 数据;一个应用于 Sales Territory Group = Europe,另一个应用于 Promotion Type = Volume Discount。 在应用筛选器之后,可以针对整个报表、所有年度和所有产品类别计算直观合计。 此外,为了便于说明,还会得出 All Reseller Sales 的总计,同时在报表中删除所有筛选器。 计算以下 DAX 表达式将得到一个表,其中具有使用直观合计生成表所需的全部信息。
define
measure 'Reseller Sales'[Reseller Sales Amount]=sum('Reseller Sales'[Sales Amount])
measure 'Reseller Sales'[Reseller Grand Total]=calculate(sum('Reseller Sales'[Sales Amount]), ALL('Reseller Sales'))
measure 'Reseller Sales'[Reseller Visual Total]=calculate(sum('Reseller Sales'[Sales Amount]), ALLSELECTED())
measure 'Reseller Sales'[Reseller Visual Total for All of Calendar Year]=calculate(sum('Reseller Sales'[Sales Amount]), ALLSELECTED('Date'[Calendar Year]))
measure 'Reseller Sales'[Reseller Visual Total for All of Product Category Name]=calculate(sum('Reseller Sales'[Sales Amount]), ALLSELECTED('Product Category'[Product Category Name]))
evaluate
CalculateTable(
//CT table expression
summarize(
//summarize table expression
crossjoin(distinct('Product Category'[Product Category Name]), distinct('Date'[Calendar Year]))
//First Group by expression
, 'Product Category'[Product Category Name]
//Second Group by expression
, 'Date'[Calendar Year]
//Summary expressions
, "Reseller Sales Amount", [Reseller Sales Amount]
, "Reseller Grand Total", [Reseller Grand Total]
, "Reseller Visual Total", [Reseller Visual Total]
, "Reseller Visual Total for All of Calendar Year", [Reseller Visual Total for All of Calendar Year]
, "Reseller Visual Total for All of Product Category Name", [Reseller Visual Total for All of Product Category Name]
)
//CT filters
, 'Sales Territory'[Sales Territory Group]="Europe", 'Promotion'[Promotion Type]="Volume Discount"
)
order by [Product Category Name], [Calendar Year]
在 SQL Server Management Studio 中针对 AdventureWorks DW Tabular Model 2012 执行上述表达式之后,您将获得以下结果:
[Product Category Name] |
[Calendar Year] |
[Reseller Sales Amount] |
[Reseller Grand Total] |
[Reseller Visual Total] |
[Reseller Visual Total for All of Calendar Year] |
[Reseller Visual Total for All of Product Category Name] |
---|---|---|---|---|---|---|
Accessories |
2000 |
80450596.9823 |
877006.7987 |
38786.018 |
||
Accessories |
2001 |
80450596.9823 |
877006.7987 |
38786.018 |
||
Accessories |
2002 |
625.7933 |
80450596.9823 |
877006.7987 |
38786.018 |
91495.3104 |
Accessories |
2003 |
26037.3132 |
80450596.9823 |
877006.7987 |
38786.018 |
572927.0136 |
Accessories |
2004 |
12122.9115 |
80450596.9823 |
877006.7987 |
38786.018 |
212584.4747 |
Accessories |
2005 |
80450596.9823 |
877006.7987 |
38786.018 |
||
Accessories |
2006 |
80450596.9823 |
877006.7987 |
38786.018 |
||
Bikes |
2000 |
80450596.9823 |
877006.7987 |
689287.7939 |
||
Bikes |
2001 |
80450596.9823 |
877006.7987 |
689287.7939 |
||
Bikes |
2002 |
73778.938 |
80450596.9823 |
877006.7987 |
689287.7939 |
91495.3104 |
Bikes |
2003 |
439771.4136 |
80450596.9823 |
877006.7987 |
689287.7939 |
572927.0136 |
Bikes |
2004 |
175737.4423 |
80450596.9823 |
877006.7987 |
689287.7939 |
212584.4747 |
Bikes |
2005 |
80450596.9823 |
877006.7987 |
689287.7939 |
||
Bikes |
2006 |
80450596.9823 |
877006.7987 |
689287.7939 |
||
Clothing |
2000 |
80450596.9823 |
877006.7987 |
95090.7757 |
||
Clothing |
2001 |
80450596.9823 |
877006.7987 |
95090.7757 |
||
Clothing |
2002 |
12132.4334 |
80450596.9823 |
877006.7987 |
95090.7757 |
91495.3104 |
Clothing |
2003 |
58234.2214 |
80450596.9823 |
877006.7987 |
95090.7757 |
572927.0136 |
Clothing |
2004 |
24724.1209 |
80450596.9823 |
877006.7987 |
95090.7757 |
212584.4747 |
Clothing |
2005 |
80450596.9823 |
877006.7987 |
95090.7757 |
||
Clothing |
2006 |
80450596.9823 |
877006.7987 |
95090.7757 |
||
Components |
2000 |
80450596.9823 |
877006.7987 |
53842.2111 |
||
Components |
2001 |
80450596.9823 |
877006.7987 |
53842.2111 |
||
Components |
2002 |
4958.1457 |
80450596.9823 |
877006.7987 |
53842.2111 |
91495.3104 |
Components |
2003 |
48884.0654 |
80450596.9823 |
877006.7987 |
53842.2111 |
572927.0136 |
Components |
2004 |
80450596.9823 |
877006.7987 |
53842.2111 |
212584.4747 |
|
Components |
2005 |
80450596.9823 |
877006.7987 |
53842.2111 |
||
Components |
2006 |
80450596.9823 |
877006.7987 |
53842.2111 |
报表中的列如下所示:
Reseller Sales Amount
本年度和产品类别的经销商销售额的实际值。 该值出现在报表中心的单元格中,位于年度和类别的交叉处。Reseller Visual Total for All of Calendar Year
某产品类别跨所有年度的总价值。 此值出现在给定产品类别的某列或行的末尾,在报表中跨所有年度。Reseller Visual Total for All of Product Category Name
某一年度所有产品类别的总价值。 此值出现在给定年度的某列或行的末尾,并在报表中跨所有产品类别。Reseller Visual Total
所有年度和所有产品类别的总价值。 此值通常出现在表的最右下角处。Reseller Grand Total
这是在应用任何筛选器之前所有经销商销售额的总计;您应注意到与 [Reseller Visual Total] 之间的差别。 务必记住,此报表包含两 (2) 个筛选器,一个应用于 Product Category Group,另一个应用于 Promotion Type。
以下示例显示 ALLSELECTED() 没有参数时的用法,以说明如何计算已通过使用水平切片器和垂直切片器筛选的表中显示的总计值的比率。 此示例使用 SQL Server 2012、PowerPivot for Excel 和 PowerPivot 示例数据 (DAX_AdventureWorks)。
在 PowerPivot 字段列表中,将列 ResellerSales[SalesAmount_USD] 拖到**“值”**区域。
将 Promotion[PromotionType] 拖到**“垂直切片器”**区域。 为 Discontinued Product、Excess Inventory 和 Seasonal Discount 选择切片器。
将 SalesTerritory[SalesTerritoryGroup] 拖到**“水平切片器”**区域。 为 Europe 选择切片器。
Sum Of SalesAmount_USD 的值应为 $19,614.37
将 ProductCategory[ProductCategoryName] 拖到 Row Labels 区域,并将 DateTime[CalendarYear] 拖到 Column Labels 区域。
此表应如下所示:
SalesTerritoryGroup
Europe
North America
Pacific
NA
PromotionType
Discontinued Product
Sum of SalesAmount_USD
Column Labels
Excess Inventory
Row Labels
2006
2007
2008
Grand Total
New Product
Accessories
$1,111.22
$3,414.43
$4,525.66
No Discount
Bikes
$8,834.94
$6,253.78
$15,088.72
Seasonal Discount
总计
$9,946.16
$3,414.43
$6,253.78
$19,614.37
Volume Discount
使用手持计算器,验证金额 $3,414.43(2007 年的 Accessories)等于 $19,614.37 的 17.41%。
使用手持计算器,验证金额 $6,253.78(2008 年的 Bikes)等于 $19,614.37 的 31.88%。
使用手持计算器,验证金额 $15,088.72(对于 Bikes Grand Total)等于 $19,614.37 的 76.93%。
从**“值”**区域中删除 ResellerSales[SalesAmount_USD]。
使用以下公式,在 ResellerSales 表中创建名为 Reseller Sales Ratio 的度量值(将结果格式化为百分比):
=SUM(ResellerSales_USD[SalesAmount_USD])/ CALCULATE(SUM(ResellerSales_USD[SalesAmount_USD]), ALLSELECTED())
此表应如下所示:
SalesTerritoryGroup |
||||||
Europe |
North America |
|||||
Pacific |
NA |
|||||
PromotionType |
||||||
Discontinued Product |
Reseller Sales Ratio |
Column Labels |
||||
Excess Inventory |
Row Labels |
2006 |
2007 |
2008 |
Grand Total |
|
New Product |
Accessories |
5.67 % |
17.41 % |
23.07 % |
||
No Discount |
Bikes |
45.04 % |
31.88 % |
76.93 % |
||
Seasonal Discount |
总计 |
50.71 % |
17.41 % |
31.88 % |
100.00 % |
|
Volume Discount |
将您手持计算器的结果与 Reseller Sales Ratio 给出的结果进行比较,它们应该匹配;分母值固定为表底部的值。
因为分母中的 CALCULATE 公式使用 ALLSELECTED 函数,所以,分母表示表底部的销售额总计(在应用垂直、水平和页面切片器之后,但在应用行和列切片器之前)。
注意:如果您在表达式中具有显式筛选器,则这些筛选器也应用于表达式。