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

Get Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Request now

Reply
Anonymous
Not applicable

Create a column which sum an amount according other column

Hi everybody,

I have currently the following first 4 columns and I want to create the fifth one (Breakdowns count) which will sum the amount of "Order" (column 4) per "Equipment" and per "WEEK" and per "MONTH".

Example, for the month 1, week 1, equipment No 1000406533 : we had 3 different orders (an order is created when a breakdown occurs)  

MONTH WEEK   EquipmentOrderBreakdowns count
111000406531   910308940   1
1110004065339103080453
111000406533910308045 
111000406533910308270 
111000406533910308299 
111000406533910308299 
1110004065359103085861
111000406535910308586 
1110004065369103082971
1110004065389103081212
111000406538910308988 
111000406538910308988 

 

What would be the M code to create that 5th column ? I hope I was clear enough, I precise that I am a rookie in using Power Query, thank you very much for your help !

1 ACCEPTED SOLUTION

Use this

let
    Source = Excel.CurrentWorkbook(){[Name="Choix"]}[Content],
    #"Rempli vers le bas" = Table.FillDown(Source,{"Column1"}),
    #"En-têtes promus" = Table.PromoteHeaders(#"Rempli vers le bas", [PromoteAllScalars=true]),
    #"Type modifié" = Table.TransformColumnTypes(#"En-têtes promus",{{"LINES", type text}, {"MACHINE", type text}, {"Equipement No", Int64.Type}}),
    #"Requêtes fusionnées" = Table.NestedJoin(#"Type modifié", {"Equipement No"}, Data, {"Equipment"}, "Data", JoinKind.Inner),
    #"Data développé" = Table.ExpandTableColumn(#"Requêtes fusionnées", "Data", {"Order", "Actual work", "Breakdown and Hot Call", "Breakdown Duration", "WEEK", "MONTH"}, {"Order", "Actual work", "Breakdown and Hot Call", "Breakdown Duration", "WEEK", "MONTH"}),
    #"Added Conditional Column" = Table.AddColumn(#"Data développé", "Nb of hours/week", each if [Equipement No] >= 1000409774 then 168 else if [Equipement No] >= 1000409754 then "168" else if [Equipement No] >= 1000407443 then 112 else if [Equipement No] >= 1000407440 then 56 else 112, type any),
    #"Sorted Rows" = Table.Sort(#"Added Conditional Column",{{"WEEK", Order.Ascending}, {"LINES", Order.Ascending}, {"MACHINE", Order.Ascending}, {"Order", Order.Ascending}}),
    #"Grouped Rows" = Table.Combine(Table.Group(#"Sorted Rows", {"MONTH", "WEEK", "Equipement No"}, {{"All", each Table.FromColumns(Table.ToColumns(_) & {{List.Count(List.Distinct(_[Order]))} & List.Repeat({null}, Table.RowCount(_)-1)}, Table.ColumnNames(_) & {"Breakdowns count"})}})[All]),
    #"Reordered Columns" = Table.ReorderColumns(#"Grouped Rows",{"MONTH", "WEEK", "LINES", "MACHINE", "Equipement No", "Order", "Breakdowns count", "Actual work", "Breakdown and Hot Call", "Breakdown Duration", "Nb of hours/week"}),
#"Grouped Rows1" = = Table.Combine(Table.Group(#"Grouped Rows", {"MONTH", "WEEK", "Equipment", "Order"}, {{"All", each
let
cn = "Breakdown duration", 
a = Table.RemoveColumns(_, cn)
in
Table.FromColumns(Table.ToColumns(a) & {{Table.Column(_,cn){0}} & List.Repeat({null}, Table.RowCount(a)-1) }, Table.ColumnNames(a) & {cn})
}})[All])
in
    #"Grouped Rows1"

View solution in original post

8 REPLIES 8
Anonymous
Not applicable

That is a great solution too ! 

But I have an issue. The query helps me to sort data which goes right after that into a pivot table. 

In my pivot table I added all fields I need and everything seems correct.

And the last step is that I call data from the pivot table to have it in a classic table. When I am calling the "Breakdowns count" from pivot table, instead of giving me the getpivotdata formula it gaves me the cell :

