Cómo reconocer códigos terrestres en una columna con estructura diferente

Un usuario Pregunto ✅

Anónimo

Estimados usuarios de pbi,

Estoy usando datos de Google Adwords y quiero que los costos sean visibles por código de terreno. La mayoría de los datos están estructurados como los marqué en la siguiente pantalla. Esto funciona bien porque puedo usar un delimitador «-«.

GuusDuker_0-1596178316675.png

Pero también hay datos donde el código de la tierra está después del segundo o tercer «-«.

GuusDuker_1-1596178492959.png

Mi objetivo es obtener los códigos de tierra en 1 columna, independientemente si el código de tierra está después del delimitador 1ste, 2nd o 3rd. es posible?

Gracias por adelantado.

Rocco_sprmnt21

En respuesta a Mariusz

debe clasificar de alguna manera los diversos casos y luego usar estos criterios dentro de bloques anidados si .. entonces .. else y extraer extraer las partes de interés con funciones como:

Text.AfterDelimiter ([Column1], «-«, {0, RelativePosition.FromEnd}))

cual extrae la parte final después del último «-«

y funciones similares que encuentres

Soy algo como el siguiente

Table.AddColumn (# «Tipo modificado», «Personalizado», cada uno si Text.StartsWith ([Column1], «DA») y luego Text.BetweenDelimiters ([Column1], «-«, «-«) más Text.AfterDelimiter ([Column1], «-«, {0, RelativePosition.FromEnd}))

https://docs.microsoft.com/it-it/powerquery-m/text-betweendelimiters

Mariusz

Hola @Anónimo

Puede usar Text.Split para dividir el texto en una lista
https://docs.microsoft.com/en-us/powerquery-m/text-split
Cree una tabla / lista adicional de todos los códigos de tierra y use List. Interseccione en el texto dividido por delimitador y la lista de todos los códigos, dará como resultado una lista de códigos de tierra si alguno coincide.
https://docs.microsoft.com/en-us/powerquery-m/list-intersect

Si desea ver una solución que funcione, pegue una muestra en el cuerpo de una publicación.

Atentamente,
Mariusz

Si esta publicación ayuda, entonces por favor considere Aceptándolo como la solución.

No dude en conectarse conmigo.
LinkedIn

Rocco_sprmnt21

En respuesta a Mariusz

debe clasificar de alguna manera los diversos casos y luego usar estos criterios dentro de bloques anidados si .. entonces .. else y extraer extraer las partes de interés con funciones como:

Text.AfterDelimiter ([Column1], «-«, {0, RelativePosition.FromEnd}))

cual extrae la parte final después del último «-«

y funciones similares que encuentres

Soy algo como el siguiente

Table.AddColumn (# «Tipo modificado», «Personalizado», cada uno si Text.StartsWith ([Column1], «DA») y luego Text.BetweenDelimiters ([Column1], «-«, «-«) más Text.AfterDelimiter ([Column1], «-«, {0, RelativePosition.FromEnd}))

https://docs.microsoft.com/it-it/powerquery-m/text-betweendelimiters

Rocco_sprmnt21

En respuesta a Rocco_sprmnt21

otra forma podría ser siguiendo este esquema

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcnHUdXFV0FVITy3KTcyrVIrVAYu5BQHF0ooS85JToUJAvnNUjXMUguvnXuPqB+ZmZGVkAwWystPTs7OADBdXsHBKegqQk5GWDiShKvNyc4EcN5dgkFCwUmwsAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Added Custom1" = Table.AddColumn(#"Changed Type", "Custom", each if Text.StartsWith([Column1],"DA") then Text.BetweenDelimiters([Column1], "-","-") else Text.AfterDelimiter ([Column1], "-",{0,RelativePosition.FromEnd})),
    #"Added Custom" = Table.AddColumn(#"Added Custom1", "Custom.1", each List.Select(Text.SplitAny([Column1]," -|"), each Text.Length(_)=2 and not Text.Contains(_,"DA"))),
    #"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Custom.1", each Text.Combine(List.Transform(_, Text.From), "|"), type text})
in
    #"Extracted Values"

o si el criterio de que el código de la tierra debe tener una longitud de 2 caracteres no siempre es cierto, pero es cierto que todos los códigos de la tierra son letras mayúsculas y todas las demás palabras, excepto «DA», se mezclan en mayúsculas y minúsculas:

    #"Added Custom2" = Table.AddColumn(#"Extracted Values", "Custom.2", each List.Select(Text.SplitAny([Column1]," -|"), each List.ContainsAll({"A".."Z"},Text.ToList(_)) and not Text.Contains(_,"DA"))),
    #"Extracted Values1" = Table.TransformColumns(#"Added Custom2", {"Custom.2", each Text.Combine(List.Select(_, each _ <>""), "|"), type text})

o …

los otros casos que conoces

Deja un comentario

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