Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Gjakova
Post Patron
Post Patron

¿Por qué Power BI SO SLOW?!?

Actualmente estoy trabajando con algún archivo de Excel, todos los archivos de Excel combinados son 728kb, NOT EVEN 1MB, pero Power BI está tardando para siempre cuando actualo mis datos o intento combinar tablas.

¿Alguien sabe por qué sería así? Apliqué una gran cantidad de pasos para transformar mis datos de la manera que me gusta, pero espero que no sea la razón por la que Power BI está luchando con un archivo de 700 kb?!?!?

15 REPLIES 15
Syndicate_Admin
Administrator
Administrator

Quiero decir que 100,000 no es un conjunto de datos muy grande, por ejemplo, los pandas de Python manejarían 70 operaciones de reemplazo en cadenas de tamaño arbitrario en menos de un minuto.

No veo por qué Power BI no usaría subprocesos bajo el capó para realizar estas operaciones de columnas. Sin embargo, si hay una escasez de memoria o un cuello de botella del procesador que podría conducir a largos tiempos de carga.

En general, cuando se trabaja con grandes conjuntos de datos, la práctica es recortar lo que no necesita eliminando columnas o filtrando datos, agrupando tantas transformaciones similares. Luego haga cualquier cosa que le haga engordar los datos (más memoria), como dividir columnas. Dicho esto, estas son pautas que se romperán por necesidad.


edhans
Super User
Super User

Necesitaríamos ver las transformaciones. Si realiza muchas combinaciones, crea columnas estructuradas (anidadas), etc., puede obtener Power Query en un nudo.

Si publica su código M, es posible que podamos ver lo que está mal, pero es posible que necesite su fuente y su archivo PBIX si puede eliminar cualquier dato confidencial.

Puedo hacer que Power Query vaya al sur con solo unos pocos miles de filas de datos transformadas de manera ineficiente.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting

Desgraciadamente no puedo compartir mi archivo PBIX debido a datos confidenciales, pero aquí hay algunas pantallas de mis pasos aplicados en mi tabla de hechos:

Gjakova_0-1595887478393.pngGjakova_1-1595887505646.pngGjakova_2-1595887535494.png

Debido a que unpidré mi tabla de hechos, pasó de más de 20 columnas y 1000 filas a 7 columnas y más de 100.000 filas, desde entonces no hice ninguna transformación impactante (creo), pero por encima de usted puede echar un vistazo a todos los pasos que he dado hasta ahora...

¡Atentamente!

No. Necesito el código M.

En el editor avanzado (cinta de inicio), CTRL-A y, a continuación, péguelo aquí en el cuadro de código. Utilice el icono </>. Tipo de la inversa de los pasos enumerados a continuación que le permiten utilizar el código M publicado aquí.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting

Vi tu código M.

No veo nada despreostezmente mal. Lo que está sucediendo, sin embargo, es que tiene aproximadamente 70 pasos que pasan a través de 100.000 filas como usted indicó. Tienes una docena de pasos REPLACE. Esos pasos pasan por las 100.000 filas cada vez. Creo que ese es probablemente el mayor número. También está haciendo una gran cantidad de columnas divididas, lo que también consume mucho tiempo en un archivo plano de ese tamaño.

Los pasos de reemplazo podrían ser reemplazados en su mayoría por fusiones a una tabla DIM y expandiendo lo que necesita, pero en este punto tendría que tener el archivo para excavar realmente en. Sé que por un hecho 100% esto se puede optimizar, pero no quiero prometer en exceso, trabajar con archivos planos en el rango de registros de más de 100.000 puede ser lento si usted está haciendo un montón de transformaciones.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting

Busca pasar algunas transformaciones a Python. PowerBI es inherentemente lento, y parece que pasas una tonelada por pasos.

Anonymous
Not applicable

En lugar de estos muchos pasos dentro de Power BI, intente crear una vista en el origen y use esa vista como origen con todas las acciones necesarias, como Cambiar nombre, Dividir, etc.

@amkumar5 ¿qué quieres decir exactamente con la creación de una "vista" en la fuente? Estoy usando excel y archivos csv para esto. Por lo tanto, ¿solo puedo transformarlo en Power BI o quiere decir algo más? Gracias de antemano!

