Skip to main content
added 490 characters in body
Source Link
Rojo
  • 43.1k
  • 7
  • 100
  • 196

A possibility

sales[ GroupBy[KeyTake[{"Country", "Region", "BU", "Year"}] -> KeyDrop["Date"]] /* Values, merge[{"Sales" -> Total}, First] ] 

merge is an operator such that you can specify a merging function for particular keys, and a default one

merge[r : {__Rule}, def_] := Merge[Identity] /* Query[{ Query[KeyDrop@Keys@r, def], Query[KeyTake[#], #2] & @@@ r} // Flatten] /* Merge[First] 

or something among these lines

groupBy2D[groupby_, newCols : {__Rule}] := With[{tr = Transpose[#, AllowedHeads -> All] &}, Query[ GroupBy[KeyTake[groupby]] /* Values, Query[{First, tr /* Query[<|newCols|>]}] /* Merge[First] /* KeyTake[groupby]] ] 

so that

sales[ groupBy2D[ {"Country", "Region", "BU", "Year"}, {"SumOfSales" -> (Total@#Sales &)} ] ] 

These are probably not too efficient

A possibility

sales[ GroupBy[KeyTake[{"Country", "Region", "BU", "Year"}] -> KeyDrop["Date"]] /* Values, merge[{"Sales" -> Total}, First] ] 

merge is an operator such that you can specify a merging function for particular keys, and a default one

merge[r : {__Rule}, def_] := Merge[Identity] /* Query[{ Query[KeyDrop@Keys@r, def], Query[KeyTake[#], #2] & @@@ r} // Flatten] /* Merge[First] 

A possibility

sales[ GroupBy[KeyTake[{"Country", "Region", "BU", "Year"}] -> KeyDrop["Date"]] /* Values, merge[{"Sales" -> Total}, First] ] 

merge is an operator such that you can specify a merging function for particular keys, and a default one

merge[r : {__Rule}, def_] := Merge[Identity] /* Query[{ Query[KeyDrop@Keys@r, def], Query[KeyTake[#], #2] & @@@ r} // Flatten] /* Merge[First] 

or something among these lines

groupBy2D[groupby_, newCols : {__Rule}] := With[{tr = Transpose[#, AllowedHeads -> All] &}, Query[ GroupBy[KeyTake[groupby]] /* Values, Query[{First, tr /* Query[<|newCols|>]}] /* Merge[First] /* KeyTake[groupby]] ] 

so that

sales[ groupBy2D[ {"Country", "Region", "BU", "Year"}, {"SumOfSales" -> (Total@#Sales &)} ] ] 

These are probably not too efficient

added 19 characters in body
Source Link
Rojo
  • 43.1k
  • 7
  • 100
  • 196

A possibility

sales[ GroupBy[KeyTake[{"Country", "Region", "BU", "Year"}]]] -> KeyDrop["Date"]] /* Values, merge[{"Sales" -> Total}, First] ] 

merge is an operator such that you can specify a merging function for particular keys, and a default one

merge[r : {__Rule}, def_] := Merge[Identity] /* Query[{ Query[KeyDrop@Keys@r, def], Query[KeyTake[#], #2] & @@@ r} // Flatten] /* Merge[First] 

A possibility

sales[ GroupBy[KeyTake[{"Country", "Region", "BU", "Year"}]] /* Values, merge[{"Sales" -> Total}, First] ] 

merge is an operator such that you can specify a merging function for particular keys, and a default one

merge[r : {__Rule}, def_] := Merge[Identity] /* Query[{ Query[KeyDrop@Keys@r, def], Query[KeyTake[#], #2] & @@@ r} // Flatten] /* Merge[First] 

A possibility

sales[ GroupBy[KeyTake[{"Country", "Region", "BU", "Year"}] -> KeyDrop["Date"]] /* Values, merge[{"Sales" -> Total}, First] ] 

merge is an operator such that you can specify a merging function for particular keys, and a default one

merge[r : {__Rule}, def_] := Merge[Identity] /* Query[{ Query[KeyDrop@Keys@r, def], Query[KeyTake[#], #2] & @@@ r} // Flatten] /* Merge[First] 
Source Link
Rojo
  • 43.1k
  • 7
  • 100
  • 196

A possibility

sales[ GroupBy[KeyTake[{"Country", "Region", "BU", "Year"}]] /* Values, merge[{"Sales" -> Total}, First] ] 

merge is an operator such that you can specify a merging function for particular keys, and a default one

merge[r : {__Rule}, def_] := Merge[Identity] /* Query[{ Query[KeyDrop@Keys@r, def], Query[KeyTake[#], #2] & @@@ r} // Flatten] /* Merge[First]