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 函数,所以,分母表示表底部的销售额总计(在应用垂直、水平和页面切片器之后,但在应用行和列切片器之前)。

    注意:如果您在表达式中具有显式筛选器,则这些筛选器也应用于表达式。