Colin Banfield による別のソリューション。
1) Excel で、年を列名としてテーブルを作成し、年を行の値として入力します。次に、テーブルからクエリを作成します。クエリには、1 つの列と 1 つの行の値が必要です。クエリに適切な名前を付けて保存します。
2) Web サイトからデータを取得します。クエリに HolidayTable という名前を付けるとします。クエリを関数クエリに変換します。
(Year as number)=>
let
Source = Web.Page(Web.Contents("www.timeanddate.com/holidays/south-africa/"&Number.ToText(Year))),
Data0 = Source{0}[Data],
#"Changed Type" = Table.TransformColumnTypes(Data0,{{"Header", type text}, {"Date", type date}, {"Weekday", type text}, {"Holiday name", type text}, {"Holiday type", type text}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Header"})
in
#"Removed Columns"
3) この関数をステップ (1) クエリの新しい列として追加し、新しい日付カスタム列を追加します。他のいくつかの変換 (列の並べ替え、列の削除) の後、次のようなクエリになるはずです。
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Year", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each HolidayTable([Year])),
#"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"Date", "Weekday", "Holiday name", "Holiday type"}, {"Date", "Weekday", "Holiday name", "Holiday type"}),
#"Added Custom1" = Table.AddColumn(#"Expanded Custom", "Calendar Date", each #date([Year],Date.Month([Date]),Date.Day([Date]))),
#"Reordered Columns" = Table.ReorderColumns(#"Added Custom1",{"Year", "Date", "Calendar Date", "Weekday", "Holiday name", "Holiday type"}),
#"Removed Columns" = Table.RemoveColumns(#"Reordered Columns",{"Year","Date"})
in
#"Removed Columns"
ノート:
a) 最初の 2 行は、手順 (1) の元のテーブル クエリからのものです。
b) #"Added Custom" ステップは、Year 列の値を HolidayTable 関数に渡す新しいカスタム列を追加します。
c) #"Added Custom1" ステップは、Year 列の値から新しい日付を作成する新しいカスタム列を追加し、元の Date 列から月と日の値を作成します。