let
Source = Excel.CurrentWorkbook(){[Name="tblHours"]}[Content],
Change_Type = Table.TransformColumnTypes(Source,{{"EmpNum", Text.Type}, {"WeekEnding", type date}, {"Job Number", type text}, {"Section", type text}, {"Cost Head", type text}, {"Rate", type text}, {"SAT", Int64.Type}, {"SUN", Int64.Type}, {"MON", Int64.Type}, {"TUE", Int64.Type}, {"WED", Int64.Type}, {"THU", Int64.Type}, {"FRI", Int64.Type}}),
GroupI = Table.Group(Change_Type, {"EmpNum", "WeekEnding", "Job Number", "Section", "Cost Head", "Rate"}, {{"i", each Table.AddIndexColumn(_, "i", 1, 1, Int64.Type), Table.Type}}),
Col_idx = Table.AddIndexColumn(GroupI, "idx", 1, 1),
Expand_i = Table.ExpandTableColumn(Col_idx, "i", {"SAT", "SUN", "MON", "TUE", "WED", "THU", "FRI", "i"}, {"SAT", "SUN", "MON", "TUE", "WED", "THU", "FRI", "i.1"}),
Col_Prio = Table.AddColumn(Expand_i, "Prio", each 1),
Group_Rows2 = Table.Group(Col_Prio, {"EmpNum", "WeekEnding", "Job Number", "Section", "Cost Head", "i.1"}, {{"All", each _, type table [EmpNum=nullable text, WeekEnding=nullable date, Job Number=nullable text, Section=nullable text, Cost Head=nullable text, Rate=nullable text, SAT=nullable number, SUN=nullable number, MON=nullable number, TUE=nullable number, WED=nullable number, THU=nullable number, FRI=nullable number, i.1=number, idx=number, Prio=number]}, {"No.Entries", each Table.RowCount(_), Int64.Type}}),
Col_i2 = Table.AddIndexColumn(Group_Rows2, "i2", 1, 1),
Analysis = Table.RemoveColumns(Col_i2,{"All"}),
Remove_No.Entries = Table.RemoveColumns(Col_i2,{"No.Entries"}),
AppendAnalysisToHoursData = Table.Combine({Analysis, Remove_No.Entries}),
Filter_relevant = Table.SelectRows(AppendAnalysisToHoursData, each ([No.Entries] <> 3)),
AddRateTypes = Table.AddColumn(Filter_relevant, "Rate2", each if [All] = null then {"ST","OT","DT"} else null),
ExpandRateTypes = Table.ExpandListColumn(AddRateTypes, "Rate2"),
Expand_All = Table.ExpandTableColumn(ExpandRateTypes, "All", {"Rate", "SAT", "SUN", "MON", "TUE", "WED", "THU", "FRI", "Prio"}, {"Rate", "SAT", "SUN", "MON", "TUE", "WED", "THU", "FRI", "Prio"}),
Replace_Prio = Table.ReplaceValue(Expand_All,null,2,Replacer.ReplaceValue,{"Prio"}),
ReplaceRate = Table.ReplaceValue(Replace_Prio,each [Rate], each if [Rate] = null then [Rate2] else [Rate], Replacer.ReplaceValue, {"Rate"}),
Sort_Table = Table.Buffer(Table.Sort(ReplaceRate,{{"i2", Order.Ascending}, {"Rate", Order.Descending}, {"Prio", Order.Ascending}})),
GroupI3 = Table.Group(Sort_Table, {"i2", "Rate"}, {{"i3", each Table.AddIndexColumn(_, "i3", 1, 1, Int64.Type), Table.Type}}),
Expand_i3 = Table.ExpandTableColumn(GroupI3, "i3", {"EmpNum", "WeekEnding", "Job Number", "Section", "Cost Head", "SAT", "SUN", "MON", "TUE", "WED", "THU", "FRI", "i3"}, {"EmpNum", "WeekEnding", "Job Number", "Section", "Cost Head", "SAT", "SUN", "MON", "TUE", "WED", "THU", "FRI", "i3"}),
Filter_i3_1 = Table.SelectRows(Expand_i3, each ([i3] = 1)),
Keep_needed_Cols = Table.SelectColumns(Filter_i3_1,{"EmpNum", "WeekEnding", "Job Number", "Section", "Cost Head", "Rate", "SAT", "SUN", "MON", "TUE", "WED", "THU", "FRI"}),
RestoreTypes = Value.ReplaceType(Keep_needed_Cols,Value.Type(Change_Type))
in
RestoreTypes