Extraiga todos los caracteres EXCEPTO la última cantidad X

Un usuario Pregunto ✅

A_Ali

Hola a todos:

Después de acechar durante meses, finalmente me sentí obligado a hacer una pregunta…

Tengo 10 columnas que incluyen 22 caracteres hacia el final, así que intento extraer todo excepto los últimos 22 caracteres. No puedo usar la función Extraer de la pestaña Transformar porque solo ofrece opciones para extraer el primero x cantidad de caracteres.

Traté de hackearlo como se puede en las funciones IZQUIERDA/DERECHA de Excel usando un número negativo, pero Power BI no permite esa funcionalidad en M Language.

La forma de evitar esto que he encontrado es tediosa, pero me temo que haría que mi consulta fuera demasiado inflada.

1) Agregue 10 columnas nuevas, todas haciendo un Text.Reverse() en sus valores,

2) ejecutar el Extracto de 22 caracteres

3) Agregue otras 10 columnas a Text.Reverse() para deshacer el reverso inicial. Esto me da el valor final que quería.

4) Eliminar 10 columnas añadidas así como las 10 columnas originales

Siento que debería poder hacer esto transformando las columnas en lugar de agregar 20 nuevas, pero no pude averiguar cómo ejecutar Text.Reverse (Anidado dentro de una instrucción If Then Else) en varias columnas. Intenté escribir una declaración usando Table.TransformColumns en lugar de TableAddColumn pero no es posible o lo estaba haciendo mal.

¿Es esta realmente la forma más eficiente de hacer esto?

CC: @VThai81

alexvc

Hola,

Esta es la forma más eficiente en que puedo pensar en hacerlo:

Medida = IZQUIERDA (Columna, LEN (Columna) -22)

Déjame saber si funciona,

Alejandro

crismendoza

@A_Ali –

¿Quieres algo como:

2 PNG

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WKs7PTVUoLilNS1MwNDI2MTUzt7A0QGYpxcYCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [col1 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"col1", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each Text.Replace([col1],Text.End([col1],22),""))
in
    #"Added Custom"

A_Ali

En respuesta a crismendoza

¡Sí! Esto resolvería a medias el problema… la otra parte que quiero es que transforme la columna existente en lugar de crear una nueva.

¡Gracias!

crismendoza

En respuesta a A_Ali

@A_Ali –

La opción 1 es eliminar la columna que ya no se necesita.

La opción 2 es aprender más sobre las funciones. 🙂

De mi solución en una publicación anterior @ https://community.powerbi.com/t5/Desktop/New-column-with-contents-and-complete-with-0-on-left-side/m…

Modificado a su situación:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WKs7PTVUoLilNS1MwNDI2MTUzt7A0QGYpxcYCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [col1 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"col1", type text}}),
    Custom1 = Table.ReplaceValue(#"Changed Type",each [col1],each Text.Replace([col1],Text.End([col1],22),""),Replacer.ReplaceValue,{"col1"})
in
    Custom1

BekahLoSurdo

Hola @A_Ali,

En una columna personalizada, use Text.End:

Text.End(«abcd», 2) es igual a «cd»

¿Eso ayuda?

Beca

A_Ali

En respuesta a BekahLoSurdo

Gracias, pero creo que me malinterpretaste. Sé que mi pregunta fue un poco larga, así que pido disculpas.

Esa solución me dará los últimos 22 en lugar de eliminarlos. Text.End es la función que se utiliza yendo a Transformar->Últimos caracteres…

Gracias por mirar en esto

BekahLoSurdo

En respuesta a A_Ali

Lo siento, no entendí bien. Prueba esto:

= Text.Start( [Column], Text.Length( [Column] ) - 22 )

A_Ali

En respuesta a BekahLoSurdo

Gracias por la ayuda, tengo la sensación de que esto está cerca, pero una vez más me encuentro con el problema de que Power BI no permite valores negativos en la función Text.Start sonriente frustrado

Deja un comentario

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