Dividir el texto de CamelCase en una nueva columna

Un usuario Pregunto ✅

JeremyB

Así que aquí está el escenario, tengo 12 enumeraciones llegando a mi tabla. Los valores de texto de enumeración están en CamelCase y quiero dividirlos a la izquierda de cada letra mayúscula (excepto la primera letra, ya que es el comienzo del valor de texto de enumeración).

Ejemplo:

EnumOne -> Enum One

EnumTwo -> Enum Two

Etc.

¿Alguien puede darme algunas pautas sobre cómo debo hacer esto? Me gustaría hacerlo dentro de PowerBI dekstop a través de DAX o Power Query.

¡Gracias!

MarcelBeug

Es un poco confuso si desea dividir el texto (en una lista o en varias columnas) o insertar un espacio.

Supongo que desea insertar un espacio.

Esta es una solución de Power Query:

let
    Source = #table(type table[Enum = text],{{"EnumOne"},{"EnumTwo"}}),
    Splitted = Table.TransformColumns(Source,{{"Enum", each Text.Insert(_, Text.PositionOfAny(_,{"A".."Z"},Occurrence.Last)," "), type text}})
in
    Splitted

Editar: así es como se divide la columna en 2 columnas:

let
    Source = #table(type table[Enum = text],{{"EnumOne"},{"EnumTwo"}}),
    #"Split Column by Position" = Table.SplitColumn(Source, "Enum", each Splitter.SplitTextByPositions({0, Text.PositionOfAny(_,{"A".."Z"},Occurrence.Last)})(_), {"Enum.1", "Enum.2"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Position",{{"Enum.1", type text}, {"Enum.2", type text}})
in
    #"Changed Type"

Puede encontrar información sobre las funciones de Power Query en mi panel.

JeremyB

En respuesta a MarcelBeug

Sí, quiero poder dividir el texto con un espacio a la izquierda de cada letra mayúscula en una nueva columna calculada. Sin embargo, no necesariamente necesito mantener la columna original, solo necesito que el texto esté dividido.

Los probaré y veré si puedo hacer que funcionen. ¡Agradezco la ayuda!

EDITAR:

@MarcelBeug

¿Es posible hacerlo para cada letra mayúscula en lugar de para la última?

Ex.

EnumNumberOne -> Enum Number One

Intenté cambiar ‘Occurrence.Last’ a ‘Occurrence.All’, pero me dio un error.

MarcelBeug

En respuesta a JeremyB

Sí puede.

En tales casos, el mayor desafío es diseñar la consulta de manera que sea dinámica con respecto al número de columnas resultantes.

Esto requiere algo de programación del Editor avanzado, lo que da como resultado:

let
    Source = #table(type table[Enum = text],{{"EnumNumberOne"},{"EnumTwo"}}),
    Splitted = Table.TransformColumns(Source, {{"Enum", each Splitter.SplitTextByPositions(Text.PositionOfAny(_,{"A".."Z"},Occurrence.All))(_)}}),
    Tabled = Table.TransformColumns(Splitted,{{"Enum", each Table.FromColumns(List.Zip({_}))}}),
    ColumnNames = Table.ColumnNames(Table.Combine(Tabled[Enum])),
    NewColumnNames = List.Transform(ColumnNames, each "Enum."&Text.Middle(_,6)),
    ExpandedEnum = Table.ExpandTableColumn(Tabled, "Enum", ColumnNames, NewColumnNames),
    TransformList = List.Transform(NewColumnNames, each {_,type text}),
    Typed = Table.TransformColumnTypes(ExpandedEnum, TransformList)
in
    Typed

Resultado:

Camel Split.png

JeremyB

En respuesta a MarcelBeug

@MarcelBeug ¡Mis disculpas por la demora en la respuesta y gracias por la ayuda! Pude hacer que esto funcionara, aunque no es compatible con el modo de consulta directa. ¿Alguna sugerencia al respecto? Tengo otra forma de hacer esto fuera de PowerBI, por lo que no es el fin del mundo si no lo hay.

MarcelBeug

En respuesta a JeremyB

Hola, lo siento, no tengo experiencia real con el modo de consulta directa.
No creo que esto se pueda reescribir para que funcione en el modo de consulta directa.

Quizás alguien más pueda ayudarte con esto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *