Extracción de datos de texto de varias líneas

Un usuario Pregunto ✅

cmalopez

Tengo una columna con varias filas de comentarios. Cada fila de esta columna contiene varias líneas de texto con una estructura con registros de productos como este:

2018-11-21 12:22:15 – Producto x (Comentario)

Aquí puede aparecer cualquier comentario.

2018-11-20 13:49:41 – Producto x (Comentario)

Aquí nuevamente puede aparecer cualquier comentario.

2018-11-17 16:42:41 – Producto y (Comentario)

Aquí nuevamente puede aparecer cualquier comentario.

2018-11-16 11:29:11 – Producto a (Comentario)

Aquí nuevamente puede aparecer cualquier comentario.

Entonces, esta columna tiene varias líneas de comentarios, pero siempre hay un encabezado con una fecha y un nombre de producto. No hay límite en la cantidad de registros de productos que pueden aparecer y también pueden aparecer productos repetidos (con diferentes fechas y horas). Los productos se pueden relacionar con dos categorías diferentes, Categoría 1 (tengo una columna llamada Categoría 1 con todos los valores de productos posibles para esta categoría) y Categoría 2 (tengo otra columna llamada Categoría 2 con todos los valores de productos posibles para esta categoría).

Los últimos productos de categoría, por tiempo récord, siempre son de categoría 2, pero algunas veces pueden ser solo registros de categoría 1.

Lo que necesito es extraer todos los registros de productos (eliminando otros comentarios), verificar el momento en que los registros de productos cambian de Categoría 1 a Categoría 2 (puede ocurrir solo una vez) y crear dos columnas, una con este último registro de producto para Categoría 1 y otra con registro de producto para la Categoría 2 (solo registros, sin comentarios). Quiero usar los datos de esta columna para medir el tiempo transcurrido entre el cambio de producto de la Categoría 1 a la Categoría 2.

Espero haber sido claro con mis explicaciones y muchas gracias por vuestra ayuda.

Hola @cmalopez,

1. Divida la columna como se muestra en la imagen a continuación.

Captura.PNG

2. Divida la Columna 1.2 en función de «C», luego podemos obtener el resultado como se muestra a continuación.

2 PNG

Código M para su referencia.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("dcrNCkBAFAbQV/maFWXKd42/u/UC9pOFsESJ4u1tZ4qzPt4bydlY0gpBURFlCYv+2OdrOnEjQbev67KdqRmyoOdgoa5Vx7h/btZgpU7i/fztCqRKqwz3GO7hBQ==", 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}}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type", "Column1", Splitter.SplitTextByEachDelimiter({"-"}, QuoteStyle.Csv, true), {"Column1.1", "Column1.2"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1.1", type datetime}, {"Column1.2", type text}}),
    #"Split Column by Delimiter1" = Table.SplitColumn(#"Changed Type1", "Column1.2", Splitter.SplitTextByEachDelimiter({"("}, QuoteStyle.Csv, false), {"Column1.2.1", "Column1.2.2"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"Column1.2.1", type text}, {"Column1.2.2", type text}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type2",{"Column1.2.2"})
in
    #"Removed Columns"

cmalopez

En respuesta a v-frfei-msft

Muchas gracias, pero esto no es lo que necesito. Voy a pegar un mejor ejemplo. En esta tabla, en la columna Notas de trabajo, puede ver que tenemos varias líneas con diferentes registros de soporte. Tenemos dos niveles de soporte diferentes, el Nivel 1 y el Nivel 2. Necesito medir los tiempos transcurridos cada vez que hay una tarea del Nivel 1 al Nivel 2 (Necesito saber el tiempo de la tarea). Las personas de nivel 2 son de la casa Stark xD, así que puedes ver lo que debería aparecer en las columnas Último registro de nivel 1, Registro de nivel 2 y Tiempo transcurrido. En las dos primeras filas, todavía no hay asignado el Nivel 2 (no hay registro de Stark) pero en la última fila hay un registro de Sansa, por lo que son los valores que deberían aparecer. Para verificar si una persona es de soporte de Nivel 1 o Nivel 2, tengo dos tablas tLvl1 y tLvl2. Por lo tanto, debería buscar en la columna Notas de trabajo todos los registros de soporte y encontrar el momento en el que hay una escalada entre el Nivel 1 y el Nivel 2.

Muchas gracias.

Notas de trabajo Última bitácora de nivel 1 Bitácora de nivel 2 Tiempo de asignación

2019-04-17 17:19:50 – Varys (Notas de trabajo)
Estimado equipo de soporte de Global Level 2,

¿Podría por favor ayudar?
Gracias,

Atentamente,
Apoyo

2019-04-17 17:03:47 – Jaime Lannister (Notas de trabajo)
Ticket escalado.

Estimado equipo de soporte local de nivel 1:

¿Podría por favor ayudar?
Amable

Atentamente,

2019-04-17 17:02:14 – Jaime Lannister (Notas de trabajo)
Asignado a mí.
Breve descripción y campos de descripción actualizados.

2019-04-17 17:19:50 – Varía aún no asignado
2019-04-17 16:33:51 – Robert Baratheon (notas de trabajo)
Estimado equipo de soporte de Global Level 2,

¿Podría por favor ayudar?
Gracias por tus esfuerzos.

Atentamente,

2019-04-17 16:24:10 – Theon Greyjoy (notas de trabajo)
Ticket escalado.
-e-mail enviado al usuario informando sobre la escalada.

2019-04-17 16:22:52 – Jaime Lannister (Notas de trabajo)
Asignado a mí.
breve descripción y descripción actualizada.

KA usado: No se encontró KBA

Solución de problemas:
Escalado al equipo de soporte local de nivel 1

Grupo de resolución sugerido: equipo de soporte local de nivel 1

Próxima acción: Escalamiento del ticket.

2019-04-17 16:02:48 – Viserys Targaryen (Notas de trabajo)
Asignado al agente

2019-04-17 16:33:51 -Robert Baratheon aún no asignado
2019-04-16 16:07:34 – Sansa Stark (notas de trabajo)
Problemas con el sistema POS.

2019-04-13 11:48:07 – Tyrion Lannister (notas de trabajo)
Querido equipo,

El precio del artículo es incorrecto
Captura de pantalla adjunta
¿Podría por favor ayudar?
Gracias,

Atentamente,
Equipo de soporte local de nivel 1

2019-04-13 11:32:32 -Khal Drogo (notas de trabajo)
Enviado correo sobre la escalada
Establecer en L2

2019-04-13 11:31:42 – Melisandre (notas de trabajo)
KA usado: No se encontró KBA

Solución de problemas:
servicios reiniciados,
Archivo de transferencia renombrado,
Integrado el archivo de transferencia,
WST reiniciado,

Grupo de resolución sugerido: equipo de soporte local de nivel 1

Próxima acción: Escalamiento

2019-04-13 11:48:07 – Tyrion Lannister 2019-04-16 16:07:34 – Sansa Stark Tiempo transcurrido entre el registro de Sansa y el registro de Tyrion

cmalopez

Hola de nuevo.

Si es posible, preferiría usar una solución de consulta de energía.

Gracias de nuevo.

Deja un comentario

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