2

Excel powerquery を使用してサイトからデータを抽出しています。サイトはhttp://www.timeanddate.com/holidays/south-africa/2014です。

Web テーブルには、日付が mmm dd so の形式で表示されます。

  • 1月1日
  • 3月20日
  • 3月21日 ...など

異なる年の結果を取得するには、プロンプトを呼び出して年の入力を要求し、URL 内の関連する値を次のように置き換えます。

= let
    #"Table 0" = (myParm)=>
let
    Source = Web.Page(Web.Contents("http://www.timeanddate.com/holidays/south-africa/" & Number.ToText(myParm))),

ただし、Web 結果テーブルに年が指定されていない場合、Excel にインポートすると、当然のことながら独自の値が表示されます (Excel ネイティブは現在の年が 2015 であるため、powerquery は情報をまったく異なる方法で解釈します)。

  • 2001/01/01
  • 2020/03/01
  • 2021/03/01

ここに質問があります:

  1. セルを使用してクエリで年を指定し、myParm をセル値に置き換え、変更時に更新できるようにしたい (Excel ネイティブで実行でき、powerquery で実行する方法を知る必要がある)
  2. 結果の年の列データの年の値を、前述のセルにあるものに置き換えられるようにしたい
4

2 に答える 2

0

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 列から月と日の値を作成します。

于 2015-09-06T17:38:21.790 に答える