Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Syndicate_Admin
Administrator
Administrator

Cómo rellenar espacios en blanco en la columna a través de Power Query

Hola

Tengo una columna "Países" y una columna "teléfono". En la columna "países" tengo datos en blanco pero quiero rellenarlos a través de Power Query con la ayuda de la columna "teléfono".

Pensé en usar cada número de teléfono en la columna "teléfono" que comienza con por ejemplo "+44", que esto agregará "Gran Británico" al punto en blanco y esto para todos los demás países.

¿Es posible?

2 ACCEPTED SOLUTIONS

Todo buen @Niels_T

He modificado el código ligeramente para tener en cuenta el formato verdadero de los números de teléfono (texto) con los que estamos tratando. Sustituya el código de (e incluya) el paso "Añadido Personalizado2" con este

    #"Added Custom2" = Table.AddColumn(#"Replaced Value23", "Custom", each if Text.Contains(Text.Start([telephone],3), "+44") or Text.Contains(Text.Start([telephone],4), "0044") then "Great Britain" 

        else if Text.Contains(Text.Start([telephone], 4) , "0032") then "Belgium" 

        else if Text.Contains(Text.Start([telephone], 3), "001") then "United States" 

        else if Text.Contains(Text.Start([telephone], 4) , "0061") then "Australia" 

        else null),

    #"Removed Columns2" = Table.RemoveColumns(#"Added Custom2",{"Countries"}),
    #"Renamed Columns2" = Table.RenameColumns(#"Removed Columns",{{"Custom", "Countries"}})
in
    #"Renamed Columns2"

En cuanto a los espacios en blanco, he escrito código para tener en cuenta los números del Reino Unido y el Belga, y he añadido un par de instrucciones extra si en ilustrar cómo modificar el código para otros países.

else if Text.Contains(Text.Start([telephone], 3), "001") then "United States" 

Puede ver que el código está comprobando los primeros 3 caracteres del número de teléfono (mediante la función Text.Start) para ver si coincide con (Text.Contains) la cadena "001". Si lo hace, entonces ese número de teléfono es de los Estados Unidos.

Para los números australianos, el código tiene que comprobar los primeros 4 caracteres para "0061".

Hopefulyl que deja claro cómo agregar código para otros países, pero si te quedas atascadojust publicar de nuevo.

saludos

Phil

View solution in original post

No @Niels_T

Lo siento, largo día, haciendo código en mi cabeza ....

#"Renamed Columns2" = Table.RenameColumns(#"Removed Columns2",{{"Custom", "Countries"}})

saludos

Phil

View solution in original post

14 REPLIES 14
Syndicate_Admin
Administrator
Administrator

No @Niels_T

Descargue este ejemplo de PBIX con código.

Si usted tiene los datos tal y como se muestra entonces los números de teléfono deben ser almacenados como texto para poder marcar para saber si hay ceros a la izquierda. Por lo tanto, el siguiente código de Power Query hará lo que desee. Esto se expande fácilmente para incluir más países.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W0jYxqQABJR0lpVidaCUDA4gAgm9shIUP5Dql5qRnluai63IvSk0sUXAqyixJzMxTio0FAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [telephone = _t, countries = _t]),
    #"Added Custom" = Table.AddColumn(Source, "Custom", each if Text.Contains([telephone], "+44") or Text.Contains([telephone], "0044") then "Great Britain" else if Text.Contains([telephone], "0032") then "Belgium" else null),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"countries"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Custom", "countries"}})
in
    #"Renamed Columns"

Empezando por esto

start-c.png

y dando este resultado

result-c.png

saludos

Phil

Estoy tratando de usar su método en mis datos reales, pero no funciona.

Aquí hay una captura de pantalla de mis datos. Como se puede ver en la parte superior contiene espacios en blanco que quiero rellenar a través de los códigos de teléfono.

image.png

Esto es lo que hay en mi editor avanzado. Usé Power Query antes para filtrar y cambiar valores

image.png

Traté de añadir a continuación mi última línea en dejar que el código que me proporcionó

Pero entonces no funciona.

No @Niels_T

Al proporcionar datos, copie o pegue o proporcione un archivo. Las capturas de pantalla son buenas para ver lo que tienes, pero no puedes trabajar con una captura de pantalla, tienes que escribir los datos manualmente.

Dijiste que intentaste agregar mi código, pero no funcionó. ¿Cómo es eso? ¿Recibiste un error?

La captura de pantalla no muestra dónde agregó mi código.

En la imagen de los datos, se rellena cada fila de la columna Países: ¿dónde están los espacios en blanco a los que se refiere?

Para agregar mi código al tuyo, primero agrega una coma al final de tu último paso "Valor reemplazado23" y luego elimina todo después de eso y reemplácelo con este

#"Added Custom2" = Table.AddColumn(Source, "Custom", each if Text.Contains([telephone], "+44") or Text.Contains([telephone], "0044") then "Great Britain" else if Text.Contains([telephone], "0032") then "Belgium" else null),
    #"Removed Columns2" = Table.RemoveColumns(#"Added Custom2",{"countries"}),
    #"Renamed Columns2" = Table.RenameColumns(#"Removed Columns2",{{"Custom", "countries"}})