"Esos pasos pasan a través de las 100.000 filas cada vez." @edhans

Hmm... No lo sabía. ¡Gracias por la propina! Entonces, ¿qué le aconsejaría a un principiante como yo cuando trabaje con tales conjuntos de datos? Porque cuando dudo la tabla de hechos y quito otras columnas para crear una tabla de dimensiones, todos los pasos anteriores se siguen registrando. ¿Hay una mejor solución para resolver mi problema en Power BI, para que pueda evitar realizar todos esos pasos (o al menos no estropear el rendimiento de Power BI.


@Gjakova escribió:

"Esos pasos pasan a través de las 100.000 filas cada vez." @edhans

Hmm... No lo sabía. ¡Gracias por la propina! Entonces, ¿qué le aconsejaría a un principiante como yo cuando trabaje con tales conjuntos de datos? Porque cuando dudo la tabla de hechos y quito otras columnas para crear una tabla de dimensiones, todos los pasos anteriores se siguen registrando. ¿Hay una mejor solución para resolver mi problema en Power BI, para que pueda evitar realizar todos esos pasos (o al menos no estropear el rendimiento de Power BI.


No tengo claro a qué te refieres con los pasos que aún están registrados.

Realmente se trata de optimizar el código para que los pasos se repitan lo menos posible. También me gustaría ver cómo su tabla FACT se divide en tablas DIM. Si está realizando transformaciones 70 y, a continuación, crea 3 tablas DIM, esas 3 tablas DIM fuerzan que las 70 transformaciones completas se ejecuten cada vez. ¿Podría haber una manera de dividir los datos relevantes con Refrences in Power Query primero, luego hacer solo lo que necesita para cada tabla DIM y, a continuación, finalizar la tabla FACT con los pasos necesarios.

Pero estamos hablando de mucha teoría aquí. Es muy difícil ayudar sin ver el archivo. Comprendo perfectamente sus problemas de confidencialidad. Sólo quiero que sepas por qué no estoy proporcionando una lista de cosas que hacer. No tengo suficiente información para hacer eso.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting

Entiendo tu punto. Me hubiera encantado compartirlo, pero no se me permite. Pero lo que acabas de mencionar ya tiene mucho sentido. No sabía que todos esos pasos aplicados tendrían un peso tan pesado en Power BI.

Para responder a tu primera pregunta. Cuando dudro una consulta, todos los pasos aplicados se registran, por lo que no comienza desde el espacio en blanco. ¿Recomendaría "Referencia" una consulta en lugar de "Duplicar"? ¿Cuál es la diferencia exacta entre esos dos y cuál es la mejor solución para trabajar a un modelo estrella?

¡Muchas gracias!

Un duplicado crea una copia independiente. Los cambios realizados en el original ya no funcionan en la copia.

Una referencia crea un vínculo. Los cambios en el original también afectan a la consulta a la que se hace referencia.

Ninguno de los dos afecta a la utilidad de un esquema de estrella. Ellos son sólo cómo llegas allí. Quieres la forma más eficiente posible. Confío mucho en las referencias y menos en los duplicados, pero eso no significa que las referencias sean mejores. Creo que son mejores para los lugares en los que los uso. Pero voy a utilizar la función duplicada para algunos modelos.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting

Gracias por sus respuestas. Me dio una buena visión general de cómo funciona PBI bajo el capó. Definitivamente necesito aprender más sobre ello, pero mejor tarde que nunca supongo que 🙂

Llevaré sus consejos a mis proyectos actuales y futuros. Si usted tiene cualquier otro consejo, no dude en compartir! Gracias de nuevo.

Me alegro de haber podido ayudar, al menos con cierta comprensión de lo que está sucediendo @Gjakova

Mis mejores deseos en su proyecto.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting

Aquí está, he eliminado la primera fila debido a razones de privacidad:

Dejar
He eliminado el primer paso debido a razones de privacidad...
"Eliminadas filas superiores" - Table.Skip(GOED_Sheet,1),
"Encabezados Promocionados" - Table.PromoteHeaders(-"Removed Top Rows", [PromoteAllScalars-true]),
"Unpivoted Columns" - Table.UnpivotOtherColumns('Encabezados Promocionados", '"NrID", "Naam", "Klas", "Studie", "Mentor", "Schooljaar", "School", "Attribute", "Value"),
"Dividir columna por transición de caracteres" ? Table.SplitColumn('"Unpivoted Columns","Attribute", Splitter.SplitTextByCharacterTransition((c) ?> not List.Contains(''0"." 9", c), "0"." 9"-), "Attribute.1", "Attribute.2", "Attribute.3"-),
"Valor reemplazado" - Table.ReplaceValue(-"Dividir columna por transición de caracteres","ne","Nederlands",Replacer.ReplaceText,'Attribute.1'')
"Valor reemplazado1" - Table.ReplaceValue(-"Valor reemplazado","en","Engels",Replacer.ReplaceText,'Attribute.1"')
"Valor reemplazado2" - Table.ReplaceValue(-"Valor reemplazado1","wi","Wiskunde",Replacer.ReplaceText,'Attribute.1')),
"Valor reemplazado3" - Table.ReplaceValue(-"Valor reemplazado2","bi/vz","Biologie",Replacer.ReplaceText,'Attribute.1')),
"Valor reemplazado4" - Table.ReplaceValue(-"Valor reemplazado3","mm","Maatschappijleer",Replacer.ReplaceText,'Attribute.1')),
"Valor reemplazado5" - Table.ReplaceValue(-"Valor reemplazado4","nt","Natuurkunde",Replacer.ReplaceText,'Attribute.1')),
"Dividir columna por la transición de caracteres1" - Table.SplitColumn(-"Valor reemplazado5", "Attribute.2", Splitter.SplitTextByCharacterTransition(-"0"." 9", (c) > no List.Contains("0"." 9", c) ), "Atributo.2.1", "Atributo.2.2"- ),
"Columnas eliminadas" - Table.RemoveColumns(-"Dividir columna por transición de caracteres1",'Atributo.2.2", "Atributo.3"'),
"Columnas renombradas" - Table.RenameColumns("Columnas eliminadas","Valor", "Cijfer", "Atributo.1", "Vak")
"Tipo cambiado" - Table.TransformColumnTypes('"Columnas renombradas",''Cijfer'', número de tipo', ''School','' escriba text', ''Schooljaar'', ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Dividir columna por posición" - Table.SplitColumn(-"Changed Type", "Attribute.2.1", Splitter.SplitTextByPositions(-0, 1o, false), "Attribute.2.1.1", "Attribute.2.1.2")),
"Changed Type1" á Table.TransformColumnTypes('Dividir columna por posición",''Atributo.2.1.1', Int64.Type', ''Atributo.2.1.2', Int64.Type'),
"Columnas eliminadas1" - Table.RemoveColumns(-"Changed Type1",'Attribute.2.1.1"-),
"Columnas renombradas1" - Table.RenameColumns(-"Columnas eliminadas1",'Atributo.2.1.2", "PeriodeToets"-),
"Columna duplicada" - Table.DuplicateColumn(-"Renamed Columns1", "PeriodeToets", "PeriodeToets - Copiar"),
"Changed Type2" á Table.TransformColumnTypes('Columna duplicada"",'PeriodeToets - Copy', escriba text'),
"Dividir columna por posición1" - Table.SplitColumn(-"Changed Type2", "PeriodeToets - Copy", Splitter.SplitTextByPositions(-0, 1o, false), ''PeriodeToets ' Copy.1", "PeriodeToets - Copy.2"'),
"Changed Type3" á Table.TransformColumnTypes('Dividir columna por posición1",'PeriodeToets - Copy.1', Int64.Type', ''PeriodeToets ' Copy.2", Int64.Type'),
"Renamed Columns2" á Table.RenameColumns("Changed Type3"","PeriodeToets - Copy.1", "Periodenummer", "PeriodeToets - Copy.2", "Toetsnummer", "PeriodeToets", "PeriodeToetsnummer" )
"Columnas reordenadas" - Table.ReorderColumns("Renamed Columns2","NrID", "Naam", "Klas", "Studie", "Mentor", "Schooljaar", "School", "Vak", "PeriodeToetsnummer", "Periodenummer", "Toetsnummer", "Cijfer"),
"Dividir columna por delimitador" á Table.SplitColumn('Columnas reordenadas"", 'Studie', Splitter.SplitTextByEachDelimiter(''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Changed Type4" á Table.TransformColumnTypes("Dividir columna por delimitador","Studie.1", escriba text, "Studie.2", escriba text?),
"Valor reemplazado6" - Table.ReplaceValue(-"Changed Type4","MAVO","VMBO",Replacer.ReplaceText,'Studie.1')),
"Renamed Columns3" á Table.RenameColumns('Valor reemplazado6",'Studie.1', "Niveau"'),
"Columna duplicada1" - Table.DuplicateColumn(-"Renamed Columns3", "Studie.2", "Studie.2 - Copy"),
"Dividir columna por la transición de caracteres2" - Table.SplitColumn(-"Duplicated Column1", "Studie.2 - Copy", Splitter.SplitTextByCharacterTransition((c) ?> not List.Contains('0"." 9", c), "0"." 9"-), "Studie.2 - Copy.1", "Studie.2 - Copy.2"-),
"Valor reemplazado7" - Table.ReplaceValue(-"Dividir columna por la transición de caracteres2","KB ","Kader/Basis",Replacer.ReplaceText,-"Studie.2 - Copy.1"-),
"Columnas reordenadas1" - Table.ReorderColumns('Valor reemplazado7",'NrID', "Naam", "Klas", "Niveau", "Studie.2", "Mentor", "Schooljaar", "School", "Studie.2 - Copy.1", "Vak", "PeriodeToetsnummer", "Periodenummer", "Toetsnummer", "Cijfer", "Studie.2 - Copy.2"),
"Valor reemplazado8" - Table.ReplaceValue(-"Columnas reordenadas1","1","MAVO",Replacer.ReplaceText,"Studie.2 - Copy.1"-),
"Valor reemplazado9" - Table.ReplaceValue(-"Valor reemplazado8","2","MAVO",Replacer.ReplaceText,'Studie.2 - Copy.1')),
"Filas ordenadas" - Table.Sort("Valor reemplazado9","Studie.2 - Copy.1",Order.Descending-),
"Valor reemplazado10" - Table.ReplaceValue("Filas ordenadas","schakel","Schakel",Replacer.ReplaceText,"Studie.2 - Copy.1"-),
"Columna dividida por delimitador1" á Tabla.SplitColumn(-"Valor reemplazado10", "Studie.2 - Copy.1", Splitter.SplitTextByEachDelimiter('" "', QuoteStyle.Csv,false), ''Studie.2 ' Copy.1.1", "Studie.2 - Copy.1.2"),
"Changed Type5" á Table.TransformColumnTypes('Dividir columna por delimitador1",''Studie.2 ' Copy.1.1", escriba text', ''Studie.2 ' Copy.1.2", type text', 'Studie.2 ' Copy.2', type text'),
"Valor reemplazado11" á Table.ReplaceValue(-"Changed Type5","3","MAVO",Replacer.ReplaceText,'Studie.2 - Copy.1.1"')
"Valor reemplazado12" á Table.ReplaceValue(-"Valor reemplazado11","MAVO+","MAVO",Replacer.ReplaceText,-"Studie.2 - Copy.1.1"-),
"Valor reemplazado13" - Table.ReplaceValue(-"Valor reemplazado12","4+","MAVO",Replacer.ReplaceText,-"Studie.2 - Copy.1.1"-),
"Valor reemplazado14" á Table.ReplaceValue(-"Valor reemplazado13","4","MAVO",Replacer.ReplaceText,-"Studie.2 - Copy.1.1"-),
"Valor reemplazado15" - Table.ReplaceValue(-"Valor reemplazado14","BB","Basis",Replacer.ReplaceText,'Studie.2 - Copy.1.1"')
"Valor reemplazado16" - Table.ReplaceValue(-"Valor reemplazado15","GL","MAVO",Replacer.ReplaceText,'Studie.2 - Copy.1.1"')
"Valor reemplazado17" - Table.ReplaceValue(-"Valor reemplazado16","Onderwijs","VAVO",Replacer.ReplaceText,-"Studie.2 - Copy.1.1"-),
"Columnas eliminadas2" - Table.RemoveColumns(-"Valor reemplazado17","Studie.2 - Copy.1.2", "Studie.2 - Copy.2", "Studie.2"-),
"Renamed Columns4" á Table.RenameColumns(-"Removed Columns2","Studie.2 - Copy.1.1", "Leerweg"-),
"Columnas reordenadas2" - Table.ReorderColumns("Renamed Columns4","NrID", "Naam", "Klas", "Niveau", "Leerweg", "Mentor", "Schooljaar", "School", "Vak", "PeriodeToetsnummer", "Periodenummer", "Tonuetsmmer", "Cijfer"),
"Columnas eliminadas3" - Table.RemoveColumns(-"Columnas reordenadas2","Periodenummer", "Toetsnummer"-),
"Columna duplicada2" - Table.DuplicateColumn(-"Removed Columns3", "Klas", "Klas - Copiar"),
"Valor reemplazado18" - Table.ReplaceValue(-"Duplicated Column2","2 ZZZ","x 2 ZZZ",Replacer.ReplaceText,'Klas - Copy"')
"Dividir columna por la transición de caracteres3" - Table.SplitColumn(-"Valor reemplazado18", "Klas - Copy", Splitter.SplitTextByCharacterTransition((c) ?> no List.Contains("0"." 9", c), "0"." 9"-), "Klas - Copy.1", "Klas - Copy.2"-),
"Valor reemplazado19" - Table.ReplaceValue(-"Dividir columna por la transición de caracteres3",null,"1X",Replacer.ReplaceValue,"Klas - Copy.2"-),
"Dividir columna por la transición de caracteres4" - Table.SplitColumn(-"Valor reemplazado19", "Klas - Copy.2", Splitter.SplitTextByCharacterTransition(-"0"." 9", (c) > no List.Contains("0"." 9", c)), "Klas - Copy.2.1", "Klas - Copy.2.2"-),
"Columnas eliminadas4" - Table.RemoveColumns("Dividir columna por carácter Transition4","Klas - Copy.1", "Klas - Copy.2.2"-),
"Columnas renombradas5" - Table.RenameColumns("Removed Columns4","Klas - Copy.2.1", "Leerjaar"-),
"Changed Type6" á Table.TransformColumnTypes('"Hashtagd Columns5",'Leerjaar', Int64.Type'),
"Columnas reordenadas3" - Table.ReorderColumns(-"Changed Type6","NrID", "Naam", "Klas", "Niveau", "Leerweg", "Mentor", "Schooljaar", "School", "Vak", "Leerjaar", "PeriodeToetsnummer", "Cijfer"),
"Columna combinada insertada" - Table.AddColumn(-"Reordered Columns3", "LPT", each Text.Combine('Text.From([Leerjaar], "en-NL"), Text.From([PeriodeToetsnummer], "en-NL")', ""), texto de tipo),
"Columnas eliminadas5" - Table.RemoveColumns(-"Columna combinada insertada","Leerjaar", "PeriodeToetsnummer" )
"Changed Type7" á Table.TransformColumnTypes('''Columnas eliminadas5'','LPT', Int64.Type'),
"Columnas renombradas6" - Table.RenameColumns('"Changed Type7",'LPT', "LPT_KEY"'),
"Filas ordenadas1" - Table.Sort(-"Renamed Columns6","LPT_KEY", Order.Ascending-),
"Añadido índice" - Table.AddIndexColumn(-"Filas ordenadas1", "índice", 1, 1, Int64.Type),
"Consultas combinadas" - Table.NestedJoin('Added Index", ''Niveau'", 'Leerweg'', Studie, ''Niveau','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Studie expandido" - Table.ExpandTableColumn(-"Consultas combinadas", "Studie", "Studie_KEY", "Studie_KEY")
"Columnas eliminadas6" - Table.RemoveColumns(''Expanded Studie','Niveau", "Leerweg"')
En
"Eliminado Columns6"

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.