Simular un lookupvalue cuando el resultado es más de un valor.

Simular un lookupvalue cuando el resultado es más de un valor.

Ante una consulta como siempre en el grupo de Telegram que me pareció bastante atractiva de resolver, estas fueron mis conclusiones sobre la simulación de un LOOKUPVALUE que pueda devolver más de un elemento.

Dice la documentación oficial de LOOKUPVALUE() lo siguiente:

“Si varias filas coinciden con los valores de búsqueda y en todos los casos los valores de result_column son idénticos, se devuelve ese valor. Pero si result_column devuelve valores distintos, se devuelve un error o alternateResult, si se proporciona”

Visto de modo práctico:

Tenemos la siguiente tabla ORIGEN:

Y la siguiente de DESTINO donde queremos usar LOOKUPVALUE para traernos los nombres.

Si creamos una columna calculada en el destino nos ocurre esto:

Nos devuelve un error debido a que el resultado en alguno de los campos es más de un valor.

Modos de solucionarlo:

1º Proponiendo que nos devuelva un resultado alternativo cuando haya error para saltárselo:

Si añadimos “Varios” como resultado alternativo va a mostrarnos Varios en aquellos campos donde el resultado es más de uno.

2º vamos a hacer un poco de Magia con DAX y vamos a simular un LOOKUPVALUE en una columna calculada, pero para que nos devuelva el resultado de todos los elementos concatenados en caso de que haya más de un valor:

Tenemos que crear una tabla virtual con los valores que corresponden para cada tipo que introducimos en una variable

    VAR __TablaValores = CALCULATETABLE( VALUES(LookupValue_Origen[Nombre]) ,

                                TREATAS({Lookupvalue_Destino[Tipo]}, LookupValue_Origen[Tipo])

                                        )

Y devolvemos la concatenación de los elementos de cada tabla:

    RETURN

    CONCATENATEX(__TablaValores,LookupValue_Origen[Nombre], «, «)  

Como lo estamos haciendo en una columna calculada, a nivel de cada línea, va a analizar el tipo de cada una de las líneas y lo va a relacionar gracias a la función TREATAS con todos los valores devueltos para ese tipo que vamos a concatenar con la función CONCATENATEX

Podemos incluso controlar el número de valores que queremos mostrar utilizando la función TOPN. Imaginad que queremos que nos muestre sólo los dos primeros valores y el número de valores que contiene, pues simplemente arreglamos nuestra fórmula de esta manera:

Siempre hay que tener en cuenta en este tipo de columnas su performance, puede no ser óptimo su rendimiento con un número elevado de filas, hay que tener en cuenta que estamos usando dos prácticas poco recomendadas:

1º El uso de columnas calculadas.

2º El uso de relaciones débiles con la función TREATAS

FranM

Hasta ahora, 1 comentario

jose Publicado el1:06 pm - 07/10/2020

Excelente solución, gracias Fran

Deja una respuesta