Función ALLSELECTED (DAX)
Quita los filtros de contexto de las columnas y filas de la consulta actual, a la vez que mantiene todos los demás filtros de contexto o filtros explícitos.
La función ALLSELECTED obtiene el contexto que representa todas las filas y columnas de la consulta, a la vez que conserva los filtros explícitos y los contextos que no sean filtros de fila y de columna. Esta función se puede utilizar para obtener totales visuales en las consultas.
Sintaxis
ALLSELECTED([<tableName> | <columnName>])
Parámetros
tableName
Nombre de una tabla existente, con la sintaxis estándar de DAX. Este parámetro no puede ser una expresión. Este parámetro es opcional.columnName
Nombre, normalmente completo, de una columna existente que utiliza sintaxis estándar de DAX. No puede ser una expresión. Este parámetro es opcional.
Valor devuelto
Contexto de la consulta, sin ningún filtro de columnas y filas.
Comentarios
Esta función tiene un argumento o ninguno. Si hay un argumento, el argumento es tableName o columnName.
Esta función no es igual que ALL(), porque mantiene todos los filtros establecidos explícitamente en la consulta, y conserva todos los filtros de contexto excepto los filtros de fila y de columna.
Ejemplo
En el ejemplo siguiente se muestra cómo generar diferentes niveles de totales visuales en un informe de tabla mediante expresiones DAX. En el informe, se han aplicado los dos (2) filtros anteriores a los datos de ventas de distribuidor: uno a Sales Territory Group = Europe y el otro a Promotion Type = Volume Discount. Una vez aplicados los filtros, se pueden calcular los totales visuales para todo el informe, para todos los años o para todas las categorías de producto. Además, con fines meramente ilustrativos, se obtiene también el total general de todas las ventas, quitando todos los filtros del informe. La evaluación de la expresión DAX siguiente da como resultado una tabla con toda la información necesaria para generar una tabla con totales visuales.
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]
Tras ejecutar la expresión anterior en SQL Server Management Studio para AdventureWorks DW Tabular Model 2012 se obtienen los resultados siguientes:
[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 |
Las columnas del informe son:
Reseller Sales Amount
El valor real de las ventas de revendedor por año y categoría de producto. Este valor aparece en una celda en el centro del informe, en la intersección de año y categoría.Reseller Visual Total for All of Calendar Year
El valor total de una categoría de producto para todos los años. Este valor aparece al final de una columna o fila de una categoría de producto determinada y en todos los años en el informe.Reseller Visual Total for All of Product Category Name
El valor total de un año en todas las categorías de producto. Este valor aparece al final de una columna o fila de un año determinado y en todas las categorías de producto en el informe.Reseller Visual Total
El valor total de todos los años y categorías de producto. Este valor aparece normalmente en la esquina inferior derecha de la tabla.Reseller Grand Total
Este es el total de todas las ventas de distribuidor antes de que se haya aplicado un filtro; observe la diferencia con [Reseller Visual Total]. Recuerde que este informe incluye dos (2) filtros, uno aplicado a Product Category Group y el otro aplicado a Promotion Type.
En el ejemplo siguiente se muestra el uso de ALLSELECTED() sin argumentos, para mostrar cómo calcular una proporción sobre el valor total mostrado en una tabla que se ha filtrado con segmentaciones de datos horizontales y verticales. En este ejemplo se usa SQL Server 2012, PowerPivot para Excel y Datos de ejemplo de PowerPivot (DAX_AdventureWorks).
En la lista de campos de PowerPivot, arrastre la columna, ResellerSales[SalesAmount_USD] al área Valores.
Arrastre Promotion[PromotionType] al área Segmentaciones de datos verticales. Seleccione las segmentaciones de datos para Discontinued Product, Excess Inventory y Seasonal Discount.
Arrastre SalesTerritory[SalesTerritoryGroup] al área Segmentaciones de datos horizontales. Seleccione la segmentación de datos de Europe.
El valor de Sum Of SalesAmount_USD debe ser 19.614,37 dólares.
Arrastre ProductCategory[ProductCategoryName] al área Etiquetas de fila y DateTime[CalendarYear] al área Etiquetas de columna.
La tabla debe tener un aspecto parecido a:
SalesTerritoryGroup
Europe
North America
Pacific
N/D
PromotionType
Discontinued Product
Sum of SalesAmount_USD
Etiquetas de columna
Excess Inventory
Etiquetas de fila
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
Grand Total
$9,946.16
$3,414.43
$6,253.78
$19,614.37
Volume Discount
Use una calculadora para comprobar que la cantidad 3.414,43 de dólares (accessories en 2007) es el 17,41% de 19.614,37 dólares.
Use una calculadora para comprobar que la cantidad 6.253,78 dólares (bicicletas en 2008) es el 31,88% de 19.614,37 dólares.
Use una calculadora para comprobar que la cantidad 15.088,72 dólares (total general de las bicicletas) es el 76,93% de 19.614,37 dólares.
Quite ResellerSales[SalesAmount_USD] del área Valores.
Cree una medida denominada Reseller Sales Ratio en la tabla ResellerSales, con la siguiente fórmula (dé formato de porcentaje al resultado):
=SUM(ResellerSales_USD[SalesAmount_USD])/ CALCULATE(SUM(ResellerSales_USD[SalesAmount_USD]), ALLSELECTED())
La tabla debe tener un aspecto parecido al siguiente:
SalesTerritoryGroup |
||||||
Europe |
North America |
|||||
Pacific |
N/D |
|||||
PromotionType |
||||||
Discontinued Product |
Reseller Sales Ratio |
Etiquetas de columna |
||||
Excess Inventory |
Etiquetas de fila |
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 |
Grand Total |
50.71 % |
17.41 % |
31.88 % |
100.00 % |
|
Volume Discount |
Compare los resultados de la calculadora con los de Reseller Sales Ratio, que deben coincidir. El valor del denominador está fijo en el valor de la parte inferior de la tabla.
Como en la fórmula CALCULATE del denominador se utiliza la función ALLSELECTED, el denominador representa el total general de ventas, en la parte inferior de la tabla, una vez que se han aplicado las segmentaciones de datos verticales, horizontales y de página, pero antes de que se apliquen las segmentaciones de datos de fila y de columna.
Nota: si tiene filtros explícitos en la expresión, los filtros también se aplican a la expresión.