garycarters
Hola a todos
Tengo una tabla que contiene varios registros de control. Cada registro de control puede dictar el comportamiento de un aspecto de nuestro sistema y puede ser una cadena, un indicador, un nombre de archivo o una lista de datos. Mi pregunta se relaciona con los registros que definen listas de datos.
Las listas de datos comprenden un prefijo («Lista:») seguido de una lista de índices y descripciones. Por ejemplo;
Lista: «1», «Descripción 1», «1», «Descripción 1», «2», «Descripción 2», «3», «Descripción 3», etc.
Quiero acceder a esas descripciones según el índice utilizado por el registro del cliente: cada cliente está adjunto a un índice en el registro del cliente.
¿Cómo puedo dividir la lista en una tabla de índice, descripción? Intenté usar Split Column por delimitador que funciona pero da una fila en la salida para cada elemento;
1
Descripción 1
2
Descripción 2
3
Descripción 3
etc.
sólo quiero
1 Descripción 1
2 Descripción 2
3 Descripción 3
etc.
Luego puedo unir el índice de clientes al índice de descripción.
AIT
mariusz
En respuesta a garycarters
Hola @garycarters
1. Crear nueva fuente >> Consulta en blanco
2. Vaya al Editor avanzado y pegue el código de función proporcionado.
3. En su tabla, vaya a la cinta Agregar columna y busque Invocar función personalizada
4. En la sección Consulta de función, seleccione la función que ha creado (muy probablemente Consulta1 si no ha cambiado el nombre).
5. En la sección de su columna, cambie ABC a Nombre de columna y seleccione ListData de la lista desplegable, luego presione OK para confirmar.
6. Ahora debería tener una columna adicional en su tabla que se puede expandir con:
- Haciendo clic dentro de la celda en «Tabla»
- Si desea expandir la tabla original, haga clic en la flecha doble en el encabezado de la columna y seleccione las columnas que desea agregar
mariusz
Por favor, siéntase libre de conectarse conmigo.
mariusz
Hola @garycarters
Puede usar la siguiente sintaxis M
let Source = {"1","Description 1", "1","Description 1", "2","Description 2", "3","Description 3"}, Split = List.Split( Source, 2 ), Output = #table( type table [ ID = Int64.Type, Description = text ], Split ) in Output
Saludos,
mariusz
Si esta publicación le ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
sohananahid
En respuesta a mariusz
Hola @Mariusz: Buen día. Vi esta publicación. Tengo un problema con una lista, «ubicaciones» que quiero dividir en 2 columnas: ID de ubicación y nombre de ubicación. He publicado esto en:
https://community.powerbi.com/t5/Desktop/Split-a-Single-Column-with-delimiter-colon/mp/1430799/high…
Muchas gracias de antemano.
garycarters
En respuesta a mariusz
Hola Mariusz
Gracias por eso, parece prometedor.
He ingresado el código como se muestra a continuación. Sin embargo,
= let Source = Sql.Database("calsql", "mcsrm_live"), dbo_spec_checklist_items = Source{[Schema="dbo",Item="spec_checklist_items"]}[Data], #"Filtered Rows" = Table.SelectRows(dbo_spec_checklist_items, each ([id] = 57)), #"Extracted Text Range" = Table.TransformColumns(#"Filtered Rows", {{"ListData", each Text.Middle(_, 5, 200000), type text}}), Split = List.Split( "Extracted Text Range", 2 ), Output = #table( type table [ ID = Int64.Type, Description = text ], Split ) in #"Extracted Text Range"
Sin embargo, cuando observo una vista previa de los resultados, solo muestra un único registro.
Obviamente me estoy perdiendo algo simple…
mariusz
En respuesta a garycarters
Hola @garycarters
Mala mía, creo que me perdí un par de pasos.
let Source = " List:""1"",""Description 1"", ""1"",""Description 1"", ""2"",""Description 2"", ""3"",""Description 3""", #"Text Clean1" = Text.Replace(Source, """", ""), #"Text Clean2" = Text.Replace( #"Text Clean1", "List:", ""), #"Text Split" = Text.Split( #"Text Clean2", "," ), #"List Split" = List.Split( #"Text Split", 2 ), #"List to Table" = #table( type table [ ID = Int64.Type, Description = text ], #"List Split" ), #"Changed Type" = Table.TransformColumnTypes(#"List to Table",{{"ID", Int64.Type}}) in #"Changed Type"
Saludos,
mariusz
Si esta publicación le ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
garycarters
En respuesta a mariusz
Nos estamos acercando.
El siguiente código da error
«Expresión.Error: no podemos convertir un valor de tipo Tabla a tipo Texto.
Detalles:
Valor=Tabla
Tipo=Tipo»
Creo que el malentendido es que los datos de la lista provienen de una columna en la tabla spec_checklist_items, su ejemplo tiene una cadena.
let Source = Sql.Database("calsql", "mcsrm_live"), dbo_spec_checklist_items = Source{[Schema="dbo",Item="spec_checklist_items"]}[Data], #"Filtered Rows" = Table.SelectRows(dbo_spec_checklist_items, each ([id] = 57)), #"Text Clean1" = Text.Replace(#"Filtered Rows", """", ""), #"Text Clean2" = Text.Replace( #"Text Clean1", "List:", ""), #"Text Split" = Text.Split( #"Text Clean2", "," ), #"List Split" = List.Split( #"Text Split", 2 ), #"List to Table" = #table( type table [ ID = Int64.Type, Description = text ], #"List Split" ), #"Changed Type" = Table.TransformColumnTypes(#"List to Table",{{"ID", Int64.Type}}) in #"Changed Type"
mariusz
En respuesta a garycarters
Hola @garycarters
¿Puede enviar una muestra de su tabla con pocas filas?
Gracias
mariusz
garycarters
En respuesta a mariusz
Es un registro único, que contiene la lista delimitada de identificaciones y descripciones en un campo, además de varios otros fragmentos de información que no me interesan.
mariusz
En respuesta a garycarters
Hola @garycarters
Lo convertí en una función, puede invocarlo en su tabla y pasar la columna como parámetro.
(#"Your Column" as text ) => let #"Text Clean1" = Text.Replace(#"Your Column", """", ""), #"Text Clean2" = Text.Replace( #"Text Clean1", "List:", ""), #"Text Split" = Text.Split( #"Text Clean2", "," ), #"List Split" = List.Split( #"Text Split", 2 ), #"List to Table" = #table( type table [ ID = Int64.Type, Description = text ], #"List Split" ), #"Changed Type" = Table.TransformColumnTypes(#"List to Table",{{"ID", Int64.Type}}) in #"Changed Type"
Saludos,
mariusz
Si esta publicación le ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
garycarters
En respuesta a mariusz
¡Nunca hubiera llegado allí sin tu ayuda! Eso funciona maravillosamente.
Gracias Mariusz
garycarters
En respuesta a mariusz
Lo siento, he estado fuera por un par de días.
Mi consulta de tabla ahora es esto;
let Source = Sql.Database("calsql", "mcsrm_live"), dbo_spec_checklist_items = Source{[Schema="dbo",Item="spec_checklist_items"]}[Data], #"Filtered Rows" = Table.SelectRows(dbo_spec_checklist_items, each ([id] = 57)), #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"charge_item", "doc_path", "used_for_equipment", "used_for_contracts", "used_for_works_orders", "view_from_web", "used_for_customers", "used_for_suppliers", "used_for_employees", "SpecificationAutoCreate", "SpecificationMandatory", "UsedForPurchaseOrders", "UsedForPATTests", "UsedForQuotes", "UsedForPODistributions", "UsedForContacts", "UsedForProspects", "UsedForInvoices", "Redact", "UsedForJobs", "UsedForCases"}), #"Extracted ListData" = Table.TransformColumns(#"Removed Columns", {{"ListData", each Text.Middle(_, 5, 200000), type text}}) in #"Extracted ListData"
Column ListData ahora contiene la lista de valores que deseo dividir en Filas de 2 columnas (ID y descripción).
Creé una columna personalizada con el código que proporcionó
¿Cómo invoco la función que ha proporcionado desde aquí para obtener las filas/columnas que describí originalmente? Todo esto es un terreno nuevo (pero muy emocionante) para mí.
mariusz
En respuesta a garycarters
Hola @garycarters
1. Crear nueva fuente >> Consulta en blanco
2. Vaya al Editor avanzado y pegue el código de función proporcionado.
3. En su tabla, vaya a la cinta Agregar columna y busque Invocar función personalizada
4. En la sección Consulta de función, seleccione la función que ha creado (muy probablemente Consulta1 si no ha cambiado el nombre).
5. En la sección de su columna, cambie ABC a Nombre de columna y seleccione ListData de la lista desplegable, luego presione OK para confirmar.
6. Ahora debería tener una columna adicional en su tabla que se puede expandir con:
- Haciendo clic dentro de la celda en «Tabla»
- Si desea expandir la tabla original, haga clic en la flecha doble en el encabezado de la columna y seleccione las columnas que desea agregar
mariusz
Por favor, siéntase libre de conectarse conmigo.