Forum Discussion

StefanoGrimaldi's avatar
StefanoGrimaldi
Icon for Resident Rockstar rankResident Rockstar
4 years ago
Solved

M Languague Optimization Sugggestion Specific Case

hey guys, I have a little query Im trying to optimize and looking for point and tips here have already done some progress but need some help futher optimizing it, any suggestion would be great (The "Personalizado agregado" part its actually the only one making a significant impact on the procesing act the momment): 

let
  Origen = #"Facturación por articulo",
  #"Consultas combinadas" = Table.NestedJoin(Origen, {"Fecha Contabilización - Copia"}, Tasa, {"Fecha Contabilización"}, "Tasa", JoinKind.LeftOuter),
  #"Tasa expandido" = Table.ExpandTableColumn(#"Consultas combinadas", "Tasa", {"Tasa"}, {"Tasa.1"}),
  #"Personalizado agregado" = Table.AddColumn(#"Tasa expandido", "Monto Articulo (Descento Doc Aplicado) (Pesos Dominicanos)", each let
    doc = [Numero Documento],
    cantidadlineas = Table.RowCount(Table.SelectRows( #"Tasa expandido", each [Numero Documento] = doc)),
    totaldoc = List.Sum(Table.SelectRows( #"Tasa expandido", each [Numero Documento] = doc)[#"Total Articulo (Descuento Aplicado) (RD)"]),
    porcientoxlinea = ([#"Total Articulo (Descuento Aplicado) (RD)"] / totaldoc),
    Resultado = [#"Total Articulo (Descuento Aplicado) (RD)"] - (porcientoxlinea*(([#"% Descuento Factura (RD)"])/100)*totaldoc)
in
    Resultado),
  #"Personalizado agregado 1" = Table.AddColumn(#"Personalizado agregado", "Monto Articulo (Descento Doc Aplicado) (Dollar)", each [#"Monto Articulo (Descento Doc Aplicado) (Pesos Dominicanos)"] / [Tasa.1]),
  #"Tipo de columna cambiado" = Table.TransformColumnTypes(#"Personalizado agregado 1", {{"Monto Articulo (Descento Doc Aplicado) (Pesos Dominicanos)", type number}, {"Monto Articulo (Descento Doc Aplicado) (Dollar)", type number}}),
  #"Columnas quitadas" = Table.RemoveColumns(#"Tipo de columna cambiado", {"% Descuento Factura (RD)", "Total Articulo (Descuento Aplicado) (RD)", "Fecha Contabilización - Copia", "Tasa.1"})
in
  #"Columnas quitadas"
  • Two suggestions to try, since you are referencing the previous step more than once:

     

     

      #"Personalizado agregado" = Table.AddColumn(#"Tasa expandido", "Monto Articulo (Descento Doc Aplicado) (Pesos Dominicanos)", each let
        doc = [Numero Documento],
        filtered = Table.SelectRows( #"Tasa expandido", each [Numero Documento] = doc),
        cantidadlineas = Table.RowCount(filtered),
        totaldoc = List.Sum(filtered[#"Total Articulo (Descuento Aplicado) (RD)"]),
        porcientoxlinea = ([#"Total Articulo (Descuento Aplicado) (RD)"] / totaldoc),
        Resultado = [#"Total Articulo (Descuento Aplicado) (RD)"] - (porcientoxlinea*(([#"% Descuento Factura (RD)"])/100)*totaldoc)
    in
        Resultado),

     

     

     

     #"Tasa expandido" = Table.Buffer(Table.ExpandTableColumn(#"Consultas combinadas", "Tasa", {"Tasa"}, {"Tasa.1"})),

     

     

    Pat

4 Replies

  • mahoneypat's avatar
    mahoneypat
    Icon for Microsoft Employee rankMicrosoft Employee

    Two suggestions to try, since you are referencing the previous step more than once:

     

     

      #"Personalizado agregado" = Table.AddColumn(#"Tasa expandido", "Monto Articulo (Descento Doc Aplicado) (Pesos Dominicanos)", each let
        doc = [Numero Documento],
        filtered = Table.SelectRows( #"Tasa expandido", each [Numero Documento] = doc),
        cantidadlineas = Table.RowCount(filtered),
        totaldoc = List.Sum(filtered[#"Total Articulo (Descuento Aplicado) (RD)"]),
        porcientoxlinea = ([#"Total Articulo (Descuento Aplicado) (RD)"] / totaldoc),
        Resultado = [#"Total Articulo (Descuento Aplicado) (RD)"] - (porcientoxlinea*(([#"% Descuento Factura (RD)"])/100)*totaldoc)
    in
        Resultado),

     

     

     

     #"Tasa expandido" = Table.Buffer(Table.ExpandTableColumn(#"Consultas combinadas", "Tasa", {"Tasa"}, {"Tasa.1"})),

     

     

    Pat

    • StefanoGrimaldi's avatar
      StefanoGrimaldi
      Icon for Resident Rockstar rankResident Rockstar

      sounds good, will try it out and get back at you with the result

    • StefanoGrimaldi's avatar
      StefanoGrimaldi
      Icon for Resident Rockstar rankResident Rockstar

      when try your suggestion the flow keep updating none stops, maybe because of the buffle step havent try it out 

  • Anonymous's avatar
    Anonymous
    Not applicable

    I would wrap the inputs of your list arithmetic in List.Buffer. Feeding buffered lists to your list functions is a HUGE optimization that needs to be taught in kindergartens worldwide.

     

    --Nate