Una de las funciones introducidas para Power BI en octubre de 2020 es, sin lugar a duda, los parámetros M dinámicos.
Antes de pasar a explorar esta función hay que recalcar que esta función no es compatible con muchas de las fuentes de datos populares como SQL Server, Oracle, Synapse, Oracle y SAP. La razón de esto se debe a que hay dos conjuntos de conectores que Power BI usa para DirectQuery:
- Un conjunto antiguo que fue creado hace algún tiempo para las fuentes de datos que originalmente tenían soporte para Analysis Services Tabular; y
- Un conjunto más nuevo que fue creado en el lenguaje M de Power Query.
Los parámetros M dinámicos solo funcionan para este nuevo conjunto de conectores. De momento solo podemos esperar a que esta función reciba soporte extendido para funcionar con los conectores viejos.
Parámetros M dinámicos.
Ahora bien, lo que hace a los parámetros M dinámicos importantes es que nos abren las puertas a un montón de funciones que no estaban disponibles antes. Para hacer una muestra vamos a ver cómo podemos usar estos parámetros para crear algo como columnas de cálculo dinámicas. Pero también veremos otros usos generales para poder ver lo que podemos lograr desde esta nueva actualización.
Para este ejemplo voy a usar Azure Data Explorer (ADX) como mi fuente de datos.
La fuente de datos que vamos a usar la podemos descargar aquí, y para el reporte de prueba he cargado una tabla que contiene alrededor de 790,000 transacciones dentro de ADX. Cada transacción tiene el precio pagado por propiedad como podemos ver a continuación:
Una forma obvia de analizar estos datos es creado un histograma y mostrar el número de transacciones que ocurren en grupos de precios de menor a mayor o mayor a menor. Esto es algo fácil de lograr en Power BI; por ejemplo, usando columnas calculadas en modo Importar a menos que queramos permitir a los usuarios el poder cambiar el tamaño de estos grupos por cuenta propia. Los parámetros M dinámicos nos dan una forma fácil de resolver este problema.
KQL, el lenguaje de query para ADX, tiene una buena forma de generar estos grupos por histogramas usando el operador summarize() y la función bin(). Por ejemplo, el siguiente query KQL hace algo como una agrupación SQL y nos muestra el número de transacciones inmobiliarias por cada país y grupo basado en el precio por incrementos de 25,000:
pricepaid
| summarize Transactions=count()
by county, bin(price, 25000)
Un paso mas allá
En Power BI he creado un parámetro llamado «binsizes»:
Y también he creado una versión parametrizada del query KQL de arriba para llevar una tabla DirectQuery.[?] El código M usado para esta tabla es el siguiente:
let
Source =
AzureDataExplorer.Contents(
"https://mycluster.northeurope.kusto.windows.net",
"pricepaid",
"pricepaid | summarize Transactions=count() by county, bin(price, "
& Number.ToText(binsizes) &
")",
[MaxRows=null, MaxSize=null, NoTruncate=null, AdditionalSetStatements=null]
)
in
Source
A continuación he creado una nueva tabla con los posibles tamaños de grupo que el usuario puede elegir usando una tabla calculada DAX:
Y finalmente he vinculado la columna en esta nueva tabla con el parámetro M:
Aquí tenemos el reporte final, en donde podemos ver el número de transacciones en cada grupo de precio y usar separadores para cambiar los grupos de precios y cambiar el país que estamos mirando:
Pero más allá de ser una nueva solución a un problema viejo, ¿qué significa esto? Pues bien, con una fuente de datos como ADX en donde los parámetros M cuentan con soporte y podemos escribir nuestros propios queries en el modo DirectQuery, podemos hacer lo que queramos en el query siempre y cuando regrese las mismas columnas. También podemos crear funciones definidas por el usuario (como funciones con valores de tablas en SQL Server), pasar parámetros usando parámetros M y tener tablas de hechos generadas de forma totalmente dinámica en nuestro conjunto de datos.
De cualquier forma, usar parámetros M dinámicos de esta forma nos permite usar funciones especializadas de KQL para análisis basket o análisis geoespaciales para hacer cosas que de otro modo serían imposibles en Power BI.
Cualquier duda, nos leemos abajo.