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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
ilyasss
Helper II
Helper II

Actualización de Sharepoint muy lenta - optimizado la consulta

Hola chicos,

Espero que estés bien.

Tengo una consulta para recuperar algunos datos de un archivo de Excel en sharepoint. Funciona, pero es realmente muy lento para actualizar para un archivo pequeño: 5 minutos para un archivo con menos de 4000 filas y 6 columnas. Tengo la impresión de que el problema es cómo PBI va al archivo con la función Sharepoint.contents...

¿Tiene alguna idea para optimizar el código de consulta a continuación? Muchas gracias

let
    Source = SharePoint.Contents("https:XXXX.sharepoint.com/sites/"),
    Y = Source{[Name="Y"]}[Content],
    Projects = Y{[Name="W"]}[Content],
    Z = Projects{[Name="Z"]}[Content],
    #"Z KPI's" = Z{[Name="Z KPI's"]}[Content],
    #"Alert" = #"Z KPI's"{[Name="Alert"]}[Content],
    #"Filtered Hidden Files1" = Table.SelectRows(#"Alert", each [Attributes]?[Hidden]? <> true),
    #"Filtered Hidden Files2" = Table.SelectRows(#"Filtered Hidden Files1", each [Attributes]?[Hidden]? <> true),
    #"Filtered Hidden Files3" = Table.SelectRows(#"Filtered Hidden Files2", each [Attributes]?[Hidden]? <> true),
    #"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files3", "Transform File", each #"Transform File"([Content])),
    #"Renamed Columns1" = Table.RenameColumns(#"Invoke Custom Function1", {"Name", "Source.Name"}),
    #"Expanded Table Column1" = Table.ExpandTableColumn(#"Renamed Columns1", "Transform File", Table.ColumnNames(#"Transform File"(#"Sample File"))),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Table Column1",{"Content", "Source.Name", "Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Folder Path"}),
    #"Removed Blank Rows" = Table.SelectRows(#"Removed Columns", each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))),
    #"Filtered Rows" = Table.SelectRows(#"Removed Blank Rows", each ([DateTime] <> null)),
    #"Changed Type" = Table.TransformColumnTypes(#"Filtered Rows",{{"DateTime", type date}}),
in
    #"Filtered Rows1"

9 REPLIES 9
edhans
Super User
Super User

SharePoint.Contents es definitivamente mucho más rápido que SharePoint.Folder, por lo que está en el camino correcto.


Parece que has estado modificando y copiando código M. Por ejemplo, está filtrando archivos ocultos 3 veces.

    #"Filtered Hidden Files1" = Table.SelectRows(#"Alert", each [Attributes]?[Hidden]? <> true),
    #"Filtered Hidden Files2" = Table.SelectRows(#"Filtered Hidden Files1", each [Attributes]?[Hidden]? <> true),
    #"Filtered Hidden Files3" = Table.SelectRows(#"Filtered Hidden Files2", each [Attributes]?[Hidden]? <> true),

Eso es lo mismo, siempre.

Y no sé cuál es la función personalizada que se invoca. Sé que está relacionado con la combinación de archivos, pero ese podría ser su problema.

Honestamente, tan simple como las transformaciones restantes son, empezaría de nuevo con una conexión limpia y una operación de combinación simple. Y no es necesario hacer la combinación compleja si siempre va por el mismo archivo, pero no especificó que en su publicación - si el nombre del archivo cambia, o si está combinando varios archivos. Si no cambia, simplemente desglose hasta la carpeta y haga clic en el archivo en sí, no en el botón COMBINAR.



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

Hola @edhans ,

Gracias por su ayuda.

Bien detectados, los filtros ocultos han sido añadidos por la invocación functio por lo que no quería tocarlos. Finalmente elimino dos de ellos y no cambió nada en términos de rendimiento.

Usé una función invoke porque en el futuro, espero más de un archivo en esta carpeta, así que prefiero usar la función invoke ahora. Sin embargo, lo intenté sin combinar y las actuaciones son similares.