ilyes4205_0-1708115626558.png

 

Any idea why it doesn't work ? Here the file : Download | file.io

 

dufoq3
Super User
Super User

Hi @Anonymous,

another approach:

 

Result:

dufoq3_0-1708114866086.png

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("rc9BCsAgDATAr4hnKZtoNHlL8f/fqEWQHtoqtIfAhgyE3XdPPvQBkJAlknOu7UaIUEvoK23ia7jhcVgkaZl/YlzQMuZv2azl/InJYKL5re0yzJfH5bmvDkbcjxNmeua4zOoB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"MONTH " = _t, #"WEEK   " = _t, Equipment = _t, Order = _t, #"Breakdown duration" = _t]),
    #"Grouped Rows" = Table.Group(Source, {"MONTH ", "WEEK   ", "Equipment"}, {
    {"Breakdowns count", each Table.RowCount(Table.Distinct(_)), Int64.Type},
    {"Detail", each Table.AddColumn(Table.AddIndexColumn(_, "Index", 0, 1), "Breakdown duration correct", (x)=> try if x[Order] = [Order]{x[Index]-1} then null else x[Breakdown duration] otherwise x[Breakdown duration]), type table}
}),
    #"Removed Other Columns" = Table.SelectColumns(#"Grouped Rows",{"Detail", "Breakdowns count"}),
    #"Expanded Detail" = Table.ExpandTableColumn(#"Removed Other Columns", "Detail", Table.ColumnNames(Source) & {"Breakdown duration correct"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Detail",{"Breakdown duration"})
in
    #"Removed Columns"

Note: Check this link to learn how to use my query.
Check this link if you don't know how to provide sample data.

Anonymous
Not applicable

This works perfectly thanks 

Anonymous
Not applicable

Thanks but the result is so weird in my side. I don't know why all columns deleted in the previous steps come back when I integrate your M code.

Would you please integrate your solution in this code :

let
    Source = Excel.CurrentWorkbook(){[Name="TableIW47"]}[Content],
    #"Erreurs supprimées" = Table.RemoveRowsWithErrors(Source, {"WEEK"}),
    #"Valeur remplacée" = Table.ReplaceValue(#"Erreurs supprimées","",null,Replacer.ReplaceValue,{"Equipment"}),
    #"Rempli vers le bas" = Table.FillDown(#"Valeur remplacée",{"Equipment"}),
    #"Lignes filtrées" = Table.SelectRows(#"Rempli vers le bas", each ([Breakdown and Hot Call] = "X")),
    #"Autres colonnes supprimées" = Table.SelectColumns(#"Lignes filtrées",{"Order", "Actual work", "Equipment", "Breakdown and Hot Call", "Breakdown Duration", "WEEK", "MONTH"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Autres colonnes supprimées",{"MONTH", "WEEK", "Equipment", "Order", "Actual work", "Breakdown and Hot Call", "Breakdown Duration"}),
    #"Sorted Rows" = Table.Sort(#"Reordered Columns",{{"MONTH", Order.Ascending}, {"WEEK", Order.Ascending}, {"Equipment", Order.Ascending}, {"Order", Order.Ascending}})
in
    #"Sorted Rows"

Thank you very much

Use this

let
    Source = Excel.CurrentWorkbook(){[Name="TableIW47"]}[Content],
    #"Erreurs supprimées" = Table.RemoveRowsWithErrors(Source, {"WEEK"}),
    #"Valeur remplacée" = Table.ReplaceValue(#"Erreurs supprimées","",null,Replacer.ReplaceValue,{"Equipment"}),
    #"Rempli vers le bas" = Table.FillDown(#"Valeur remplacée",{"Equipment"}),
    #"Lignes filtrées" = Table.SelectRows(#"Rempli vers le bas", each ([Breakdown and Hot Call] = "X")),
    #"Autres colonnes supprimées" = Table.SelectColumns(#"Lignes filtrées",{"Order", "Actual work", "Equipment", "Breakdown and Hot Call", "Breakdown Duration", "WEEK", "MONTH"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Autres colonnes supprimées",{"MONTH", "WEEK", "Equipment", "Order", "Actual work", "Breakdown and Hot Call", "Breakdown Duration"}),
    #"Sorted Rows" = Table.Sort(#"Reordered Columns",{{"MONTH", Order.Ascending}, {"WEEK", Order.Ascending}, {"Equipment", Order.Ascending}, {"Order", Order.Ascending}}),
   #"Grouped Rows" = Table.Combine(Table.Group(#"Sorted Rows", {"MONTH", "WEEK", "Equipment"}, {{"All", each Table.FromColumns(Table.ToColumns(_) & {{List.Count(List.Distinct(_[Order]))} & List.Repeat({null}, Table.RowCount(_)-1)}, Table.ColumnNames(_) & {"Breakdowns count"})}})[All])
