miércoles, 14 de diciembre de 2022

Power Query: Combinaciones Sin Repetición List.TransformMany

Se ha escrito bastante sobre el tema de obtener, a partir de una lista, posibles combinaciones sin repetición.
En este artículo emplearemos la función List.TransformMany para llegar a nuestro listado de combinaciones... en este caso, sencillo, tomados de dos en dos...

Veamos nuestro código creado en una Consulta en blanco dentro del editor de Power Query:
let
    //Nuestra lista de elementos a combinar dos a dos
    Lista={"A","B","C","D","E","F"},
    
    //para generar las combinaciones posibles
    //excluyendo la de dos elementos iguales
    Combinaciones = List.TransformMany(
                    Lista,
                    (dos)=> Lista,
                    (uno, dos)=> let orden=List.Sort({uno,dos}) in 
                            if orden{0}=orden{1} then null else orden{0} & " | " & orden{1} ),
    
    //List.Distinc se encarga de eliminar combinaciones repetidas...
    SinRepeticion=List.Distinct(List.RemoveNulls(Combinaciones))
in
    SinRepeticion

La clave es el uso de List.Transformmany que se encarga de recorrer cada elemento de la lista del primer argumento (nuestra lista de letras {"A","B","C","D","E","F"} ), sobre cada elemento de la lista del segundo argumento (la misma lista de letras{"A","B","C","D","E","F"} ).
El tercer argumento realiza el proceso de transformación, donde procedemos a ordenar alfabéticamente ambos elementos en primer lugar, lo que nos facilitará la etapa posterior de eliminar 'duplicados'.

En este tercer argumento, además, aplicamos una condición para dejar fuera aquellos pares transformados con elementos iguales
:OOO

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.