Descubre cómo las funciones INFO DAX en Power BI ponen a disposición de información acerca del modelo semántico gracias a la vista de consultas DAX.
En diciembre de 2023, se enriqueció el lenguaje DAX con 52 funciones adicionales. Estas incorporaciones, enfocadas en información, añaden una dimensión de especificidad única a DAX al facilitar el acceso a una diversidad de metadatos y estadísticas de los modelos tabulares en Power BI. Estas funciones, especializadas, proporciona detalles sobre la estructura y el almacenamiento de tablas, columnas, relaciones, medidas, y otros elementos estructurales del modelo.
Su utilidad se extiende a análisis avanzados y diagnósticos profundos en Power BI, simplificando tareas complejas como compartir, monitoreo y documentación de todas tus expresiones de medidas DAX de manera eficiente y efectiva.
Esta publicación se beneficia significativamente de la colaboración del MVP de Microsoft Francisco Mullor de Power BI SP. Su amplia experiencia como creador de contenido enriquece enormemente a la comunidad de habla hispana. La calidad y originalidad de sus aportes son, sin duda, de lo mejor.
Introducción a Funciones INFO DAX
Las 52 nuevas funciones INFO DAX corresponden a las DMVs (Dynamic Management Views) del tipo TSCHEMA. Esto indica que estas funciones DAX abarcan solo un subconjunto de todas las sentencias DMV disponibles. Por supuesto, esto no es algo negativo, pero sí sugiere la posibilidad de que este grupo de funciones DAX podría ampliarse en el futuro.
— ¿Qué es una sentencia o consulta DMV?
Para aterrizar y no dejar cabos sueltos, entendamos brevemente ¿Qué es una DMV?.
Las Dynamic Management Views (DMV) son como ventanas especiales en un edificio grande y complejo, que es tu base de datos SQL. Imagina que cada ventana te permite mirar una habitación diferente: una puede mostrarte cómo están organizados los muebles (tablas y columnas), otra te permite ver cómo se conectan las habitaciones entre sí (relaciones), y otra te da una idea de cuánta gente está en cada habitación en un momento dado (rendimiento de la base de datos).
Que en DMV sería algo así:
Así como mirar por estas ventanas te da una mejor comprensión del edificio sin tener que recorrerlo todo, las DMVs te permiten entender y monitorear tu base de datos SQL de forma rápida y eficiente, sin necesidad de sumergirte en los detalles técnicos.
— Primer Acercamiento
La idea de dominar 52 nuevas funciones INFO DAX puede resultar intimidante al principio, pero te sorprenderá saber que su sintaxis es sorprendentemente accesible. Cada función inicia con el término INFO, seguido por un punto (.) y el nombre específico que identifica el metadato del modelo que deseas explorar. En esencia, estas funciones se estructuran de manera intuitiva como INFO.X, donde X es el nombre personalizado que define el tipo de información que buscas.
Lo más interesante es que estas funciones se caracterizan por su simplicidad, ya que no requieren ningún parámetro, adicionalmente, todas retornan una tabla como resultado, es decir, las vamos a utilizar en consultas.
Si deseas conocer estas funciones un poco más a fondo, en Cartas DAX ya hemos creado las páginas dedicadas a estas funciones.
Considera, por ejemplo, la siguiente expresión de consulta DAX con la función INFO DAX INFO.EXPRESSIONS:
1 | EVALUATE2 | INFO.EXPRESSIONS ( )
Esta función genera una tabla detallando todas las consultas de Power Query. En ella, la columna [Name] indica el nombre de cada consulta, mientras que [Expression] revela la consulta específica escrita en el lenguaje M.
Por supuesto, hay muchas otras columnas que considerar; la imagen presentada muestra solo una selección de ellas. Es importante destacar que el resultado exacto depende del modelo específico con el que se trabaje. Las columnas que retorna la función INFO.EXPRESSIONS incluyen:
- [ID]
- [ModelID]
- [Name]
- [Description]
- [Kind]
- [Expression]
- [ModifiedTime]
- [QueryGroupID]
- [ParameterValuesColumnID]
- [MAttributes]
- [LineageTag]
- [SourceLineageTag]
La función INFO DAX INFO.EXPRESSIONS se corresponde con la consulta DMV:
1 | select * from $SYSTEM.TMSCHEMA_EXPRESSIONS
Funciones INFO DAX con Otras Funciones del Lenguaje DAX
Es importante señalar que no estamos limitados únicamente a las funciones INFO DAX en su uso aislado; todo el Lenguaje DAX está a nuestra disposición. Por ejemplo, si deseamos filtrar y quedarnos solo con las columnas Name y Expression, podemos lograrlo fácilmente utilizando la función SELECTCOLUMNS. Esto demuestra la versatilidad y la potencia de combinar distintas funciones de DAX.
1 | EVALUATE2 | SELECTCOLUMNS ( 3 | INFO.EXPRESSIONS(),4 | "Nombre", [Name],5 | "Expresion M", [Expression]6 | )
Qué tal si ahora deseamos identificar únicamente aquellas consultas de Power Query que exceden los 1000 caracteres, un criterio útil para destacar consultas de mayor complejidad. Esta tarea se simplifica con DAX, combinando las funciones SELECTCOLUMNS, LEN y FILTER. Esta integración de funciones nos permite no solo aislar las consultas más extensas, sino también ofrecer una visión más precisa de su estructura y complejidad.
1 | EVALUATE 2 | VAR SeleccionDeColumnasyCreacionDeColumna = 3 | SELECTCOLUMNS ( 4 | INFO.EXPRESSIONS ( ), 5 | "Nombre", [Name], 6 | "Expresion M", [Expression], 7 | "N_Caracteres", LEN ( [Expression] ) 8 | ) 9 | VAR TablaFiltrada = 10 | FILTER ( 11 | SeleccionDeColumnasyCreacionDeColumna, 12 | [N_Caracteres] >= 1000 13 | )14 | RETURN15 | TablaFiltrada16 | ORDER BY 17 | [N_Caracteres] DESC
Documentación y/o Seguimiento
El método clásico de copiar y pegar ofrece una solución rápida. Es decir, podemos copiar fácilmente el resultado de nuestra expresión de consulta en el botón de parte superior derecha:
Ahora podríamos dirigiremos a Especificar datos. Para ello, accederemos a la pestaña Inicio, nos ubicaremos en el grupo Datos y seleccionaremos el comando Especificar Datos. En este lugar, podremos pegar el resultado obtenido de nuestra expresión de consulta.
Sin embargo, al pegar los datos, podemos enfrentarnos a un inconveniente: los saltos de línea en nuestras expresiones de Lenguaje M pueden ser malinterpretados como el comienzo de filas independientes. Esta interpretación errónea es la razón por la que, en la imagen anteriores, aparentemente aparecen más de 22 filas, a pesar de que la consulta DAX arroja sólo 3 filas.
Por cierto si nos vamos a Excel, el problema persiste:
Si bien el método de copiar y pegar es sencillo, también presenta inconvenientes significativos. Además de ser un proceso manual y poco dinámico, implica que cualquier nueva medida requiere repetir casi todo el procedimiento. A esto se suma el problema de los saltos de línea en las expresiones DAX. Dado que formatear adecuadamente estas expresiones para una lectura clara es fundamental, es poco probable evitar completamente los saltos de línea
En suma dos limitaciones:
- Proceso manual de copiar y pegar
- Expresiones DAX con saltos de línea son un inconveniente
En el blog de Power BI, Zoe Douglas presenta en el artículo: DAX query view introduces new INFO DAX functions, nos presenta una forma de zanjar este problema en desktop, conectándonos directamente al modelo de Power BI desktop desde Excel y ejcutar la consulta desde allí.
Conexión Directa a la Instancia de SSAS
Iniciemos abriendo un archivo de Excel en blanco. Después, nos dirigimos a la pestaña Datos y expandimos las opciones en Obtener y Transformar Datos. El siguiente paso es elegir Obtener Datos, continuar con Desde una base de datos y, finalmente, seleccionar SQL Server Analysis Services (Importación).
Al realizar esta acción, se abrirá una ventana que nos solicita dos datos esenciales.
Para determinar el nombre del servidor local, podemos utilizar Power BI Desktop. Dentro de la aplicación, en la vista del Modelo, nos dirigimos al Panel de datos y accedemos a la sección Modelo. Aquí seleccionamos Modelo Semántico y luego miramos en el Panel de propiedades la sección que indica Servidor. En la parte inferior de este panel, se mostrará el nombre del servidor, usualmente en el formato localhost:xxxxx, donde xxxx es un número variable. Este nombre se puede copiar directamente utilizando el botón de copia provisto.
Una vez copiado, pegamos el nombre del servidor en la casilla correspondiente de la ventana en Excel.
Artículo Actualmente en Construcción …
Otras Funciones INFO DAX
La función INFO DAX que nos permite obtener la información de las medidas en nuestro modelo semántico es INFO.MEASURES:
1 | EVALUATE2 | INFO.MEASURES ( )
— Su resultado es el siguiente
Las columnas que arroja esta consulta son las siguientes:
- [ID]
- [TableID]
- [ExplicitName]
- [InferredName]
- [ExplicitDataType]
- [InferredDataType]
- [DataCategory]
- [Description]
- [IsHidden]
- [State]
- [IsUnique]
- [IsKey]
- [IsNullable]
- [Alignment]
- [TableDetailPosition]
- [IsDefaultLabel]
- [IsDefaultImage]
- [SummarizeBy]
- [ColumnStorageID]
- [Type]
- [SourceColumn]
- [ColumnOriginID]
- [Expression]
- [FormatString]
- [IsAvailableInMDX]
- [SortByColumnID]
- [AttributeHierarchyID]
- [ModifiedTime]
- [StructureModifiedTime]
- [RefreshedTime]
- [SystemFlags]
- [KeepUniqueRows]
- [DisplayOrdinal]
- [ErrorMessage]
- [SourceProviderType]
- [DisplayFolder]
- [EncodingHint]
- [RelatedColumnDetailsID]
- [AlternateOfID]
- [LineageTag]
- [SourceLineageTag]
Dentro del amplio abanico de 41 columnas disponibles, podríamos enfocarnos específicamente en [Name], [Expression] y [TableID]. La columna [TableID] revela la tabla donde se ubica la medida, no obstante, no dice el nombre en sí.
1 | EVALUATE2 | SELECTCOLUMNS (3 | INFO.MEASURES ( ),4 | "Nombre", [Name],5 | "Expresion", [Expression],6 | "ID",[TableID]7 | )
Por lo previo, debemos integrar este resultado con el resultado de otra función INFO DAX, para así, desentrañar el nombre concreto de la tabla. La función INFO.TABLES nos proporciona una variedad de columnas, incluyendo el [ID] y el nombre de la tabla en [Name]. Por lo tanto, nos centraremos exclusivamente en las columnas [ID] y [Name], que son fundamentales para nuestro objetivo:
1 | EVALUATE2 | SELECTCOLUMNS (3 | INFO.TABLES ( ),4 | "ID", [ID],5 | "NombreTabla", [Name]6 | )
Ahora, podemos fusionar estos dos conjuntos de resultados en una única expresión de consulta, utilizando variables para mayor claridad de la expresión DAX. Para combinar estos datos, emplearemos la función NATURALLEFTOUTERJOIN. Esta función une dos tablas: una tabla izquierda (primer parámetro) y una tabla derecha (segundo parámetro), emparejando las columnas con nombres idénticos en ambas tablas. El resultado final incluye todos los registros de la tabla izquierda (primer parámetro), complementados con la información correspondiente de la tabla derecha (segundo parámetro) donde haya coincidencias.
1 | EVALUATE 2 | VAR MedidaEnElModelo = 3 | SELECTCOLUMNS ( 4 | INFO.MEASURES ( ), 5 | "Nombre", [Name], 6 | "Expresion", [Expression], 7 | "ID",[TableID] 8 | ) 9 | VAR InformacionDeTablas =10 | SELECTCOLUMNS (11 | INFO.TABLES ( ),12 | "ID", [ID],13 | "NombreTabla", [Name]14 | )15 | VAR Combinacion = 16 | NATURALLEFTOUTERJOIN ( MedidaEnElModelo, InformacionDeTablas )17 | RETURN18 | Combinacion
— El resultado es el siguiente:
Visualización del Resultado
Integración con Power Automate
Vamos a abordar en estos puntos uno por uno con ayuda de un integrante del Power Platform: Power Automate.