Me di cuenta de que PBi descarga 38 MB de datos, mientras que el archivo es sólo 900 KB. ¿Te parece normal? Además, incluso en los primeros pasos, por ejemplo Fuente o Navegación, se tarda años en PBi para obtener la información sobre % de celda vacía, errores... que es información básica y el archivo es pequeño por lo que conseguir esto debe ser rápido, pero toma 1-2 minutos. Entonces realmente tengo la impresión de que el problema es cómo el PBI obtener el archivo en sharepoint...

Muchas gracias.

Hola @ilyasss

Gracias por la explicación de por qué está utilizando combinar. Eso es una buena visión de futuro. A menudo "comporto" por las mismas razones, incluso si sólo un archivo hoy. 😁

Pero hay algo más extraño en tu código. Mira las primeras líneas.

let
    Source = SharePoint.Contents("https:XXXX.sharepoint.com/sites/"),
    Y = Source{[Name="Y"]}[Content],
    P = Y{[Name="W"]}[Content],
    Z = P{[Name="Z"]}[Content],
    #"Z" = Z{[Name="Z"]}[Content],
    #"U" = #"Z"{[Name="U"]}[Content],

¿Qué pretende hacer todo eso? ¿Son los nombres de las carpetas? Parece un poco extraño. Normalmente, el primer lugar al que navega es Documentos compartidos.

A continuación se muestra cómo se produce el proceso de navegación normal cuando se usa SharePoint.Contents(), justo antes de hacer clic en o combinar archivos.

let
    Source = SharePoint.Contents("https://xxxxx.sharepoint.com/sites/GNDN", [ApiVersion = 15]),
    #"Shared Documents" = Source{[Name="Shared Documents"]}[Content],
    General = #"Shared Documents"{[Name="General"]}[Content],
    GNDN = General{[Name="GNDN"]}[Content]
in
    GNDN

En cuanto a su comentario por qué Power BI extrae 38 MB de datos para un archivo de 900 KB, las extracciones de datos de SharePoint son extremadamente ineficaces, pero SharePoint.Contents() mitiga eso. Sin embargo, no es mágico. Todavía tiene que navegar por las carpetas que seleccione y, si algunas de las carpetas tienen miles de archivos, Power BI leerá en TODOS los nombres de archivo antes de pasar a la siguiente carpeta. No sólo se mueve a la carpeta final como se podría pensar que lo haría.

¿Cuántos archivos hay en esas carpetas? Creo que esa podría ser la respuesta al tema 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
osiel
Frequent Visitor

The same thing happens to me and I think your answer is logical since I load in a one drive that I have loaded with many files my code is the following and it takes forever.

 

 

let
Origen = SharePoint.Files("https://xxx/sites/xxx", [ApiVersion = 15]),
#"Personalizada agregada" = Table.AddColumn(Origen, "Personalizado", each Excel.Workbook([Content])),
#"Filas filtradas1" = Table.SelectRows(#"Personalizada agregada", each ([Name] <> "DimDepartamentos.xlsx" and [Name] <> "DimTiendas.xlsx")),
#"Se expandió Personalizado" = Table.ExpandTableColumn(#"Filas filtradas1", "Personalizado", {"Name", "Data", "Item", "Kind", "Hidden"}, {"Name.1", "Data", "Item", "Kind", "Hidden"}),
#"Filas filtradas" = Table.SelectRows(#"Se expandió Personalizado", each ([Item] = "CARGA DE INFORMACION")),
#"Columnas quitadas" = Table.RemoveColumns(#"Filas filtradas",{"Kind", "Hidden", "Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Folder Path", "Content", "Name", "Name.1", "Item"}),
#"Se expandió Data" = Table.ExpandTableColumn(#"Columnas quitadas", "Data", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21"}),
#"Filas superiores quitadas" = Table.Skip(#"Se expandió Data",12),
#"Encabezados promovidos" = Table.PromoteHeaders(#"Filas superiores quitadas", [PromoteAllScalars=true]),
#"Filas filtradas1 importante" = Table.SelectRows(#"Encabezados promovidos", each ([Estatus] = "Cuadrado" or [Estatus] = "Faltante" or [Estatus] = "Sobrante" or [Estatus] = "Sobrante no asociado")),
#"Columnas con nombre cambiado" = Table.RenameColumns(#"Filas filtradas1 importante",{{"TIENDA", "DimTienda"}}),
#"Columnas quitadas1 No necesarias" = Table.RemoveColumns(#"Columnas con nombre cambiado",{"Column1", "Modelo", "Requerido", "Chequeado", "Costo", "Observaciones", "COMPARA DAÑADA", "DD", "Mes"}),
#"Filas filtradas1 eliminando vacias" = Table.SelectRows(#"Columnas quitadas1 No necesarias", each ([Estatus] <> null and [Estatus] <> "" and [Estatus] <> "X")),
#"Columna condicional agregada" = Table.AddColumn(#"Filas filtradas1 eliminando vacias", "SKU Estatus", each if [Estatus] = "Sobrante no asociado" then "SKU No Asociado" else "SKU Asociado"),
#"Tipo cambiado" = Table.TransformColumnTypes(#"Columna condicional agregada",{{"Licencia", type text}, {"Sku", Int64.Type}, {"Descripción", type text}, {"Diferencia", Int64.Type}, {"Unidades Dañadas", type any}, {"Estatus", type text}, {"Diferencia Monetaria", type number}, {"Fecha", type date}, {"Realizado Por", type text}, {"Multiplica Cuadrados", type number}, {"Multiplica Dañada", Int64.Type}, {"DimTienda", type text}, {"SKU Estatus", type text}})
in
#"Tipo cambiado"

 

 

