Aun cuando la documentación para parámetros M dinámicos menciona cómo podemos usar selección múltiple en el código M en Power BI para nuestros queries de Power Query. Esto nos ayudaría practicarlo con un ejemplo detallado donde veamos cómo hacerlo y explicar qué es lo que ocurre cuando hacemos selección múltiple.
Parámetros DirectQuery
Una vez más vamos a usar Azure Data Explorer como nuestra fuente de datos DirectQuerty para este ejemplo. Consideremos el siguiente query KQL, el cual nos regresa una lista de municipios y el precio promedio pagado por inmobiliario en cada uno:
pricepaid
| where county in ('DEVON', 'CORNWALL', 'KENT')
| summarize avg(price) by county
La tercera línea del query usa una combinación de los operadores where e in para filtrar la lista de municipios, similar a otros lenguajes query. El reto es escribir una expresión M que genere la lista delimitada por comas de nombres de municipios en paréntesis al final de esta línea. Tomar el query de arriba y generar una tabla no dinámica DirectQuery en PowerBI es bastante directo, ahora asumamos que ya hemos creado un parámetro M llamado «Selected County»:
Así como una tabla con los nombres de los municipios:
Enlazamos la columna de Municipio de esta tabla al parámetro M «SelectedCounty» y activamos la opción Selección múltiple en Vista Modelo en la ventana principal:
Query M dinámico
Ahora viene algo que podría resultarnos confuso, y es que el parámetro M «SelectedCounty» que cree fue de tipo Text, pero el código de ejemplo en la documentación fue escrito por un parámetro M de tipo lista (siendo que no es posible crear un parámetro M de tipo lista en Power Query Editor). Resulta que cuando la opción de selección múltiple es activada, Power BI es capaz de enviar un valor de tipo lista al parámetro sin importar qué tipo tengamos definido para el mismo.
Teniendo esto en cuenta, aquí tenemos un ejemplo de un query M para generar el query usando el parámetro:
let
CountyList =
if
//check to see if the parameter is a list
Type.Is(
Value.Type(SelectedCounty),
List.Type
) then
//if it is a list
let
//add single quotes around each value in the list
AddSingleQuotes = List.Transform(
SelectedCounty,
each "'" & _ & "'"
),
//then turn it into a comma-delimited list
DelimitedList = Text.Combine(
AddSingleQuotes,
","
)
in
DelimitedList
else
//if the parameter isn't a list
//just add single quotes around the parameter value
"'" & SelectedCounty & "'",
//generate and run the KQL query
Source = AzureDataExplorer.Contents(
"https://mycluster.northeurope.kusto.windows.net",
"pricepaid",
"pricepaid#(lf)
| where county in
("
& CountyList &
")#(lf)
| summarize avg(price) by county",
[
MaxRows = null,
MaxSize = null,
NoTruncate = null,
AdditionalSetStatements = null
]
)
in
Source
Nótese que el paso CountyList tiene que revisar el tipo de datos del parámetro usando un statement if, por lo que en el Query Editor siempre será de tipo Text mientras que en el reporte será una lista si la selección múltiple está activada y Text si no.
Aquí tenemos el reporte final mostrando un separador de selección múltiple pasando valores dentro de este query:
Con esto terminamos la revision de la selección múltiple parámetros M en Power BI. Cualquier duda nos leemos abajo.
FUENTE:
https://blog.crossjoin.co.uk/2020/11/08/handling-multi-select-in-power-bi-dynamic-m-parameters/