Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
4 years ago

Table.buffer lento

Expertos,

Me preguntaba si alguien sabe cómo acelerar esto. Estoy importando un libro de Excel con registros de 17K y se tarda alrededor de 30 minutos en procesarlo. Importar los datos sin el código del búfer lleva un minuto, así que estoy tratando de encontrar una manera de acelerarlo.

¿Qué es lo que estoy haciendo?

Las comprobaciones de código suman el valor en Q_label_score_maand por serie de equipos, centro de trabajo y número de serie en los últimos 3 meses. Entonces, si es abril, debe mostrar la suma de los valores desde enero hasta marzo.

let
    Bron = Excel.Workbook(File.Contents("C:\Users\" & user & "\OneDrive - NS\Borgspoor\RAAK\Data bestanden\RAAK - storingen per maand.xlsx"), null, true),
    Dataset_Sheet = Bron{[Item="Dataset",Kind="Sheet"]}[Data],
    #"Headers met verhoogd niveau" = Table.PromoteHeaders(Dataset_Sheet, [PromoteAllScalars=true]),
    #"Type gewijzigd" = Table.TransformColumnTypes(#"Headers met verhoogd niveau",{{"Serial Number", Int64.Type}, {"Jaar maand", type text}, {"Equipment Series", type text}, {"Work Center", type text}, {"SR Number", Int64.Type}, {"SR Stranded Train Number", Int64.Type}, {"SR Safety Number", Int64.Type}, {"EBK Number", type any}, {"Recidivist", Int64.Type}, {"Q_label_score_maand", Int64.Type}, {"Qlabelscore_laatste_3_maanden", type any}, {"Qlabel", type text}}),
    #"Kolommen verwijderd" = Table.RemoveColumns(#"Type gewijzigd",{"Qlabelscore_laatste_3_maanden"}),
    #"Inserted Date" = Table.AddColumn(#"Kolommen verwijderd", "Datum", each Date.From([Jaar maand]), type date),
    #"Adds 3 months back" = Table.AddColumn(#"Inserted Date", "Date", each Date.AddMonths([Datum],-3), type date),
    BufferValues = Table.Buffer(#"Adds 3 months back")
    ,#"Adds last 3 months" = Table.AddColumn(#"Adds 3 months back", "Q-Score 3mnd", each List.Sum(
Table.SelectRows(BufferValues, 
let 
snr = [Serial Number] , 
eq = [Equipment Series],
wc = [Work Center],
sdate = [Date] ,
edate = [Datum]
in 
each 
[Serial Number] = snr and    
[Work Center] = wc and
[Equipment Series] = eq and
[Datum] >= sdate and
[Datum] < edate 

)[Q_label_score_maand]), Int64.Type),
    #"Qlabel 3mnd" = Table.AddColumn(#"Adds last 3 months", "Q_lable_3mnd", each if [#"Q-Score 3mnd"] <= 9 then "A" else if [#"Q-Score 3mnd"] <= 12 then "B" else if [#"Q-Score 3mnd"] <= 14 then "C" else if [#"Q-Score 3mnd"] <= 17 then "D" else if [#"Q-Score 3mnd"] <= 22 then "E" else if [#"Q-Score 3mnd"] <= 30 then "F" else if [#"Q-Score 3mnd"] >= 31 then "G" else null),
    #"Qlabel 3mnd Fouten vervangen" = Table.ReplaceErrorValues(#"Qlabel 3mnd", {{"Q_lable_3mnd", null}}),
    #"Aangepaste kolom toegevoegd" = Table.AddColumn(#"Qlabel 3mnd Fouten vervangen", "Vandaaag", each DateTime.LocalNow())
in
    #"Aangepaste kolom toegevoegd" 

2 Replies

  • @ozcel600 ,

    Si se utiliza el código siguiente sin la función Table.Buffer, ¿cuánto tiempo se tarda? Si lleva más tiempo, entonces creo que usar DAX en lugar de código M sería una mejor opción.

    let
        Source = Excel.Workbook(File.Contents("\.....\CASE SAMPLE DATA\RAAK - storingen per maand.xlsx"), null, true),
        Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
        #"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]),
        #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Serial Number", Int64.Type}, {"Jaar maand", type date}, {"Equipment Series", type text}, {"Work Center", type text}, {"SR Number", Int64.Type}, {"SR Stranded Train Number", Int64.Type}, {"SR Safety Number", Int64.Type}, {"EBK Number", Int64.Type}, {"Recidivist", Int64.Type}, {"Q_label_score_maand", Int64.Type}, {"Qlabelscore_laatste_3_maanden", Int64.Type}, {"Qlabel", type text}}),
        #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Qlabelscore_laatste_3_maanden"}),
        #"Inserted Date" = Table.AddColumn(#"Removed Columns", "Datum", each Date.From([Jaar maand]), type date),
        #"Adds 3 months back" = Table.AddColumn(#"Inserted Date", "Date", each Date.AddMonths([Datum],-3), type date),
        #"Adds last 3 months" = Table.AddColumn(#"Adds 3 months back", "Q-Score 3mnd", each let 
        myfunction = (CurrentSerial, CurrentEquipment, CurrentWorkCenter,sdate, edate) => 
         let 
           SelectRows = Table.SelectRows(#"Adds 3 months back", each [Serial Number] = CurrentSerial and [Equipment Series] = CurrentEquipment and [Work Center] = CurrentWorkCenter and [Datum] >= sdate and [Datum] < edate) 
         in 
           SelectRows,
       Data = List.Sum(myfunction([Serial Number],[Equipment Series],[Work Center],[Date],[Datum])[Q_label_score_maand])
    in 
       Data),
        #"Qlabel 3mnd" = Table.AddColumn(#"Adds last 3 months", "Q_lable_3mnd", each if [#"Q-Score 3mnd"] <= 9 then "A" else if [#"Q-Score 3mnd"] <= 12 then "B" else if [#"Q-Score 3mnd"] <= 14 then "C" else if [#"Q-Score 3mnd"] <= 17 then "D" else if [#"Q-Score 3mnd"] <= 22 then "E" else if [#"Q-Score 3mnd"] <= 30 then "F" else if [#"Q-Score 3mnd"] >= 31 then "G" else null),
        #"Qlabel 3mnd Fouten vervangen" = Table.ReplaceErrorValues(#"Qlabel 3mnd", {{"Q_lable_3mnd", null}}),
        #"Aangepaste kolom toegevoegd" = Table.AddColumn(#"Qlabel 3mnd Fouten vervangen", "Vandaaag", each DateTime.LocalNow())
    in
        #"Aangepaste kolom toegevoegd"

    Si el problema aún no se resuelve, proporcione información detallada sobre el error o el resultado esperado que espera. Hágamelo saber de inmediato, esperando su respuesta.
    Saludos
    Winniz
    Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      @v-kkf-msft , tnx para la ayuda, pero en realidad era más lento que el código original. Aborté la actualización después de 42 minutos. Así que tal vez escribirlo en DAX sea la mejor solución. Intentaré escribirlo y publicarlo aquí