Power BI で Narwhal API を使う

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キーを設定

  1. 無料キーを作成する narwhalapi.com/signup で無料のキーを作成してください。Power BI に取り込みたいデータ領域で、このキーを使います。
  2. キーを保存する キーは NARWHAL_API_KEY という環境変数に保存します。M の例では、ヘッダーの YOUR_KEY をご自身のキーに置き換えます。ヘッダーは、プレースホルダーの代わりにご自身の値を入れた Authorization: Bearer YOUR_KEY の形にしてください。

用意した M は、Headers の中でキーを直接使います。そのヘッダーには Web.Contents が使う Bearer の値が入ります。環境変数は、クエリの外にキーを保管するための場所です。Power BI 用にクエリを準備するときは、プレースホルダーの部分にキーを貼り付けてください。

Power BI Desktop で空のクエリを開く

  1. Get Data から始める Power BI Desktop で Get Data を使い、Blank Query を開きます。ここに API リクエスト用の Power Query M を追加します。
  2. Advanced Editor に M を貼り付ける Advanced Editor を開き、次のセクションの M の例を貼り付けます。この例は Holidays を返します。ほかのデータ領域は、実際にはそれぞれ別のクエリにします。
  3. Anonymous 認証を使う Web ソースを Anonymous 認証に設定します。API キーは、M クエリが渡すリクエストヘッダーに入ります。

コードでデータを取得する

この Power Query M を Advanced Editor に貼り付けます。Narwhal ヘルパーはパスと任意のクエリレコードを受け取り、Web.Contents を呼び出して JSON レスポンスを読みます。そのあと、各領域でレスポンスのフィールドを選びます。Table.FromRecords はレコードの集まりをテーブルに変換し、Brent の式は Number.FromText で price を読みます。

Power Query M、6つの領域
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
    Holidays

in のあとの式が、クエリが返す結果を選びます。祝日テーブルなら 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 ヘルパーを残しておけば、この式が祝日のレコードをテーブルとして返します。

祝日の Power Query M
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 を使います。テーブルの式は、完全な例のフィールド一覧をそのまま使います。

公開日の Power Query M
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 パラメーターはヘルパーのクエリレコードに入れたままにします。

すべてのアカウントで全履歴を取得できます。系列が指定した開始日より後に始まる場合、レスポンスはその最初の観測値から始まります。

CPI の Power Query M
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 があります。

Brent の Power Query M
Number.FromText(
    Narwhal("v1/commodities/spot/BRENT/USD")[price]
)

Power BI の為替レート

currencies パラメーターで、EUR と IDR の USD 為替レートをリクエストします。rates コレクションを読み、各レコードには currency と rate があります。Fx をレポート用のテーブルとして返し、為替レートをメジャーとして使います。

為替レートの Power Query M
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 があるので、返されるテーブルにそれらのフィールドを残してください。

予測の Power Query M
Table.FromRecords(
    Narwhal("v1/predictions/policy-paths/federal-reserve")[meetings]
)

ベース URL を固定するのはなぜですか。

Power BI は、サービスで更新するときにベース URL を使います。ベースは固定し、エンドポイントのパスは RelativePath に、パラメーターは Query に入れてください。たとえば、公開カレンダーの国と日付のパラメーターは、ヘルパーに渡すクエリレコードに入れます。

レポートで API キーを共有しても安全ですか。

キーはクエリの中にあるので、キーを見てよい人にだけレポートを共有してください。ここで使う Web ソースの設定は Anonymous 認証ですが、リクエストは引き続き Authorization ヘッダーで API キーを送ります。

公開。

次のステップ