miércoles, 31 de julio de 2019

Power Query: Eliminar espacios en blanco sobrantes

Hoy lucharemos, con Power Query, con una situación siempre incomoda como son los espacios en blanco sobrantes.

Power Query: Eliminar espacios en blanco sobrantes



Sin duda en la hoja de cálculo la solución es simple, usar la función ESPACIOS(texto), la cual elimina por el principio, por el final y por medio los espacios en blanco sobrantes...
Solo una limitación, elimina solo el caracter espacio en blanco.


En el entorno de Power Query (Obtener y transformar) disponemos de las siguientes funciones de Texto:
Text.TrimStart(texto inicial, opcional caracter a eliminar):
Elimina el caracter indicado, o el espacio en blanco si se omite, pero solo por el inicio del texto (por la izquierda)
Text.TrimEnd(texto inicial, opcional caracter a eliminar):
Elimina el caracter indicado, o el espacio en blanco si se omite, pero solo por el final del texto (por la derecha)
y
Text.Trim(texto inicial, opcional caracter a eliminar):
Elimina el caracter indicado, o el espacio en blanco si se omite, pero por el inicio y final del texto (NO en medio!!!)


Podemos ver el efecto en la imagen anterior, donde se observa el efecto de aplicar Text.Trim al campo inicial

Power Query: Eliminar espacios en blanco sobrantes


Comprobamos con el conteo de caracteres añadido, como se han eliminado los espacios sobrantes a izquierda y derecha, pero se mantienen los espacios duplicados en medio de los textos!!.

Un pequeño contratiempo para Power Query, que a cambio ofrece la opción de 'limpiar' de cualquier caracter (y no solo del espacio en blanco como la función ESPACIOS) las cadenas de texto.


La solución la encontré leyendo a Ken Puls donde mostraba como crear una función personalizada en el editor de Power Query que replicara el efecto deseado.
Puedes recordar aquí como crear una función en Power Query.

La función tendría esta forma:
(texto_inicial as text, optional caracter_a_eliminar as text) =>
//Función creada por Ken Puls de excelguru.ca
let
    //Identificamos el caracter a eliminar... si no indicamos nada cogerá un 'espacio en blanco'
    caracter = if caracter_a_eliminar = null then " " else caracter_a_eliminar,
    //Separamos la cadena de texto por el caracter, en diferentes palabras o partes
    split = Text.Split(texto_inicial, caracter),
    //solo nos quedamoso con las partes que contengan algo..
    //esto es, dejamos fuera las partes de los espacios en blanco
    EliminaEspacios = List.Select(split, each _ <> ""),
    //y finalmente, de las partes no vacías anteriores, recomponemos el texto inicial
    //ya limpio de esos caracteres indicados...
    Resultado_limpio=Text.Combine(EliminaEspacios, caracter)
in
    Resultado_limpio

Power Query: Eliminar espacios en blanco sobrantes



Con la función creada, la ponemos a prueba con la consulta siguiente:
let
    Origen = Excel.CurrentWorkbook(){[Name="Tabla1"]}[Content],
    #"Tipo cambiado" = Table.TransformColumnTypes(Origen,{{"textos", type text}, {"Num caracteres", Int64.Type}}),
    #"Personalizada agregada" = Table.AddColumn(#"Tipo cambiado", "Text.Trim", each Text.Trim([textos])),
    #"Personalizada agregada1" = Table.AddColumn(#"Personalizada agregada", "Contar1", each Text.Length([Text.Trim])),
    #"Personalizada agregada2" = Table.AddColumn(#"Personalizada agregada1", "Elimina Espacios", each EliminaEspacios([textos])),
    #"Personalizada agregada3" = Table.AddColumn(#"Personalizada agregada2", "Contar2", each Text.Length([Elimina Espacios]))
in
    #"Personalizada agregada3"


Power Query: Eliminar espacios en blanco sobrantes



Comprobamos como ahora si, en el campo 'Elimina Espacio', el uso de nuestra función, limpia de los caracteres no deseados el texto de partida.

Power Query: Eliminar espacios en blanco sobrantes

No hay comentarios:

Publicar un comentario

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