[DAX] INFO functions

Hace varios meses ya que microsoft nos ha sorprendido agregando nuevas funciones en DAX que responden a información del modelo. Conocer detalles del modelo se vuelve indispensable para documentar o trabajar por primera vez con un modelo ya creado.

Ya son más de 50 nuevas funciones que permiten preguntarle al modelo detalles particulares como por ejemplo indagar en las expresiones de las medidas de nuestro modelo o los roles de seguridad por filas creados.

Lo cierto es que ya existía una forma de llegar a esta información. Desde el inicio de modelos tabulares tuvimos exposición a DMV (Dynamic Management Views). Como nos gusta hacer aqui en LaDataWeb, primero veamos el contexto teórico:

Las vistas de administración dinámica (DMV) de Analysis Services son consultas que devuelven información sobre los objetos del modelo, las operaciones del servidor y el estado del servidor. La consulta, basada en SQL, es una interfaz para esquemas de conjuntos de filas.

Si quieren traer un poco más a la memoria o un ejemplo de ello, pueden revisar este viejo artículo. El nuevo esquema INFO en DAX nos brinda más de 50 funciones para obtener información del esquema TMSCHEMA de DMV.

Si ya existía… ¿Por qué tanto revuelo?

Las INFO de DAX vienen a evolucionar algunos aspectos que no podíamos resolver antes y darnos creatividad para explotarlos en otros que tal vez no habíamos pensado.

  • No es necesario utilizar una sintaxis de consulta diferente a DAX para ver información sobre tu modelo semántico (antes SQL). Son funciones DAX nativas y aparecen en IntelliSense cuando escribes INFO.
  • Puedes combinarlas usando otras funciones DAX. La sintaxis de consulta DMV existente no te permite combinarlas. Como función DAX, la salida es de tipo de datos Tabla y se pueden usar funciones DAX existentes que unen tablas o las resumen.

Estas son el eslabón inicial bajo el cual se llamó la atención. Ahora podemos pensar solo en DAX y si buscamos INFO de Tablas, relaciones, columnas o medidas, podemos combinarlas para mejorar el resultado de nuestra consulta. Si quisieramos conocer las medidas de una tabla puntual con su nombre, podríamos ejecutar algo así:

EVALUATE
VAR _measures =
SELECTCOLUMNS(
INFO.MEASURES(),
"Measure", [Name],
"Desc", [Description],
"DAX formula", [Expression],
"TableID", [TableID]
)
VAR _tables =
SELECTCOLUMNS(
INFO.TABLES(),
"TableID", [ID],
"Table", [Name]
)
VAR _combined =
NATURALLEFTOUTERJOIN(_measures, _tables)
RETURN
SELECTCOLUMNS(
_combined,
"Measure", [Measure],
"Desc", [Desc],
"DAX Formula", [DAX formula],
"Home Table", [Table]
)

Así obtendríamos una tabla con su nombre, sus medidas, sus descripciones de medidas y las expresiones de las medidas. El resultado puede ser documentación de modelo exportado a excel:

¿Donde o cómo puede ejecutarlo?

Las funciones de información puede ayudarnos para explorar un modelo en edición actual. Si estamos conociendo un modelo por primera vez o culminando un trabajo para documentar, podríamos abrir la vista de consultas DAX de un Power Bi Desktop para ejecutar el código. También siempre dispondríamos de DAX Studio que no solo permite ejecutar con un PowerBi Desktop, sino también contra un modelo en una capacidad dedicada en Fabric o PowerBi Service.

En mi opinión lo más interesante es que esto es DAX nativo. Como gran amante de la PowerBi Rest API, eso me entusiasma, dado que el método que permite ejecutar código DAX contra un modelo semántico en el portal de PowerBi, no permite DMV. Restringe a DAX nativo. Esto abre las puertas a ejecutar por código una consulta de información al modelo. Podríamos estudiar y comprender que es lo que a nuestra organización más nos ayuda entender de un modelo o nos gustaría documentar. A partir de ello construir un código que obtenga esa información de un modelo semántico que necesitemos comprender. Veamos la siguiente imagen que aclare más

Espero que las funciones los ayuden a construir flujos que les brinden la información que desean obtener de sus modelos.