Função ALLSELECTED (DAX)
Remove filtros de contexto de colunas e linhas na consulta atual, mantendo todo os outros filtros de contexto ou filtros explícitos.
A função ALLSELECTED obtém o contexto que representa todas as linhas e colunas na consulta, mantendo filtros explícitos e contextos que não sejam de filtros de linhas e de colunas. Esta função pode ser usada para obter totais visuais em consultas.
Sintaxe
ALLSELECTED([<tableName> | <columnName>])
Parâmetros
tableName
O nome de uma tabela existente, usando a sintaxe DAX padrão. Este parâmetro não pode ser uma expressão. Esse parâmetro é opcional.columnName
O nome de uma coluna existente que usa a sintaxe DAX padrão, em geral totalmente qualificado. Ele não pode ser uma expressão. Esse parâmetro é opcional.
Valor de retorno
O contexto da consulta sem filtros de coluna e de linha.
Comentários
Essa função utiliza um ou nenhum argumento. Se existir um argumento, ele será tableName ou columnName.
Esta função é diferente de ALL() porque retém todos os filtros definidos dentro da consulta explicitamente, e retém todos os filtros de contexto que não sejam filtros de linhas e de colunas.
Exemplo
O exemplo a seguir mostra como gerar níveis diferentes de totais visuais em um relatório de tabela usando expressões DAX. No relatório, dois (2) filtros anteriores foram aplicados aos dados de Vendas do Revendedor; um em Grupo de Região de Vendas = Europa e outro em Tipo de Promoção = Desconto por Volume. Após a aplicação dos filtros, totais visuais podem ser calculados para todo o relatório, para Todos os Anos ou para Todas as Categorias de Produtos. Além disso, para fins de demonstração, o total geral de Todas as Vendas do Revendedor é obtido também, removendo todos os filtros no relatório. A avaliação da expressão DAX a seguir resulta em uma tabela com todas as informações necessárias para criar uma tabela com Totais Visuais.
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]
Depois de executar a expressão acima no SQL Server Management Studio no Modelo de Tabela AdventureWorks DW 2012, você obtém os seguintes resultados:
[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 |
As colunas no relatório são:
Reseller Sales Amount
O valor real de Vendas do Revendedor para o ano e a categoria de produto. Esse valor aparece em uma célula no centro do relatório na interseção do ano e da categoria.Reseller Visual Total for All of Calendar Year
O valor total de uma categoria de produto em todos os anos. Esse valor aparece no fim de uma coluna ou linha de uma determinada categoria de produto e em todos os anos no relatório.Reseller Visual Total for All of Product Category Name
O valor total de um ano em todas as categorias de produto. Esse valor aparece no fim de uma coluna ou linha de um determinado ano e em todas as categorias de produto no relatório.Reseller Visual Total
O valor total de todos os anos e categorias de produto. Esse valor geralmente aparece no canto inferior direito da tabela.Reseller Grand Total
Esse é o total geral de todas as vendas do revendedor, antes da aplicação de qualquer filtro; você deve observar a diferença com [Reseller Visual Total]. Você se lembra de que esse relatório inclui dois (2) filtros, um no Grupo de Categorias de Produto e o outro em Tipo de Promoção.
O exemplo a seguir mostra o uso de ALLSELECTED() sem argumentos para mostrar como calcular uma taxa sobre o valor total mostrado em uma tabela que foi filtrada usando segmentações de dados horizontais e verticais. Este exemplo usa o SQL Server 2012, o PowerPivot para Excel e dados de exemplo PowerPivot (DAX_AdventureWorks).
Na lista de campos do PowerPivot, arraste a coluna, ResellerSales [SalesAmount_USD], até a área Valores.
Arraste Promotion[PromotionType] até a área Segmentações de Dados Verticais. Selecione as segmentações de dados para Discontinued Product, Excess Inventory e Seasonal Discount.
Arraste SalesTerritory[SalesTerritoryGroup] até a área Segmentações de Dados Horizontais. Selecione a segmentação de dados para Europe.
O valor de Sum Of SalesAmount_USD deve ser $19.614,37
Arraste ProductCategory[ProductCategoryName] até a área Rótulos de Linha e DateTime[CalendarYear] até a área Rótulos de Coluna.
Sua tabela deve ter a seguinte aparência:
SalesTerritoryGroup
Europa
North America
Pacific
NA
PromotionType
Discontinued Product
Sum of SalesAmount_USD
Rótulos de Coluna
Excess Inventory
Rótulos de Linha
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
Total Geral
$9,946.16
$3,414.43
$6,253.78
$19,614.37
Volume Discount
Usando uma calculadora, verifique se a quantidade $3.414,43 (para Acessórios em 2007) representa 17,41% de $19.614,37.
Usando uma calculadora, verifique se o valor $6.253,78 (para Bikes em 2008) representa 31,88% de $19.614,37.
Usando uma calculadora, verifique se o valor $15.088,72 (para Bikes Grand Total) representa 76,93% de $19.614,37.
Remova ResellerSales [SalesAmount_USD] da área Valores.
Crie uma medida, denominada Reseller Sales Ratio, na tabela ResellerSales, usando a seguinte fórmula (formate o resultado como percentual):
=SUM(ResellerSales_USD[SalesAmount_USD])/ CALCULATE(SUM(ResellerSales_USD[SalesAmount_USD]), ALLSELECTED())
Sua tabela deve ter esta aparência:
SalesTerritoryGroup |
||||||
Europa |
North America |
|||||
Pacific |
NA |
|||||
PromotionType |
||||||
Discontinued Product |
Reseller Sales Ratio |
Rótulos de Coluna |
||||
Excess Inventory |
Rótulos de Linha |
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 |
Total Geral |
50.71 % |
17.41 % |
31.88 % |
100.00 % |
|
Volume Discount |
Compare os resultados da sua calculadora com os fornecidos por Reseller Sales Ratio, os quais devem coincidir; seu valor de denominador é corrigido como o valor no final da tabela.
Como a fórmula de CALCULATE no denominador usa a função ALLSELECTED, o denominador representa o total principal de vendas, no final da tabela, depois que segmentações de dados verticais, horizontais e de página forem aplicadas; mas, antes da aplicação de segmentações de dados de linha e de coluna.
Observação: se você tiver filtros explícitos em sua expressão, esses filtros também serão aplicados à expressão.