在 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 金鑰涵蓋其各個資料 API。REST 和 MCP 共用這把金鑰。在 Power BI 中,請求使用 REST,基礎 URL 為 https://api.narwhalapi.com,並帶上 Authorization 標頭。

設定你的 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 驗證 把網頁資料來源設定為 Anonymous 驗證。API 金鑰放在 M 查詢提供的請求標頭中。

用程式碼取得資料

把這段 Power Query M 貼到 Advanced Editor 中。Narwhal 輔助函式接受一個路徑和一個選用的查詢記錄,呼叫 Web.Contents,並讀取 JSON 回應。接著每個領域挑選各自的回應欄位。Table.FromRecords 把記錄集合轉成資料表,而 Brent 運算式用 Number.FromText 讀取 price。

Power Query M,六個領域
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 資料集可以依排程重新整理。請在報表所用的查詢中維持這種請求結構。

範例把 https://api.narwhalapi.com 放在 Web.Contents 中,把各端點路徑放在 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 中的經濟資料

請求 USA CPI 觀測值,並把 start 設為 2025-09。回應欄位是 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 中的預測

把美國聯準會政策利率路徑的預測市場賠率拉取到 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。請保持基礎 URL 固定,把端點路徑放在 RelativePath 中,把參數放在 Query 中。例如,發布日曆的國家和日期參數應放在傳給輔助函式的查詢記錄中。

在報表中分享 API 金鑰安全嗎?

金鑰存放在查詢中,所以只能把報表分享給有權看到金鑰的人。這裡使用的網頁資料來源設定是 Anonymous 驗證;請求仍會在其 Authorization 標頭中傳送 API 金鑰。

發布於 。

後續步驟