in
    #"Grouped Rows"

 

Anonymous
Not applicable

Thanks it works but I would need help to make another operation : Let me add a 6th column that I need it modified. As you can see, in this 6th column, we have the breakdown durations which are repeated as Orders are repeated. 

MONTH WEEK   EquipmentOrderBreakdowns countBreakdown duration
111000406531   910308940   11.5
11100040653391030804532
111000406533910308045 2
111000406533910308270 0.5
111000406533910308299 6
111000406533910308299 6
11100040653591030858611.5
111000406535910308586 1.5
11100040653691030829712
11100040653891030812121
111000406538910308988 3
111000406538910308988 3

 

So I need the 6th column to not repeat and to provide me only one breakdown duration per Order please :

 

MONTH WEEK   EquipmentOrderBreakdowns countBreakdown duration
111000406531   910308940   11.5
11100040653391030804532
111000406533910308045 null
111000406533910308270 0.5
111000406533910308299 6
111000406533910308299 null
11100040653591030858611.5
111000406535910308586 null
11100040653691030829712
11100040653891030812121
111000406538910308988 3

 

Here is my current code :

 

 

 

let
    Source = Excel.CurrentWorkbook(){[Name="Choix"]}[Content],
    #"Rempli vers le bas" = Table.FillDown(Source,{"Column1"}),
    #"En-têtes promus" = Table.PromoteHeaders(#"Rempli vers le bas", [PromoteAllScalars=true]),
    #"Type modifié" = Table.TransformColumnTypes(#"En-têtes promus",{{"LINES", type text}, {"MACHINE", type text}, {"Equipement No", Int64.Type}}),
    #"Requêtes fusionnées" = Table.NestedJoin(#"Type modifié", {"Equipement No"}, Data, {"Equipment"}, "Data", JoinKind.Inner),
    #"Data développé" = Table.ExpandTableColumn(#"Requêtes fusionnées", "Data", {"Order", "Actual work", "Breakdown and Hot Call", "Breakdown Duration", "WEEK", "MONTH"}, {"Order", "Actual work", "Breakdown and Hot Call", "Breakdown Duration", "WEEK", "MONTH"}),
    #"Added Conditional Column" = Table.AddColumn(#"Data développé", "Nb of hours/week", each if [Equipement No] >= 1000409774 then 168 else if [Equipement No] >= 1000409754 then "168" else if [Equipement No] >= 1000407443 then 112 else if [Equipement No] >= 1000407440 then 56 else 112, type any),
    #"Sorted Rows" = Table.Sort(#"Added Conditional Column",{{"WEEK", Order.Ascending}, {"LINES", Order.Ascending}, {"MACHINE", Order.Ascending}, {"Order", Order.Ascending}}),
    #"Grouped Rows" = Table.Combine(Table.Group(#"Sorted Rows", {"MONTH", "WEEK", "Equipement No"}, {{"All", each Table.FromColumns(Table.ToColumns(_) & {{List.Count(List.Distinct(_[Order]))} & List.Repeat({null}, Table.RowCount(_)-1)}, Table.ColumnNames(_) & {"Breakdowns count"})}})[All]),
    #"Reordered Columns" = Table.ReorderColumns(#"Grouped Rows",{"MONTH", "WEEK", "LINES", "MACHINE", "Equipement No", "Order", "Breakdowns count", "Actual work", "Breakdown and Hot Call", "Breakdown Duration", "Nb of hours/week"})
