En numerosas ocasiones, cuando estamos trabajando con modelos de datos complejos, con muchas tablas y relaciones, y que requieren un número considerable de medidas, es importante tener en cuenta el lugar de almacenamiento de las mismas. Por ejemplo, es probable que tras cargar al modelo de datos todas las consultas necesarias para obtener la información que el usuario precisa, nos encontremos en la vista de relaciones con algo así:

Muchas veces la lógica no nos será de mucha ayuda a la hora de ubicar las medidas que vamos a ir calculando, si por ejemplo creamos una que cuente el número de artículos con el siguiente código:

NumeroArticulos =
DISTINCTCOUNT ( Articulo[CodArticulo] )

Es probable que decidamos crearla en la dimensión «Artículo» del modelo de datos. Pero, a veces, las medidas que darán vida a las visualizaciones de nuestros informes estarán creadas a partir de campos almacenados en tablas distintas. Un ejemplo simple es el resultado del IVA, donde nuestra formula puede ser la siguiente:

ResultadoIVA =
SUM ( FacturasEmitidas[IVArep] ) – SUM ( FacturasRecibidas[IVAsop] )

¿Dónde creamos (y almacenamos) esta medida, en la tabla de facturas emitidas o en la de recibidas? En poco tiempo nos encontraremos con dificultades a la hora de encontrar las medidas que nosotros mismos estamos creando, y si el modelo se vuelve confuso a la hora de desarrollarlo, ¿cómo será para el usuario final?

Es en estos modelos complejos con numerosas tablas de hechos, en los que se hace necesaria la creación de tablas específicas para almacenar medidas, lo que se conoce en SASS como «grupos de medidas». A diferencia de las columnas calculadas, las medidas no pertenecen a una tabla específica, por lo que técnicamente pueden estar almacenadas en cualquier parte del modelo de datos.

Power BI no dispone (hasta el momento) de una forma directa de hacerlo, pero podemos llevar a cabo nuestro objetivo de una forma muy sencilla.

Como crear los objetos que agruparán las medidas

Simplemente tendremos que crear una tabla de forma manual desde Power BI Deskpot, con una sola columna y un único valor dentro de ella. Posteriormente, daremos un nombre a nuestra tabla y finalmente la cargaremos al modelo de datos:

Una vez tengamos nuestra nueva tabla cargada en el modelo, tan solo necesitamos ocultar la columna en la vista de informes:

Y, empezar a mover nuestras medidas a esta tabla creada específicamente para almacenarlas. Para ello, lo único que tenemos que hacer es seleccionar la medida a mover y desde la sección propiedades de la pestaña modelado, desplegar la opción de selección que pone tabla inicial, y finalmente seleccionar la correspondiente tabla:

El agrupar las medidas de esta manera marca una gran diferencia a la hora de entregar nuestros modelos a otras personas que no han estado involucradas en la creación de los mismos. En ocasiones, será conveniente establecer varios grupos donde agrupemos nuestras medidas atendiendo a algún criterio. De esta forma los usuarios finales sabrán donde encontrar las medidas que necesitan, y el resto de las tablas serán usadas solamente para filtrar y segmentar las mismas. En nuestra vista de informes, nuestros grupos de medidas tendrán un icono de calculadora en vez de tabla, y se colocarán en la parte de arriba de la lista, tal y como podemos observar en la siguiente imagen:

Limitación en el modo Direct Query

En el caso de que nos conectemos a un origen mediante el modo Direct Query con alguno de los orígenes de datos compatibles con dicho modo, como por ejemplo con una base de datos SQL server:

Inmediatamente nos daremos cuenta de que el botón «especificar datos» se encuentra deshabilitado en dicho modo:

En este caso, como perfectamente explica Soheil en un artículo de biinsight, podemos usar la solución alternativa de, desde el editor de consultas, cargar cualquier tabla de nuestra base de datos original (en este caso SQL server) y en el editor avanzado añadir solamente [Query="SELECT 1 AS Medidas"] en el origen, borrar el código relativo a la tabla seleccionada y, de esta forma, conseguiremos nuestra tabla de medidas con una sola columna.

Ya solo nos quedaría cargarla al modelo junto con el resto de consultas y, como antes, añadir nuestras medidas a agrupar y ocultar en la vista de informes la columna creada.

Usando el editor de consultas (M)

Si preferimos realizar todo nuestro trabajo relativo a la creación de tablas desde el editor de consultas, podemos crear nuestras agrupaciones de medidas con M (Power Query), de una manera muy sencilla. Tan solo tenemos que abrir una nueva consulta en blanco desde el editor de consultas y pegar el siguiente código:

let
 TablaVacia = Table.FromValue(""),
 NombreColumnaCambiado = Table.RenameColumns(TablaVacia,{{"Value", "Medidas"}})
 in
 NombreColumnaCambiado

Esto creará una tabla con un único valor, que podremos cargar al modelo de datos junto con el resto de consultas, como hicimos anteriormente.

Posteriormente solo nos quedaría, una vez más, ocultar la columna creada y añadir las medidas que nos interese agrupar.

Consideraciones finales

A parte de hacer nuestros modelos de datos mucho más organizados, elegantes y fáciles de utilizar para los usuarios finales, el agrupar las medidas de esta forma nos proporciona también otro importante valor añadido, que es el de mantener nuestras medidas a salvo. Si por cualquier razón una de nuestras consultas deja de actualizarse desde el origen de datos y tenemos que volver a construir la conexión desde el principio, todas las medidas que tuviéramos almacenadas en esa tabla se perderían.

Por otro lado, nos permite ocultar totalmente nuestras tablas de hechos en la herramienta usada por el cliente, de forma que sea imposible la creación de medidas implícitas, a la vez que impedimos que se seleccione un campo erróneo a la hora de filtrar o segmentar los datos (por ejemplo, el campo hora de nuestra tabla de hechos en vez de el de nuestra dimensión horaria).

Todo el código DAX de este artículo ha sido formateado con «DAX Formatter»
DAX Formatter by SQLBI