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