Extracción de texto SI se cumplen estas condiciones (Power Query)

Un usuario Pregunto ✅

campeliano

Hola,

Necesito que mis colegas llenen un campo de ID de proyecto, el problema es que hay muchos dígitos y algunas personas se olvidan de poner algunos ceros. Ej. P2019000000555 algunas personas ponen P20190555, por ejemplo. (Necesito hacer una especie de «sumif», del trabajo realizado en cada ID.

Para solucionar esto, estoy pensando en un campo de identificación simplificado, que extrae los 5 primeros caracteres y los últimos 4. Esto debería resolver la mayoría de mis problemas (aunque estoy abierto a otras ideas). Aunque quiero hacer esta extracción (primeros 5, últimos 4) solo cuando la ID comienza con P2018, P2019, P2020, etc. Más ejemplos.

ID: P2019000000723 – transformar a P20190723

ID: P20200000005233- transformar a P20205233

ID: PAC1241 – permanece igual

ID: MP2323 – permanece igual.

¡Muchas gracias!

En respuesta a campeliano

Hola, @campelliann

Puede intentar agregar una columna personalizada con los siguientes códigos. El archivo pbix se adjunta al final.

let 
len = Text.Length([ID]),id = [ID]
in
if Text.Contains("ID","P20") and len>=9 then
Text.Middle(id,0,5)& Text.Middle(id,len-4,len-1)
else id)

Resultado:

a1.png

Atentamente

Alano

Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola, @campelliann

Según su descripción, creé datos para reproducir su escenario. El archivo pbix se adjunta al final.

Tabla:

g1.png

Puede agregar una columna personalizada con los siguientes códigos en ‘Editor de consultas’.

let 
len = Text.Length([ID]),id = [ID]
in
if len>=9 then
Text.Middle(id,0,5)& Text.Middle(id,len-4,len-1)
else id

Resultado:

g2.png

Atentamente

Alano

Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.

campeliano

En respuesta a v-alq-msft

Hola allan,

Esto casi funciona, el problema es que tengo algunos campos de texto cuya longitud es >= 9, y quiero que permanezcan igual.

¿Es posible, en lugar de usar la condición len>=9, si el texto contiene «P20??».

Muchas gracias

En respuesta a campeliano

Hola, @campelliann

Puede intentar agregar una columna personalizada con los siguientes códigos. El archivo pbix se adjunta al final.

let 
len = Text.Length([ID]),id = [ID]
in
if Text.Contains("ID","P20") and len>=9 then
Text.Middle(id,0,5)& Text.Middle(id,len-4,len-1)
else id)

Resultado:

a1.png

Atentamente

Alano

Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.

lbendlin

¿Como esto?

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCjAyMLQ0AANzI2OlWB2wkBFExMDUyBgq5uhsaGRiCGb7BhgZg5TGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    #"Added Custom" = Table.AddColumn(Source, "Custom", each if Text.Length([Column1])>9 then Text.Start([Column1],5) & Text.End([Column1],4) else [Column1])
in
    #"Added Custom"

mahoneypat

En el editor de consultas, simplemente resalte esa columna y haga clic en Reemplazar valores en la cinta. Ingrese «000000» y «null» en los dos campos de la ventana emergente (sin las comillas) y presione Aceptar.

Si esto funciona para usted, por favor márquelo como la solución. También se agradecen los elogios. Por favor, hágamelo saber si no.

Saludos,

Palmadita

Deja un comentario

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