nhoff
Desde un archivo XML original, estoy tratando de expandir esta columna:
Cuando hago esto, obtengo el siguiente resultado:
Algunos registros no están en el nivel de ‘texto’, algunos siguen siendo tablas. Si marco uno de los registros con valor de tabla, puedo ver el siguiente contenido:
Si ahora trato de expandir la columna, aparece el siguiente error:
¿Cómo expando la columna?
ImkeF
Esto parece ser un poco complicado. Agregas una columna que verifica si el contenido de la fila actual de la columna a expandir es de tipo tabla. En ese caso, toma el valor tal como está y, si no, transforma el valor de texto en una tabla. De esa forma, todos los campos estarán en formato de tabla y se podrán expandir:
let Source = {1, #table({"a", "A"}, {{"b", "B"}})}, #"In Tabelle konvertiert" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error), Step2 = Table.AddColumn(#"In Tabelle konvertiert", "Custom", each if Value.Is([Column1], type table) then [Column1] else #table({"ConvertedText"}, {{[Column1]}})), #"Erweiterte Custom" = Table.ExpandTableColumn(Step2, "Custom", Table.ColumnNames(Table.Combine(Step2[Custom])), Table.ColumnNames(Table.Combine(Step2[Custom]))) in #"Erweiterte Custom"
ImkeF
Hola @Mr_Tank,
parece que tienes una tabla anidada. En ese caso, simplemente repita el proceso.
Sr_Tanque
Hola @ImkeF, veo que eres muy útil con este problema. Mi problema es que ninguno de los códigos anteriores resolvió mi problema. Tengo «nulo» y «Tabla» en mi columna «Imágenes adicionales» antes y después de la expansión. Vea las capturas de pantalla a continuación. Las tablas (con los registros «Elemento:Texto» adentro) deben expandirse a nuevas columnas. ¿Puedes ayudarme?
scastrontu
Hola,
He leído todas las publicaciones, pero como no manejo el lenguaje M… No puedo pensar en cómo integrar las soluciones dadas. Además, en mi caso es al revés. Vea la imagen a continuación. Mi error está en la fila 361. No puede convertir el valor de la columna «element.text» en una tabla, por lo que no puedo cargar la consulta. Sin embargo, como puede ver, tengo varias columnas con «tabla» o «texto». En mi caso, quiero el texto dentro de cada tabla (ver imagen), en lugar de convertir el texto a «Tablas». También he adjuntado el editor.
Gracias.
ImkeF
En respuesta a scastrontu
Hola @scastrontu,
compruebe si las instrucciones de este video ayudan a integrar el código M en su solución. https://community.powerbi.com/t5/Webinars-and-Video-Gallery/Power-BI-Forum-Help-How-to-integrate-Mc…
ImkeF
Esto parece ser un poco complicado. Agregas una columna que verifica si el contenido de la fila actual de la columna a expandir es de tipo tabla. En ese caso, toma el valor tal como está y, si no, transforma el valor de texto en una tabla. De esa forma, todos los campos estarán en formato de tabla y se podrán expandir:
let Source = {1, #table({"a", "A"}, {{"b", "B"}})}, #"In Tabelle konvertiert" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error), Step2 = Table.AddColumn(#"In Tabelle konvertiert", "Custom", each if Value.Is([Column1], type table) then [Column1] else #table({"ConvertedText"}, {{[Column1]}})), #"Erweiterte Custom" = Table.ExpandTableColumn(Step2, "Custom", Table.ColumnNames(Table.Combine(Step2[Custom])), Table.ColumnNames(Table.Combine(Step2[Custom]))) in #"Erweiterte Custom"
PedroT
En respuesta a ImkeF
Hola Imke,
Seguí su consejo y, como resultado, logré transformar los datos de una columna que tenía tipos de tabla y enteros en el conjunto de datos original en dos columnas nuevas: Clasificación.I… > Personalizado.Texto convertido y Personalizado.Elemento:Texto
Los datos originales y las columnas resultantes se ven así
Como resultado final, me gustaría tener solo una columna. Solo quería saber si fusionar estas dos columnas (Custom.ConvertedText & Custom.Element:Text) sería mi mejor opción o hay otra (mejor) manera de lograr lo mismo?
FYI: esta es la continuación de este hilo.
ImkeF
En respuesta a PedroT
Hola Pete,
eso se ve bien, y no puedo pensar en una mejor manera que fusionar ambas columnas.
PedroT
En respuesta a ImkeF
Gracias Imke, realmente me has alegrado el día al ayudarme a resolver estos problemas muy rápido.
masplin
En respuesta a PedroT
hola imke
Intentando seguir tu código, pero no funciona para mí. En la fila AddCustom1 de mi código, estoy llamando a una función que busca datos dentro de una página web, pero no todas las filas tienen un resultado, por lo que algunas muestran un error en lugar de Table.
No estoy del todo seguro de cómo integrar su código sugerido para verificar si el resultado de Custom1 agregado es una tabla o no y luego expandir la tabla en Custom1 expandido.
Acabo de recibir un error de expresión, no podemos convertir un valor de tabla de tipo a una lista de tipo para la línea In Tabelle konvertiert. Entonces, presumiblemente, no tengo una lista en el paso anterior para usar Table.FromList.
let Source = Excel.Workbook(File.Contents("U:DropboxLimerstonCrawfordCRO Companies.xlsx"), null, true), CRO_Company_Table = Source{[Item="CRO_Company",Kind="Table"]}[Data], #"Changed Type" = Table.TransformColumnTypes(CRO_Company_Table,{{"Company", type text}, {"Address", type text}, {"Search", type text}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each Web_Main([Search])), #"Sorted Rows1" = Table.Sort(#"Added Custom",{{"Company", Order.Ascending}}), #"Expanded Custom" = Table.ExpandTableColumn(#"Sorted Rows1", "Custom", {"#(lf)Website#(lf)", "#(lf)Headquarters#(lf)", "#(lf)Laboratories#(lf)", "#(lf)Company Type#(lf)", "#(lf)Certifications#(lf)", "#(lf)Year Established#(lf)", "#(lf)No. of Employees#(lf)"}, {"#(lf)Website#(lf)", "#(lf)Headquarters#(lf)", "#(lf)Laboratories#(lf)", "#(lf)Company Type#(lf)", "#(lf)Certifications#(lf)", "#(lf)Year Established#(lf)", "#(lf)No. of Employees#(lf)"}), #"Added Custom1" = Table.AddColumn(#"Expanded Custom", "Custom", each Web_Description([Search])), #"In Tabelle konvertiert" = Table.FromList( #"Added Custom1", Splitter.SplitByNothing(), null, null, ExtraValues.Error), Step2 = Table.AddColumn(#"In Tabelle konvertiert", "Custom", each if Value.Is([Column1], type table) then [Column1] else #table({"ConvertedText"}, {{[Column1]}})), #"Erweiterte Custom" = Table.ExpandTableColumn(Step2, "Custom", Table.ColumnNames(Table.Combine(Step2[Custom])), Table.ColumnNames(Table.Combine(Step2[Custom]))), #"Expanded Custom1" = Table.ExpandTableColumn( #"Erweiterte Custom", "Custom", {"Description"}, {"Description"}),
El error que estoy tratando de manejar se ve así en el paso anterior (no puedo insertar una imagen por alguna razón)
Tabla
Error
Tabla
Tabla
Error
ImkeF
En respuesta a masplin
Hola @masplin,
puede usar el controlador de errores «intentar …. de lo contrario» así:
#"In Tabelle konvertiert" = try Table.FromList( #"Added Custom1", Splitter.SplitByNothing(), null, null, ExtraValues.Error) otherwise #"Added Custom1",
Intenta convertir la lista en una tabla y, si la lista no es una lista (sino una tabla), usa solo esta tabla 😉
masplin
En respuesta a ImkeF
hola imke
Parece que no hay diferencia ya que todavía tengo la celda de error en esta fila de código
el error dice esto
Ocurrió un error en la consulta ». Expression.Error: No había suficientes elementos en la enumeración para completar la operación.
Detalles:
Tabla
Gracias
Miguel
ImkeF
En respuesta a masplin
Sí, porque mi comprensión de su situación no era correcta: en la imagen puedo ver que el error ya se debe a su función y no al paso que ha mencionado.
Entonces, podría poner en la ruta «de lo contrario» una tabla vacía en su lugar:
#"In Tabelle konvertiert" = try Table.FromList( #"Added Custom1", Splitter.SplitByNothing(), null, null, ExtraValues.Error) otherwise #table({}, {{}}),
masplin
En respuesta a ImkeF
Lo siento Imke estoy siendo bastante estúpido. Agregué esa línea y ahora obtengo solo una celda y perdí las 200 filas de mi tabla. Como usted dice, el error en realidad se debe a la función a la que llamo en la etapa de navegación.
ImkeF
En respuesta a masplin
No hay problema, denada.
Sí, no le presté suficiente atención. Este paso parece inútil, deberías eliminarlo.
Luego ajuste el siguiente paso así:
Paso 2 = Table.AddColumn(#»In Tabelle konvertiert», «Custom», each tratar Tabla.AddColumn([Column1]»Ficticio», cada 1) de lo contrario #tabla({«TextoConvertido»}, {{[Column1]}})),
Entonces, en lugar de usar if then else (que no le permitirá deshacerse del error), use el controlador de errores e intente ejecutar un comando en una tabla (aquí agregué una columna ficticia que luego puede eliminar, pero puede reemplazarlo fácilmente por una conversión de formato en una columna existente, entonces no tiene que revertir esta operación).
masplin
En respuesta a ImkeF
No estoy seguro de qué es una conversión de formato. Tampoco estoy seguro de poner los pasos en el orden correcto, ya que todo se fragmenta un poco. Tengo este código que ahora me da una columna «Custom10» donde los «Error» ahora son todos «Tabla». No estoy seguro de qué es «Columna1».
let Source = Excel.Workbook(File.Contents("U:DropboxLimerstonCrawfordCRO Companies.xlsx"), null, true), CRO_Company_Table = Source{[Item="CRO_Company",Kind="Table"]}[Data], #"Changed Type" = Table.TransformColumnTypes(CRO_Company_Table,{{"Company", type text}, {"Address", type text}, {"Search", type text}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each Web_Main([Search])), #"Sorted Rows1" = Table.Sort(#"Added Custom",{{"Company", Order.Ascending}}), #"Expanded Custom" = Table.ExpandTableColumn(#"Sorted Rows1", "Custom", {"#(lf)Website#(lf)", "#(lf)Headquarters#(lf)", "#(lf)Laboratories#(lf)", "#(lf)Company Type#(lf)", "#(lf)Certifications#(lf)", "#(lf)Year Established#(lf)", "#(lf)No. of Employees#(lf)"}, {"#(lf)Website#(lf)", "#(lf)Headquarters#(lf)", "#(lf)Laboratories#(lf)", "#(lf)Company Type#(lf)", "#(lf)Certifications#(lf)", "#(lf)Year Established#(lf)", "#(lf)No. of Employees#(lf)"}), #"Added Custom1" = Table.AddColumn(#"Expanded Custom", "Custom", each Web_Description([Search])), Step2 = Table.AddColumn( #"Added Custom1", "Custom10", each try Table.AddColumn([Column1], "Dummy", each 1) otherwise #table({"ConvertedText"}, {{[Column1]}})) in Step2
Sin embargo, si trato de expandir esta columna obtengo
Expression.Error: No se encontró el campo ‘Columna1’ del registro.
Detalles:
Empresa=3Cerebro
Dirección=3Brain GmbH Schulstrasse 76 7302 Landquart Suiza
Buscar=3cerebro
Sitio web
=3brain.com
Sede
lo siento por ser tenue, pero parece que estás cerca de la solución, solo que mi «M» es demasiado pobre para entenderlo 🙂
nhoff
En respuesta a ImkeF
Muchas gracias, este enfoque funcionó.
No seguí por completo el código del paso addcolumn, donde hay una referencia a #table({«ConvertedText»} – ¿dónde hizo eso? ¿viene de?
Sin embargo, logré copiar y reemplazar con mis propios valores y funcionó.
ImkeF
En respuesta a nhoff
Genial que lo hayas hecho funcionar.
Esa es la parte donde el texto se convierte en una tabla. «ConvertedText» es solo el nombre de columna que elijo (ya que no debe ser un nombre que ya exista en las otras columnas de la tabla; de lo contrario, el paso de expansión con nombres de columna dinámicos no funcionaría).
Anónimo
En respuesta a ImkeF
Hola,
Estoy teniendo este mismo problema. ¿En qué punto del editor avanzado necesito insertar su código?
Perdón por la pregunta tonta, pero soy nuevo en Power BI.
Gracias
Miguel
ImkeF
En respuesta a Anónimo
Hola Mike,
por favor, echa un vistazo si este video te ayuda:
Si no, por favor regrese e intentaré de manera diferente.
¡Gracias!
Anónimo
En respuesta a ImkeF
Hola ImkeF.
He insertado su código en una nueva consulta. ¿Solo necesito cambiar la fuente a mi fuente?
No estoy seguro de modificar su código para que funcione en mis datos de origen.
Perdón por las preguntas tontas, ¡soy nuevo en Power BI!
Saludos
Miguel