Power BI と Narwhal API で、祝日、公開日、経済データ、コモディティ、為替レート、予測市場のオッズをレポートに取り込めます。Power BI Desktop で Power Query M を使い、Power BI サービスでデータセットの更新をスケジュールします。
セットアップする内容
レポートのクエリは Power BI Desktop で設定します。使うデータ領域ごとに別々のクエリができます。例には Holidays、Releases、Cpi、Brent、Fx、Fed があります。Holidays は日付テーブルとして使い、Brent の価格と為替レートはメジャーとして使います。
Narwhal API は、データ API 全体で1つのアカウントと1つの API キーを使います。REST と MCP でキーを共有します。Power BI では、ベース URL https://api.narwhalapi.com と Authorization ヘッダーを付けた REST でリクエストします。
APIキーを設定
- 無料キーを作成する narwhalapi.com/signup で無料のキーを作成してください。Power BI に取り込みたいデータ領域で、このキーを使います。
- キーを保存する キーは
NARWHAL_API_KEYという環境変数に保存します。M の例では、ヘッダーのYOUR_KEYをご自身のキーに置き換えます。ヘッダーは、プレースホルダーの代わりにご自身の値を入れたAuthorization: Bearer YOUR_KEYの形にしてください。
用意した M は、Headers の中でキーを直接使います。そのヘッダーには Web.Contents が使う Bearer の値が入ります。環境変数は、クエリの外にキーを保管するための場所です。Power BI 用にクエリを準備するときは、プレースホルダーの部分にキーを貼り付けてください。
Power BI Desktop で空のクエリを開く
- Get Data から始める Power BI Desktop で Get Data を使い、Blank Query を開きます。ここに API リクエスト用の Power Query M を追加します。
- Advanced Editor に M を貼り付ける Advanced Editor を開き、次のセクションの M の例を貼り付けます。この例は Holidays を返します。ほかのデータ領域は、実際にはそれぞれ別のクエリにします。
- Anonymous 認証を使う Web ソースを Anonymous 認証に設定します。API キーは、M クエリが渡すリクエストヘッダーに入ります。
コードでデータを取得する
この Power Query M を Advanced Editor に貼り付けます。Narwhal ヘルパーはパスと任意のクエリレコードを受け取り、Web.Contents を呼び出して JSON レスポンスを読みます。そのあと、各領域でレスポンスのフィールドを選びます。Table.FromRecords はレコードの集まりをテーブルに変換し、Brent の式は Number.FromText で price を読みます。
let
Narwhal = (path as text, optional query as record) =>
Json.Document(Web.Contents("https://api.narwhalapi.com", [
RelativePath = path,
Query = if query = null then [] else query,
Headers = [Authorization = "Bearer YOUR_KEY"]
])),
Holidays = Table.FromRecords(Narwhal("v1/calendars/holidays/USA/2026")[holidays]),
Releases = Table.FromRecords(
Narwhal(
"v1/economics/calendar",
[countries = "USA", start_date = "2026-11-01",
end_date = "2026-11-30", limit = "100"]
)[releases],
{"at", "period", "topic", "status"}, MissingField.UseNull),
Cpi = Table.FromRecords(
Narwhal("v1/economics/USA/cpi/observations", [start = "2025-09"])[observations]
),
Brent = Number.FromText(Narwhal("v1/commodities/spot/BRENT/USD")[price]),
Fx = Table.FromRecords(Narwhal("v1/fx/rates/USD", [currencies = "EUR,IDR"])[rates]),
Fed = Table.FromRecords(
Narwhal("v1/predictions/policy-paths/federal-reserve")[meetings]
)
in
// return Releases, Cpi, Fx or Fed the same way;
// each area is its own query in practice
Holidaysin のあとの式が、クエリが返す結果を選びます。祝日テーブルなら Holidays のままにし、ほかのテーブルなら Releases、Cpi、Fx、Fed を返します。価格なら Brent を返します。クエリを個別に準備するときも、ヘルパーは残してください。各領域のサンプルは同じヘルパーを使っています。
スケジュールで実行する
Power BI サービスで、データセットの更新をスケジュールします。固定のベース URL、RelativePath、Query を指定した Web.Contents を使うデータセットは、スケジュールどおりに更新できます。レポートで使うクエリでも、このリクエスト構造を保ってください。
この例では、Web.Contents に https://api.narwhalapi.com を、RelativePath に各エンドポイントのパスを、Query にリクエストのパラメーターを指定します。祝日テーブル、CPI 観測値、ほかの領域でも同じ構造です。スケジュールの詳しい手順は 毎日のデータ取得をスケジュールする を参照してください。
Power BI の祝日
2026年の USA の祝日クエリを、Holidays の日付テーブルとして使います。holidays コレクションを読みます。レコードには date と name があります。クエリに Narwhal ヘルパーを残しておけば、この式が祝日のレコードをテーブルとして返します。
Table.FromRecords(
Narwhal("v1/calendars/holidays/USA/2026")[holidays]
)Power BI の公開日
2026年11月の USA の経済指標公開カレンダーを取得します。releases を読み、at、period、topic、status のフィールドを残します。このリクエストでは、クエリレコードに countries、start_date、end_date、limit を使います。テーブルの式は、完全な例のフィールド一覧をそのまま使います。
Table.FromRecords(
Narwhal(
"v1/economics/calendar",
[countries = "USA", start_date = "2026-11-01",
end_date = "2026-11-30", limit = "100"]
)[releases],
{"at", "period", "topic", "status"}, MissingField.UseNull)Power BI の経済データ
start を 2025-09 に設定して USA の CPI 観測値をリクエストします。レスポンスのフィールドは observations で、各観測値に period と value があります。Cpi クエリでそれらのレコードをテーブルとして返し、start パラメーターはヘルパーのクエリレコードに入れたままにします。
すべてのアカウントで全履歴を取得できます。系列が指定した開始日より後に始まる場合、レスポンスはその最初の観測値から始まります。
Table.FromRecords(
Narwhal("v1/economics/USA/cpi/observations", [start = "2025-09"])[observations]
)Power BI のコモディティ
USD での Brent のスポット価格をリクエストし、price を読みます。Brent の式は、そのフィールドを Number.FromText で変換します。得られた価格はメジャーとして使います。コモディティのスポットコードには、たとえば XAU、XAG、XPT、XPD、XCU、BRENT、WTI があります。
Number.FromText(
Narwhal("v1/commodities/spot/BRENT/USD")[price]
)Power BI の為替レート
currencies パラメーターで、EUR と IDR の USD 為替レートをリクエストします。rates コレクションを読み、各レコードには currency と rate があります。Fx をレポート用のテーブルとして返し、為替レートをメジャーとして使います。
Table.FromRecords(
Narwhal("v1/fx/rates/USD", [currencies = "EUR,IDR"])[rates]
)Power BI の予測
Federal Reserve の政策金利パスの予測市場オッズを Fed クエリに取り込みます。レスポンスから meetings を読み、そのレコードをテーブルに変換します。各会合には resolves_at、p_cut、p_hold、p_hike があるので、返されるテーブルにそれらのフィールドを残してください。
Table.FromRecords(
Narwhal("v1/predictions/policy-paths/federal-reserve")[meetings]
)ベース URL を固定するのはなぜですか。
Power BI は、サービスで更新するときにベース URL を使います。ベースは固定し、エンドポイントのパスは RelativePath に、パラメーターは Query に入れてください。たとえば、公開カレンダーの国と日付のパラメーターは、ヘルパーに渡すクエリレコードに入れます。
レポートで API キーを共有しても安全ですか。
キーはクエリの中にあるので、キーを見てよい人にだけレポートを共有してください。ここで使う Web ソースの設定は Anonymous 認証ですが、リクエストは引き続き Authorization ヘッダーで API キーを送ります。
公開。