in
    #"Reordered Columns"

 

Thanks a lot for the help !!

Use this

let
    Source = Excel.CurrentWorkbook(){[Name="Choix"]}[Content],
    #"Rempli vers le bas" = Table.FillDown(Source,{"Column1"}),
    #"En-têtes promus" = Table.PromoteHeaders(#"Rempli vers le bas", [PromoteAllScalars=true]),
    #"Type modifié" = Table.TransformColumnTypes(#"En-têtes promus",{{"LINES", type text}, {"MACHINE", type text}, {"Equipement No", Int64.Type}}),
    #"Requêtes fusionnées" = Table.NestedJoin(#"Type modifié", {"Equipement No"}, Data, {"Equipment"}, "Data", JoinKind.Inner),
    #"Data développé" = Table.ExpandTableColumn(#"Requêtes fusionnées", "Data", {"Order", "Actual work", "Breakdown and Hot Call", "Breakdown Duration", "WEEK", "MONTH"}, {"Order", "Actual work", "Breakdown and Hot Call", "Breakdown Duration", "WEEK", "MONTH"}),
    #"Added Conditional Column" = Table.AddColumn(#"Data développé", "Nb of hours/week", each if [Equipement No] >= 1000409774 then 168 else if [Equipement No] >= 1000409754 then "168" else if [Equipement No] >= 1000407443 then 112 else if [Equipement No] >= 1000407440 then 56 else 112, type any),
    #"Sorted Rows" = Table.Sort(#"Added Conditional Column",{{"WEEK", Order.Ascending}, {"LINES", Order.Ascending}, {"MACHINE", Order.Ascending}, {"Order", Order.Ascending}}),
    #"Grouped Rows" = Table.Combine(Table.Group(#"Sorted Rows", {"MONTH", "WEEK", "Equipement No"}, {{"All", each Table.FromColumns(Table.ToColumns(_) & {{List.Count(List.Distinct(_[Order]))} & List.Repeat({null}, Table.RowCount(_)-1)}, Table.ColumnNames(_) & {"Breakdowns count"})}})[All]),
    #"Reordered Columns" = Table.ReorderColumns(#"Grouped Rows",{"MONTH", "WEEK", "LINES", "MACHINE", "Equipement No", "Order", "Breakdowns count", "Actual work", "Breakdown and Hot Call", "Breakdown Duration", "Nb of hours/week"}),
#"Grouped Rows1" = = Table.Combine(Table.Group(#"Grouped Rows", {"MONTH", "WEEK", "Equipment", "Order"}, {{"All", each
let
cn = "Breakdown duration", 
a = Table.RemoveColumns(_, cn)
in
Table.FromColumns(Table.ToColumns(a) & {{Table.Column(_,cn){0}} & List.Repeat({null}, Table.RowCount(a)-1) }, Table.ColumnNames(a) & {cn})
}})[All])
in
    #"Grouped Rows1"
Vijay_A_Verma
Super User
Super User

See the below sample code

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("rc1BCsAgDETRqwTXLiZqNDmLeP9r2FIIXQgW6WIWHx5M74FDfAagoEpmIrraGBlqBXeOuIDZFYr8QFLDlpgdE3EiWo9JfR21NVEnnHhHTPUTGRM=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [MONTH = _t, WEEK = _t, Equipment = _t, Order = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"MONTH", Int64.Type}, {"WEEK", Int64.Type}, {"Equipment", Int64.Type}, {"Order", Int64.Type}}),
    #"Grouped Rows" = Table.Combine(Table.Group(#"Changed Type", {"MONTH", "WEEK", "Equipment"}, {{"All", each Table.FromColumns(Table.ToColumns(_) & {{List.Count(List.Distinct(_[Order]))} & List.Repeat({null}, Table.RowCount(_)-1)}, Table.ColumnNames(_) & {"Breakdowns count"})}})[All])
in
    #"Grouped Rows"

Helpful resources

Announcements
Fabric Data Days Carousel

Fabric Data Days

Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!

October Power BI Update Carousel

Power BI Monthly Update - October 2025

Check out the October 2025 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.