Cuando estamos creando medidas en PowerPivot es muy habitual jugar con los contextos para realizar cálculos complejos. Cómo ya veíamos en la serie sobre la evaluación de contextos tenemos multitud de funciones que nos permite modificar el contexto para adecuar el cálculo a nuestras necesidades. Una de las modificaciones más habituales que hacemos es la de eliminar los filtros establecidos por slicers, filters, filas y columnas, para lo cual utilizábamos funciones como ALL o ALLEXCEPT. Hasta el momento con ALL lo que hacíamos era eliminar todos los filtros establecidos y con ALLEXCEPT eliminábamos todos los filtros establecidos salvo los que pasábamos como parámetros a la función, ahora con SQL Server 2012 aparece una nueva función: ALLSELECTED, que nos permitirá seleccionar todo aquello filtrado explícitamente por el usuario (slicers y filtros). Esto es muy útil cuando queremos calcular por ejemplo porcentajes de contribución al padre.

Como siempre la forma más sencilla de entender el funcionamiento es con un ejemplo práctico asique vamos allá. Disponemos de un modelo semántico BISM que incorpora algunas tablas de Adventure Works, entre ellas la tabla de ventas por Internet. Lo primero que hacemos es añadir una columna calculada con la ganancia de cada venta en esta tabla:

Novedades de PowerPivot en Denali (IX): ALLSELECTED

Ahora nuestro objetivo es definir una medida en el modelo semántico que permita analizar al usuario analizar el porcentaje de ganancia que proporciona una determinada celda de la tabla dinámica respecto a los datos filtrados explícitamente mediante slicers, por ejemplo analizando por año, trimestre y mes y filtrando en slicers los datos de la geografía.

Novedades de PowerPivot en Denali (IX): ALLSELECTED

Nos gustaría saber rápidamente para cada uno de esos meses que porcentaje de ganancia hemos obtenido sobre el total obtenido en esa geografía. Hasta el momento lo que haríamos sería crear una función en DAX que eliminara todos los contextos establecidos excepto las columnas utilizadas en los slicers mediante ALLEXCEPT, pero claro ¿y si mañana el usuario añade un nuevo slicer? ¿cómo sabemos que columnas está utilizando si este análisis lo hace después de haber creado el modelo?… La respuesta a estas preguntas es ALLSELECTED, que nos permite hacer un calculo basándonos en todo lo filtrado por el usuario. Esta sería la formula de la medida que debemos añadir en nuestro modelo:

=Sum(FactInternetSales[Profit])/CALCULATE(SUM(FactInternetSales[Profit]),ALLSELECTED())

Y este sería el resultado en nuestro análisis de Excel:

Novedades de PowerPivot en Denali (IX): ALLSELECTED

Hay que destacar la versatilidad que ofrece esta función a nuestro cálculo, ya que si ahora añadimos por ejemplo un slicer para el color del producto no necesitamos modificar nada.

Novedades de PowerPivot en Denali (IX): ALLSELECTED

Hasta aquí nuestro ejemplo de ALLSELECTED. En TechNet disponéis de algún ejemplo más y de información sobre esta función. Espero que os haya gustado y os sea de utilidad.

 

Un saludo

Ilde

 

0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like
Leer más

Operador unario y jerarquías padre-hijo en SSAS MD

Recientemente nos hemos visto involucrados en un proyecto SSAS Multidimensional en el que existía una dimensión de cuentas padre-hijo bastante compleja y con un operador unario por en medio. Es por esto que nos hemos decidido a describir brevemente la implementación por defecto de SSAS y la que utilizamos finalmente para mejorar el rendimiento.