Power BI调用Web API传递JSON参数及动态输入需求咨询
我刚好做过类似的需求,给你一步步拆解解决方案:
1. 通过POST请求传递JSON参数并解析响应
首先打开Power Query编辑器,新建空白查询,进入高级编辑器替换成以下M代码:
let // 定义请求URL和JSON参数 url = "http://localhost:56661/api", jsonBody = "{ ""id"":1, ""name"":""api"", ""data"":""this is for testing"" }", // 设置请求头(必须指定Content-Type为application/json) headers = [ #"Content-Type" = "application/json" ], // 发送POST请求,注意把JSON文本转成二进制格式 response = Web.Contents(url, [ Headers = headers, Content = Text.ToBinary(jsonBody) ]), // 解析API返回的JSON响应 parsedJson = Json.Document(response) in parsedJson
这段代码完成了三个核心动作:构造POST请求体、发送请求、解析JSON响应。你可以直接把这个查询加载到数据模型,之后就能在报表里用可视化组件展示解析后的结果了。
2. 让用户在仪表板动态输入/编辑JSON参数
有两种方案,根据你的需求选择:
方案A:拆分字段为独立参数(用户友好型)
如果希望用户不用写完整JSON,只需要修改单个字段:
- 点击Power BI主页的建模选项卡 → 新建参数,分别创建三个参数:
id:类型选整数,默认值设为1,勾选"允许用户在报表中编辑"name:类型选文本,默认值设为"api",勾选"允许用户在报表中编辑"data:类型选文本,默认值设为"this is for testing",勾选"允许用户在报表中编辑"
- 回到Power Query编辑器,修改之前的M代码,把硬编码的
jsonBody换成参数拼接:
let url = "http://localhost:56661/api", // 用参数动态拼接JSON字符串 jsonBody = "{""id"":" & Text.From(id) & ",""name"":""" & name & """,""data"":""" & data & """}", headers = [ #"Content-Type" = "application/json" ], response = Web.Contents(url, [ Headers = headers, Content = Text.ToBinary(jsonBody) ]), parsedJson = Json.Document(response) in parsedJson
- 加载查询后,在报表页添加参数控件:点击可视化面板的「参数」选项,把三个参数拖到画布上,用户就能直接在仪表板修改字段值,点击刷新按钮即可重新调用API获取新结果。
方案B:允许用户直接输入完整JSON(灵活型)
如果需要用户自定义完整的JSON结构:
- 创建一个文本类型的参数,命名为
customJsonBody,默认值填你的示例JSON,勾选"允许用户在报表中编辑" - 修改M代码,直接使用参数作为请求体:
let url = "http://localhost:56661/api", // 直接使用用户输入的JSON作为请求体 jsonBody = customJsonBody, headers = [ #"Content-Type" = "application/json" ], response = Web.Contents(url, [ Headers = headers, Content = Text.ToBinary(jsonBody) ]), parsedJson = Json.Document(response) in parsedJson
- 同样添加参数控件到报表,用户可以输入任意合法的JSON字符串,刷新后立即生效。
3. 避坑注意事项
- 如果遇到跨数据源隐私错误:在Power Query编辑器点击文件 → 选项和设置 → 数据源设置,找到你的localhost API,把隐私级别设为公开
- 确保你的API能正确接收POST请求并返回标准JSON格式,否则解析步骤会报错
- 动态参数修改后,必须点击报表的刷新按钮才会重新调用API
内容的提问来源于stack exchange,提问作者Ravi Kiran G
相关产品推荐
相关产品推荐

