Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
5 years ago
Solved

Extraiga ZIP de Address con DAX o PowerQuery

Hola a todos,

Tener un problema al analizar un código postal de un campo de dirección. El origen de datos no tiene un campo de código postal dedicado y necesitamos extraer el código postal de una dirección postal completa. Por ejemplo, si tenemos una columna "dirección" con el texto siguiente, queremos extraer "20500" en una nueva columna calculada. También debemos tener en cuenta que el formato de las entradas de dirección no son necesarios coherentes (es decir, las comas no siempre están en el mismo lugar, dirección no siempre en el mismo orden).

Lo ideal es extraer un número de 5 dígitos de una cadena.

"1600 Pennsylvania Avenue NW, Washington, DC 20500, Estados Unidos" - "20500" usando una fórmula

Gracias de antemano,

Mk

  • @MiCody Puede realizar alguna búsqueda de python o R regex e incluirla en su consulta de potencia como una opción. Me acercaría un poco más simple primero y analizar los datos a la derecha de la primera coma, a continuación, simplemente mantener sólo los valores numéricos.

    DataZoe_2-1611783624730.png

    Puede ver que pegando esto en el editor avanzado de una consulta en blanco:

    Dejar
    Source: Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQzMFAISM3LK67MKUvMy0xUcCxLzStNVfAL11EITyzOyMxLL8nP01FwcVYwMjA1MNBRCM3LLElNUQguSxJLVaK1SHDEEK6qG0zbjNiAQ", BinaryEncoding.Base64), Compression.Deflate)), let _t á ((tipo de texto que acepta valores NULL) meta [Serialized.Text ? true]) en la tabla de tipos [Column1 ? _t]),
    "Tipo de cambio" - Table.TransformColumnTypes(Source,'Column1', escriba text'),
    "Columna duplicada" - Table.DuplicateColumn(-"Changed Type", "Column1", "Column1 - Copy"),
    "Texto extraído después del delimitador" - Table.TransformColumns('Columna duplicada','Column1 - Copy'', cada Text.AfterDelimiter(_, ","), escriba text'),
    "Dividir columna por transición de caracteres" ? Table.SplitColumn('"Texto extraído después del delimitador", "Column1 - Copy", Splitter.SplitTextByCharacterTransition((c) ?> not List.Contains('0"." 9", c), "0"." 9"-), "Column1 - Copy.1", "Column1 - Copy.2"-),
    "Dividir columna por transición de caracteres1" á Table.SplitColumn('Dividir columna por transición de caracteres", "Column1 - Copy.2", Splitter.SplitTextByCharacterTransition(''0'." 9", (c) > no List.Contains("0"." 9", c)), "Columna1 - Copia.2.1", "Columna1 - Copiar.2.2"-),
    "Columnas eliminadas" - Table.RemoveColumns(-"Dividir columna por transición de caracteres1","Column1 - Copy.1", "Column1 - Copy.2.2"-),
    "Columnas renombradas" - Table.RenameColumns("Columnas eliminadas","Columna1 - Copy.2.1", "Zip" )
    En
    "Columnas renombradas"

3 Replies

  • @MiCody Puede realizar alguna búsqueda de python o R regex e incluirla en su consulta de potencia como una opción. Me acercaría un poco más simple primero y analizar los datos a la derecha de la primera coma, a continuación, simplemente mantener sólo los valores numéricos.

    DataZoe_2-1611783624730.png

    Puede ver que pegando esto en el editor avanzado de una consulta en blanco:

    Dejar
    Source: Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQzMFAISM3LK67MKUvMy0xUcCxLzStNVfAL11EITyzOyMxLL8nP01FwcVYwMjA1MNBRCM3LLElNUQguSxJLVaK1SHDEEK6qG0zbjNiAQ", BinaryEncoding.Base64), Compression.Deflate)), let _t á ((tipo de texto que acepta valores NULL) meta [Serialized.Text ? true]) en la tabla de tipos [Column1 ? _t]),
    "Tipo de cambio" - Table.TransformColumnTypes(Source,'Column1', escriba text'),
    "Columna duplicada" - Table.DuplicateColumn(-"Changed Type", "Column1", "Column1 - Copy"),
    "Texto extraído después del delimitador" - Table.TransformColumns('Columna duplicada','Column1 - Copy'', cada Text.AfterDelimiter(_, ","), escriba text'),
    "Dividir columna por transición de caracteres" ? Table.SplitColumn('"Texto extraído después del delimitador", "Column1 - Copy", Splitter.SplitTextByCharacterTransition((c) ?> not List.Contains('0"." 9", c), "0"." 9"-), "Column1 - Copy.1", "Column1 - Copy.2"-),
    "Dividir columna por transición de caracteres1" á Table.SplitColumn('Dividir columna por transición de caracteres", "Column1 - Copy.2", Splitter.SplitTextByCharacterTransition(''0'." 9", (c) > no List.Contains("0"." 9", c)), "Columna1 - Copia.2.1", "Columna1 - Copiar.2.2"-),
    "Columnas eliminadas" - Table.RemoveColumns(-"Dividir columna por transición de caracteres1","Column1 - Copy.1", "Column1 - Copy.2.2"-),
    "Columnas renombradas" - Table.RenameColumns("Columnas eliminadas","Columna1 - Copy.2.1", "Zip" )
    En
    "Columnas renombradas"

  • @MiCody ya que tu dirección no siempre es la misma, comprueba este post y comprueba si puedes ajustarlo para satisfacer tus necesidades.

    Consulta mi última entrada de blog Comparar escenarios presupuestados con frente a datos reales Me gustaría elogios si mi solución ayudara. 👉 Si puedes dedicar tiempo a publicar la pregunta, también puedes hacer esfuerzos para dar Felicitaciones a quien haya ayudado a resolver tu problema. ¡Es una muestra de agradecimiento!

    Visítenos en https://perytus.com, su ventanilla única para proyectos/formación/consulta relacionadas con Power BI.