Grupos Calculados: Reduce el número de medidas de tu modelo SSAS
En el post de hoy vamos a hablar sobre los Modelos de Analysis Services Tabular, en concreto de una de las últimas novedades que se publicó a principios de este año: Los Grupos Calculados.
Los Grupos Calculados nos permiten acortar el número de medidas que tenemos en un modelo de Analysis Services.
Seguro que a todos os ha pasado que habéis terminado un modelo de SSAS con 10 medidas y cuando se lo habéis entregado a vuestro cliente os ha pedido, por ejemplo, una comparativa de todas las medidas con el día, mes y año anterior. Solo con esta petición del cliente ya hemos pasado de un modelo que contenía 10 medidas , a uno de 40, ya que deberíamos crear una nueva medida con el cálculo del año anterior por cada medida que teníamos. Si creáramos un grupo calculado con los cálculos del día, mes y año anterior, el modelo seguiría teniendo las 10 medidas iniciales.
Funcionamiento
En primer lugar, os voy a enseñar cómo desempeñar esta nueva funcionalidad.
El funcionamiento interno de los Grupos Calculados se basa en coger de forma dinámica las medidas que tenemos en el modelo en el contexto actual y aplicarle todos los cálculos que indiquemos dentro del grupo calculado. Para que todo esto sea posible, se ha ampliado el número de funciones en DAX:
- SELECTEDMEASURE: referencia la medida a la que se le va a aplicar el cálculo.
- SELECTEDMEASUREFORMATSTRING: devuelve el formato de la medida.
- SELECTEDMEASURENAME: devuelve el nombre de la medida.
- ISSELECTEDMEASURE: indica con un valor booleano si la medida está dentro de una lista de medidas.
Aunque sea un spoiler mostrar el resultado final ahora mismo, creo que os ayudará a entender cómo funcionan los grupos calculados de forma más rápida.
- Partiendo de la siguiente tabla con las columnas Calendar Year por Internet Total Sales.
- Añadimos el grupo calculado que posteriormente os enseñaré como crear.
- Como podéis observar se han añadido las siguientes columnas con sus respectivos cálculos: Current (valor de la medida seleccionada), MTD( month to date), PY (previous year)…
Creación del Grupo Calculado
Ahora sí, vamos a aprender cómo crear el Grupo Calculado.
Partiendo de un proyecto de SSAS Tabular completo, procedemos a crear un nuevo grupo calculado y como veis en la siguiente imagen nos crea el grupo y por defecto, una carpeta llamada Calculation Items. Esta carpeta, contendrá todos los cálculos que queramos añadir y una columna llamada Name que, es la que sacaremos en los visuales de Power BI o Excel.
Como vemos, yo no utilizo Visual Studio para desarrollar los proyectos de SSAS Tabular, ya que, desde que probé Tabular Editor estoy encantado (Aquí tienes una entrada en que te enseño a usarla), funciona inmensamente mejor que Visual Studio y de hecho, ya han confirmado que próximamente lo implementarán junto con VertiPaq Analycer dentro de Power Bi Desktop.
Ahora procederemos a crear los Calcutation Items que os mostré en la tabla en Power Bi Desktop. Para crearlos simplemente nos situamos en el grupo calculado que hayamos creado y hacemos clic derecho New Calculation Item.
A continuación os describo y os dejo el código de todos los Calculation Items creados.
- Current: devolverá el valor de la medida sin aplicar ningún cálculo.
- SELECTEDMEASURE()
- MTD: devolverá el valor de la medida del mes hasta la fecha.
- CALCULATE ( SELECTEDMEASURE (), DATESMTD ( ‘Date'[Date] ) )
- YTD: devolverá el valor de la medida del año hasta la fecha.
- CALCULATE ( SELECTEDMEASURE (), DATESYTD ( ‘Date'[Date] ) )
- PY: devolverá el valor de la medida en el mismo periodo seleccionado pero del año anterior.
- CALCULATE ( SELECTEDMEASURE (), SAMEPERIODLASTYEAR ( ‘Date'[Date] ) )
- PY YTD: devolverá el valor de la medida del año hasta la fecha pero del año anterior.
- CALCULATE ( SELECTEDMEASURE (), SAMEPERIODLASTYEAR ( ‘Date'[Date] ), ‘Calculation Group'[Name] = «YTD» )
- YTD Grouth: devolverá el porcentaje de mejora respecto al año anterior.
- VAR _YTD = CALCULATE ( SELECTEDMEASURE (), ‘Calculation Group'[Name] = «YTD» ) VAR PY_YTD = CALCULATE ( SELECTEDMEASURE (), ‘Calculation Group'[Name] = «PY YTD» ) RETURN DIVIDE ( _YTD – PY_YTD, PY_YTD )
Simplemente con tener conocimientos básicos de DAX, se pueden hacer todos.
Propiedades
Dentro de los grupos calculados existen dos propiedades que son de gran utilidad:
- Precedence: determina el orden de evaluación cuando existe mas de un grupo calculado. Cuanta menos Precedence tengas antes se evaluará.
- Ordinal: establece la ordenación de los Calculation Items. Por defecto, los ordenará alfabéticamente pero si queremos ordenarlos de una forma especifica podemos hacer lo siguiente:
- Creamos una nueva columna, especificamos que es de tipo Integer y la ocultamos ya que solo la vamos a utilizar para la ordenación de los Calculation Items.
- Ahora ya podemos indicar la propiedad Ordinal para cada uno de los Calculation Items. La ordenación empieza desde el 0.
Especificaciones Previas a la Implantación de los Grupos Calculados
Al ser una tecnología muy reciente, funciona en SQL Server 2019 y versiones posteriores de Analysis Services, Azure Analysis Services y Power BI Premium, por lo que actúa en modelos tabulares con un nivel de compatibilidad 1500 o superior.
Ten en cuenta que, tanto la seguridad a nivel de fila, como, la seguridad a nivel de objeto no funcionan con los grupos calculados. Funcionarán con el resto del proyecto pero no con los grupos calculados.
Espero que os haya servido de ayuda y os espero en mis próximos posts.
Si quieres que ayudemos a tu negocio o empresa contacta con nosotros en info@aleson-itc.com o llámanos al +34 962 681 242
Business Intelligence Expert Consultant. Specialising in creation of Data Warehouse, Analysis Services, Power BI, SSIS, SSRS and Databricks.