in
    #"Renamed Columns2"

Si sigue teniendo problemas, proporcione el código de Power Query y los datos de ejemplo: elimine los últimos caracteres de cada número de teléfono para preservar la privacidad.

saludos

Phil

Hola Phil,

Gracias hasta ahora por el apoyo. Desearía poder proporcionar datos de muestra, pero sigo siendo un principiante y no sé inmediatamente cómo hacer esto.

Aquí está el código:

let
    Source = MySQL.Database("xxx.xx.xxx.xx", "xxxxxxx", [ReturnSingleDatabase=true]),
    xxxxxxxxxxxxxxx = Source{[Schema="xxxxxxxxxxxxx",Item="sales_flat_order_address"]}[Data],
    #"Renamed Columns" = Table.RenameColumns(xxxxxxxxxxxxxxxxxxxxx,{{"country_id", "Countries"}}),
    #"Removed Columns" = Table.RemoveColumns(#"Renamed Columns",{"vat_id", "vat_is_valid", "vat_request_id", "vat_request_date", "vat_request_success", "prefix", "middlename", "suffix", "company", "quote_address_id", "fax"}),
    #"Added Custom" = Table.AddColumn(#"Removed Columns", "Total Customers", each 1),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([address_type] = "billing") and ([email] <> "xxxxxxxxxxxxx" and [email] <> "xxxxxxxxxxxxxxxxx" and [email] <> "xxxxxxxxxxxxxxxx" and [email] <> "xxxxxxxxxxxxxxxx" and [email] <> "xxxxxxxxxxxxxxxxxxxxx" and [email] <> "xxxxxxxxxxxxxxxxxxxxxxxxxx")),
    #"Removed Duplicates" = Table.Distinct(#"Filtered Rows", {"telephone"}),
    #"Removed Duplicates1" = Table.Distinct(#"Removed Duplicates", {"email"}),
    #"Replaced Value" = Table.ReplaceValue(#"Removed Duplicates1","BE","Belgium",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value1" = Table.ReplaceValue(#"Replaced Value","DE","Germany",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value2" = Table.ReplaceValue(#"Replaced Value1","NL","Netherlands",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value3" = Table.ReplaceValue(#"Replaced Value2","FR","France",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value4" = Table.ReplaceValue(#"Replaced Value3","LU","Luxembourg",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value5" = Table.ReplaceValue(#"Replaced Value4","AT","Austria",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value6" = Table.ReplaceValue(#"Replaced Value5","CH","Switzerland",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value7" = Table.ReplaceValue(#"Replaced Value6","CZ","Czech Republic",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value8" = Table.ReplaceValue(#"Replaced Value7","DK","",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value9" = Table.ReplaceValue(#"Replaced Value8","EE","",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value10" = Table.ReplaceValue(#"Replaced Value9","ES","",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value11" = Table.ReplaceValue(#"Replaced Value10","FI","",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value12" = Table.ReplaceValue(#"Replaced Value11","FR","France",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value13" = Table.ReplaceValue(#"Replaced Value12","GB","",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value14" = Table.ReplaceValue(#"Replaced Value13","GR","",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value15" = Table.ReplaceValue(#"Replaced Value14","IE","",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value16" = Table.ReplaceValue(#"Replaced Value15","IT","Italy",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value17" = Table.ReplaceValue(#"Replaced Value16","LT","",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value18" = Table.ReplaceValue(#"Replaced Value17","LU","Luxembourg",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value19" = Table.ReplaceValue(#"Replaced Value18","NL","Netherlands",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value20" = Table.ReplaceValue(#"Replaced Value19","PL","Poland",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value21" = Table.ReplaceValue(#"Replaced Value20","SE","Sweden",Replacer.ReplaceText,{"Countries"}),
    #"Replaced Value22" = Table.ReplaceValue(#"Replaced Value21","SK","Slovakia",Replacer.ReplaceText,{"Countries"}),
    #"Filtered Rows1" = Table.SelectRows(#"Replaced Value22", each true),
    #"Replaced Value23" = Table.ReplaceValue(#"Filtered Rows1","MT","Malta",Replacer.ReplaceText,{"Countries"}),
    #"Added Custom2" = Table.AddColumn(Source, "Custom", each if Text.Contains([telephone], "+44") or Text.Contains([telephone], "0044") then "Great Britain" else if Text.Contains([telephone], "0032") then "Belgium" else null),
    #"Removed Columns2" = Table.RemoveColumns(#"Added Custom2",{"Countries"}),
    #"Renamed Columns2" = Table.RenameColumns(#"Removed Columns2",{{"Custom", "Countries"}})
in
    #"Renamed Columns2"

El mensaje de error que recibí es el siguiente:

image.png

Esto es extraño porque mi columna se llama Países.

Y sí, es posible que no vea los espacios en blanco inmediatamente, pero están definidamente en la tabla como se puede ver aquí:

image.png

Espero que esto pueda ayudar a encontrar una solución.

Saludos

Niels

Todo buen @Niels_T

