(tbl as table, daynum as number) =>
let
Source = tbl,
#"Filtered Rows" = Table.SelectRows(Source, each [WkdayNum] <= daynum),
#"Grouped Rows" = Table.Group(#"Filtered Rows", {"Week", "Year"}, {{"StartDate", each List.Min([Date]), type datetime}, {"EndDate", each List.Max([Date]), type datetime}, {"High", each List.Max([High]), type number}, {"Low", each List.Min([Low]), type number}, {"# Days", each Table.RowCount(_), type number}}),
#"Merged Queries" = Table.NestedJoin(#"Grouped Rows", {"StartDate"}, tbl, {"Date"}, "SeriesTable", JoinKind.LeftOuter),
#"Expanded SeriesTable" = Table.ExpandTableColumn(#"Merged Queries", "SeriesTable", {"Prior Close", "Open"}, {"Prior Close", "Open"}),
#"Merged Queries1" = Table.NestedJoin(#"Expanded SeriesTable", {"EndDate"}, tbl, {"Date"}, "SeriesTable", JoinKind.LeftOuter),
#"Expanded SeriesTable1" = Table.ExpandTableColumn(#"Merged Queries1", "SeriesTable", {"Close"}, {"Close"}),
#"Merged Queries2" = Table.NestedJoin(#"Expanded SeriesTable1", {"Week", "Year", "Low"}, tbl, {"Week", "Year", "Low"}, "SeriesTable", JoinKind.LeftOuter),
#"Expanded SeriesTable2" = Table.ExpandTableColumn(#"Merged Queries2", "SeriesTable", {"Date"}, {"Date"}),
#"Grouped Rows1" = Table.Group(#"Expanded SeriesTable2", {"Week", "Year", "StartDate", "EndDate", "High", "Low", "# Days", "Prior Close", "Open", "Close"}, {{"LowDate", each List.Min([Date]), type datetime}}),
#"Merged Queries3" = Table.NestedJoin(#"Grouped Rows1", {"Week", "Year", "High"}, tbl, {"Week", "Year", "High"}, "SeriesTable", JoinKind.LeftOuter),
#"Expanded SeriesTable3" = Table.ExpandTableColumn(#"Merged Queries3", "SeriesTable", {"Date"}, {"Date"}),
#"Grouped Rows2" = Table.Group(#"Expanded SeriesTable3", {"Week", "Year", "StartDate", "EndDate", "High", "Low", "# Days", "Prior Close", "Open", "Close", "LowDate"}, {{"HighDate", each List.Min([Date]), type datetime}}),
#"Added Custom1" = Table.AddColumn(#"Grouped Rows2", "Weekday Low", each Date.DayOfWeekName([LowDate])),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "Weekday High", each Date.DayOfWeekName([HighDate])),
#"Changed Type1" = Table.TransformColumnTypes(#"Added Custom2",{{"Weekday Low", type text}, {"Weekday High", type text}}),
#"Reordered Columns" = Table.ReorderColumns(#"Changed Type1",{"StartDate", "EndDate", "# Days", "Week", "Prior Close", "Open", "High", "Low", "Close", "Weekday Low", "Weekday High", "Year", "LowDate", "HighDate"}),
#"Removed Columns" = Table.RemoveColumns(#"Reordered Columns",{"Year", "LowDate", "HighDate"})
in
#"Removed Columns"
It will accept reference to original query as first argument, and Weekday index# (0 = Sun, 1 = Mon etc) as second argument.
let
Source = Excel.CurrentWorkbook(){[Name="SeriesTable"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "Year", each Date.Year([Date])),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "WkdayNum", each Date.DayOfWeek([Date])),
#"Changed Type" = Table.TransformColumnTypes(#"Added Custom1",{{"Date", type datetime}, {"Week", Int64.Type}, {"Day", type text}, {"Prior Close", type number}, {"Open", type number}, {"High", type number}, {"Low", type number}, {"Close", type number}, {"Year", Int64.Type}, {"WkdayNum", Int64.Type}})
in
#"Changed Type"
To generate each data set. You'd invoke custom function.
Bookmarks