指南教程

用 Power Query 把汇率载入 Power BI

在 Power BI Desktop 中粘贴一段 M 查询,把 JSON 转成货币表,并让发布后的计划刷新继续工作。

2026年8月5日 · 5 min

Power BI 已经带有所需连接器。新建空白查询,用 Web.Contents 访问 API。主机地址保持固定,把接口路径放在 RelativePath 中,Power BI 服务才能在刷新语义模型时识别这个数据源。

  • 在高级编辑器中粘贴 M 代码。
  • 固定 https://api.exchangerate.dev,接口放进 RelativePath。
  • 输出每种货币一行,并保留来源和更新时间。
  • 密钥由请求头发送,因此数据源凭据选匿名。
  • PBIX 编辑者可能看到查询;广泛分发时请使用服务端代理。

新建空白查询

先创建免费密钥。在 Power BI Desktop 选择获取数据 → 空白查询,然后在 Power Query 编辑器打开视图 → 高级编辑器。

粘贴 M 查询

Power Query M · Advanced Editor
let    ApiKey = "exr_live_replace_with_your_key_here",    Base = "USD",    Symbols = "EUR,GBP,JPY",    Response = Json.Document(        Web.Contents(            "https://api.exchangerate.dev",            [                RelativePath = "v1/latest/" & Base,                Query = [symbols = Symbols],                Headers = [Authorization = "Bearer " & ApiKey]            ]        )    ),    Rates = Record.ToTable(Response[rates]),    Renamed = Table.RenameColumns(        Rates,        {{"Name", "currency"}, {"Value", "rate"}}    ),    WithBase = Table.AddColumn(Renamed, "base", each Response[base], type text),    WithSource = Table.AddColumn(WithBase, "source", each Response[source], type text),    WithUpdatedAt = Table.AddColumn(        WithSource,        "data_updated_at",        each DateTimeZone.FromText(Response[data_updated_at]),        type datetimezone    )in    WithUpdatedAt

替换示例密钥,点击完成,并把查询命名为 FxRates。预览中应当分别显示 EUR、GBP 和 JPY 三行。

检查数据类型

currency、base 和 source 设为文本,rate 设为小数,data_updated_at 设为日期/时间/时区,然后点击关闭并应用。

发布并设置计划刷新

在 Power BI 服务中打开 https://api.exchangerate.dev 的数据源凭据,选择匿名。M 查询已经通过 Authorization 请求头发送密钥。刷新频率按报表实际需要设置。

RelativePath 可避免动态数据源错误

Power BI 需要识别一个固定主机。把域名保留在 Web.Contents 中,只把接口路径放进 RelativePath,发布后才能稳定刷新。

M 参数不是密钥保险箱

能够编辑 PBIX 或查询的人可能看到密钥。小型内部工作区可以这样用;如果文件会广泛流转,请改用服务端代理。

这是参考汇率

适合报表、分析、规划和展示,不是可成交报价,也不能用于结算。

常见问题

Power BI 能直接调用汇率 API 吗?

可以。Web.Contents 获取 JSON,Power Query 再把 rates 记录转成表格。

为什么提示动态数据源?

固定 Web.Contents 的主机,并把接口路径移到 RelativePath。

凭据类型选什么?

选匿名,因为 M 查询会通过 Authorization 请求头发送密钥。

继续阅读

从免费API密钥开始

免费套餐每月提供5,000次请求。无需信用卡。

获取免费密钥