I can change the SharePoint.Files function to SharePoint.Contents?

 

Hola @edhans,

Gracias.

Corrigí la consulta un poco.

let
    Source = SharePoint.Contents("https:XXXX.sharepoint.com/sites/DocumentCenter"),
    Y = Source{[Name="Y"]}[Content],
    P = Y{[Name="W"]}[Content],
    Z = W{[Name="Z"]}[Content],
    #"Z" = Z{[Name="Z"]}[Content],
    #"U" = #"Z"{[Name="U"]}[Content],

Primero va al Centro de Documentos. ¿Es lo mismo que el documento compartido?

Después de eso, pasa a través de las diferentes carpetas para obtener el archivo correcto.

Yo diría que cada carpeta contiene una docena de carpetas / archivos, que no parece ser mucho... Pero hacerlo 4 veces (carpeta dentro de una carpeta dentro de una carpeta...) para obtener el archivo correcto podría explicar el rendimiento lento de esta consulta.

Por casualidad, ¿hay alguna manera de vincular la consulta directamente a la carpeta correcta para evitar los pasos anteriores excluyendo el movimiento de la carpeta?

Muchas gracias,

DocumentCenter es el nombre de su sitio.

THe Y es la primera carpeta, que me parece extraña. Pero no estoy seguro de cómo se nombran las carpetas. No, no puedes ir directamente a una carpeta. Tienes que empezar en la parte superior, y navegar hacia abajo por desgracia.

Puede probar la teoría de velocidad copiando ese archivo en la carpeta de nivel superior y ver si es más rápido. A continuación, tome la decisión de mover o lidiar con la velocidad de forma permanente.



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
nandukrishnavs
Super User
Super User

@ilyasss ¿Está utilizando el conector de carpeta de SharePoint? Si no es así, utilice ese conector.



¿Respondí a tu pregunta? ¡Marca mi puesto como solución!
Apreciar con un kudos
🙂


Regards,
Nandu Krishna

Hola @nandukrishnavs,

Gracias. He intentado con esto, pero es más lento (15-20 minutos) porque el conector de carpeta de punto compartido escanea todos los archivos en sharepoint y hay cientos de miles de archivos en este sharepoint... Por eso decidí usar el sharepoint. Función de contenido que es más rápida en este caso.

Puesto que tiene tantos archivos para filtrar (no está seguro de si el plegado de consultas se produce con conectores de Sharepoint), ¿intentó conectarse directamente al archivo Excle con el conector web? El vínculo muestra cómo hacerlo con un archivo OneDrive, pero el proceso es el mismo con Sharepoint. Aunque, si está escribiendo consultas como esa, supongo que ya sabe acerca de este enfoque.

https://www.c-sharpcorner.com/article/connect-to-onedrive-excel-file-from-power-bi-desktop/

Si esto funciona para usted, por favor márquelo como solución. Los felicitaciones también son apreciados. Por favor, avísame si no.

saludos

palmadita





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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

Top Solution Authors