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에서는 기본 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 인증 사용하기 웹 소스를 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을 사용합니다. 기본 URL은 고정하고, 엔드포인트 경로는 RelativePath에, 매개변수는 Query에 넣으세요. 예를 들어 발표 캘린더의 국가와 날짜 매개변수는 도우미에 넘기는 쿼리 레코드에 넣습니다.
보고서에서 API 키를 공유해도 안전한가요?
키는 쿼리 안에 있으므로, 키를 봐도 되는 사람에게만 보고서를 공유하세요. 여기서 쓰는 웹 소스 설정은 Anonymous 인증이지만, 요청은 여전히 Authorization 헤더로 API 키를 보냅니다.
에 게시되었습니다.