Hace unos meses se lanzó al público SQL Server 2019 Analysis Services CTP 2.3. Esta nueva versión trae una nueva funcionalidad para los modelos tabulares, los calculate groups.
Los calculate groups vienen a hacernos la vida un poco más fácil a la hora de desarrollar modelos tabulares, dando la opción de reutilizar métricas, como pueden ser por ejemplo, las relacionadas con el tiempo.
¿Cómo ayuda Calculate Groups en el desarrollo de modelos tabulares?
Hasta ahora teníamos una medida, Margen Bruto por ejemplo. Esa medida “base” la usábamos después para calcular el Margen Bruto del pasado año, la diferencia entre el Importe actual y el del año anterior, tanto en moneda como porcentaje, el acumulado anual, etc.
Si después teníamos otra medida, pongamos Cantidad, tenemos que volver a hacer las mismas medidas que teníamos para el Margen Bruto, solo que esta vez usando como “base” la medida Cantidad.
Si tenemos un modelo con 2 medidas base y 7 de tiempo tendríamos que hacer 14 medidas, pero ¿y si tenemos 30 medidas base y cada una de ellos tiene 9 cálculos de tiempo? Por no decir de lo que supone tener un montón de métricas en el modelo, a veces encontrar la que queremos lleva un rato.
Y todo eso siguiendo las buenas prácticas de ir construyendo medidas en cascada, es decir, ir construyendo nuevas medidas sobre medidas ya hechas de tal forma que si cambia el nombre del campo que usamos para la métrica solo tenemos que tocar en una medida y para el resto será transparente. Si no lo hemos desarrollado así y se nos da esta casuística puede ser la locura…
Nosotros hemos probado los calculate groups para el uso de medidas de tiempo aunque seguro que una vez salga la versión final de SQL Server 2019 y la gente empiece a usarlo saldrán otras muchas más funcionalidades (¿Reportes financieros en distintas monedas? por ejemplo).
Calculate Groups en la práctica
Vamos a comentaros los pasos que hemos seguido para probar esta nueva funcionalidad por si sentís la misma curiosidad que nosotros 🙂
Comentar que se pueden crear más de un grupo calculado, en nuestro ejemplo solo hemos creado uno pero el procedimiento es el mismo para el resto.
Lo primero es bajar e instalar (aconsejable en una máquina para no ensuciar nuestro entorno cotidiano) la última versión de SQL Server 2019, a día de hoy está disponible la CTP 2.5.
Os la podéis bajar desde aquí
Por el momento Visual Studio 2019 no soporta la creación de calculate groups ya que para ello necesitamos crear el modelo tabular con nivel de compatibilidad 1470 pero VS solo nos deja crearlo en nivel 1400.
Como alternativa para implementar los calculate groups tenemos TOM y TMSL, aunque personalmente no he encontrado ninguna referencia a cómo implementarlo usando estos métodos….
Afortunadamente tenemos una tercera opción, Tabular Editor. Tabular Editor es una aplicación open source totalmente gratuita que nos permitirá hacer un montón de cosas con nuestros modelos tabulares. Nos presenta los objetos de nuestro modelo a modo de explorador de Windows y sobre ellos, haciendo clic derecho, podremos llevar a cabo distintas acciones en función del objeto seleccionado.
Inicialmente optamos por la versión portable pero al ejecutar la aplicación nos daba el siguiente error:
Instalar las librerías no solucionó el problema, así que optamos por la versión ejecutable y no tuvimos ninguna incidencia.
Una vez con la aplicación instalada y funcionando llega el momento de meternos en faena 😉
Lo primero será crear un modelo nuevo con compatibilidad 1470, que es la que necesitamos para poder implementar los calculate groups.
Una vez hecho esto se nos presentará la estructura del modelo en el que será necesario crear los objetos del mismo, data source, tablas, relaciones, medidas, etc… para finalmente terminar con nuestro modelo ya creado:
Con nuestro cubo creado podemos ya desplegar la metadata (Model –> Deploy o F6) en nuestro servidor para después procesarlo. Ya tenemos nuestro cubo funcionando. Hasta aquí nada nuevo, la novedad reside en usar una aplicación como Tabular editor en lugar de Visual Studio.
Vamos a crear un calculate group, para ello vamos a Modelo–> New Calculate Group. Esta nueva funcionalidad se comporta como si fuera una tabla en la que dentro de ella hay una columna y los valores de esta columna se corresponden con las medidas que vamos a reutilizar.
Al crear el calculate group nos creará un Atributo (que es la tabla del gráfico de arriba) que nosotros hemos llamado “Tiempo”. Dentro de esta tabla nosotros hemos metido 3 cálculos pero puedes meter los que quieras, esto es solo a modo de ejemplo.
Los cálculos son los siguientes:
- Actual :
SELECTEDMEASURE()
- PY
CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR('Fecha'[Date]))
- YOY
SELECTEDMEASURE() - CALCULATE(SELECTEDMEASURE(),'Calculation Group'[Tiempo] = "PY")
Como seguro que habréis visto, hemos usado una nueva funcion SELECTMEASURE() solo disponible a partir de SQL Server 2019 CTP 2.3. Esta función devuelve la medida que se está evaluando actualmente en el contexto. Lo veremos mas fácil cuando implementemos el ejemplo en Power BI.
Vamos a abrir un Power BI y vamos a hacer un report muy simple
Podemos apreciar que tenemos disponible el calculate group, si le hacemos clic veremos que el gráfico cambia y nos muestra esto.
La métrica actual es la que tenemos en el contexto, en este caso SumCantidad, las otras dos PY y YOY las hemos definido con anterioridad en el grupo calculado.
También podemos usarlo como slicer.
En un futuro se prevé incluir soporte para RLS (Row Level Security) , la posibilidad de tener formatos dinámicos así como poder crear los calculate groups con MDX.
Como veis los grupos calculados vienen a hacer la vida un poco más fácil al desarrollador, además de abrirnos nuevas posibilidades a la hora de explotar nuestros modelos.
¡Y si quieres estar al tanto de nuevos posts y más info relacionada suscríbete a nuestra newsletter! ?
Saludos.