He modificado el código ligeramente para tener en cuenta el formato verdadero de los números de teléfono (texto) con los que estamos tratando. Sustituya el código de (e incluya) el paso "Añadido Personalizado2" con este

    #"Added Custom2" = Table.AddColumn(#"Replaced Value23", "Custom", each if Text.Contains(Text.Start([telephone],3), "+44") or Text.Contains(Text.Start([telephone],4), "0044") then "Great Britain" 

        else if Text.Contains(Text.Start([telephone], 4) , "0032") then "Belgium" 

        else if Text.Contains(Text.Start([telephone], 3), "001") then "United States" 

        else if Text.Contains(Text.Start([telephone], 4) , "0061") then "Australia" 

        else null),

    #"Removed Columns2" = Table.RemoveColumns(#"Added Custom2",{"Countries"}),
    #"Renamed Columns2" = Table.RenameColumns(#"Removed Columns",{{"Custom", "Countries"}})
in
    #"Renamed Columns2"

En cuanto a los espacios en blanco, he escrito código para tener en cuenta los números del Reino Unido y el Belga, y he añadido un par de instrucciones extra si en ilustrar cómo modificar el código para otros países.

else if Text.Contains(Text.Start([telephone], 3), "001") then "United States" 

Puede ver que el código está comprobando los primeros 3 caracteres del número de teléfono (mediante la función Text.Start) para ver si coincide con (Text.Contains) la cadena "001". Si lo hace, entonces ese número de teléfono es de los Estados Unidos.

Para los números australianos, el código tiene que comprobar los primeros 4 caracteres para "0061".

Hopefulyl que deja claro cómo agregar código para otros países, pero si te quedas atascadojust publicar de nuevo.

saludos

Phil

Agregué el código debajo del mío.

Todavía estoy haciendo algo mal, pero no sé qué porque ahora recibo este mensaje de error:image.png

    #"Replaced Value22" = Table.ReplaceValue(#"Replaced Value21","SK","Slovakia",Replacer.ReplaceText,{"Countries"}),
    #"Filtered Rows1" = Table.SelectRows(#"Replaced Value22", each true),
    #"Replaced Value23" = Table.ReplaceValue(#"Filtered Rows1","MT","Malta",Replacer.ReplaceText,{"Countries"}),
    #"Added Custom2" = Table.AddColumn(#"Replaced Value23", "Custom", each if Text.Contains(Text.Start([telephone],3), "+44") or Text.Contains(Text.Start([telephone],4), "0044") then "Great Britain" 

        else if Text.Contains(Text.Start([telephone], 4) , "0032") then "Belgium" 

        else if Text.Contains(Text.Start([telephone], 3), "001") then "United States" 

        else if Text.Contains(Text.Start([telephone], 4) , "0061") then "Australia" 

        else null),

    #"Removed Columns2" = Table.RemoveColumns(#"Added Custom2",{"Countries"}),
    #"Renamed Columns2" = Table.RenameColumns(#"Removed Columns",{{"Custom", "Countries"}})
in
    #"Renamed Columns2"

Siento @Niels_T que es mi culpa. Hay un error tipográfico en mi código. Es difícil cuando en realidad no tengo los datos delante de mí.

Sustituya la línea "Columnas renombradas2" por esta

#"Renamed Columns2" = Table.RenameColumns(#"Removed Columns",{{"Custom", "Countries"}})

saludos

Phil

Hola @PhilipTreacy ,

Todavía recibo el mismo mensaje de error que no se puede encontrar personalizado.

"Columnas renombradas2" - Table.RenameColumns("Columnas eliminadas","Custom", "Países" )


Creo que la línea es exactamente la misma que la línea que debo reemplazar?

No @Niels_T

Lo siento, largo día, haciendo código en mi cabeza ....

#"Renamed Columns2" = Table.RenameColumns(#"Removed Columns2",{{"Custom", "Countries"}})

saludos

Phil

Muchas gracias @PhilipTreacy !!!

¡Está funcionando! Ahora sólo tengo que asegurarme de que agredo todos los códigos telefónicos y luego todo es perfecto!

Gracias de nuevo!!!

Syndicate_Admin
Administrator
Administrator

No @Niels_T ,

¿Puede compartir algunos datos de muestra y el resultado esperado para tener una comprensión clara de su pregunta?

Puedes guardar tus archivos en OneDrive, Google Drive o cualquier otra plataforma de uso compartido en la nube y compartir el enlace aquí.

Saludos

Yuna

image.png

No sé cómo hacer algunos datos de muestra, pero esta captura de pantalla podría explicar un poco lo que me gustaría lograr.

Syndicate_Admin
Administrator
Administrator

@Niels_T

Necesitará tener una tabla que tenga códigos de teléfono que se vinculan a cada país. Por lo que su tabla tendrá 2 columnas - Código de teléfono y país.

A continuación, puede extraer el código de teléfono de la columna de teléfono de la primera tabla y, a continuación, combinar la primera tabla y la nueva tabla con los códigos de teléfono.

¿Cómo puedo crear una nueva tabla con estas columnas y países de código de teléfono?

Lo intenté con DAX, pero no puedo obtener el resultado que quería.

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors