You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过嵌入URL或Power BI JavaScript库向报表传参并在M中访问?

Power BI嵌入时传递参数并在M语言中访问的实现方案

当然可行!这是Power BI嵌入场景里非常常见的需求,不管是用嵌入URL还是Power BI JavaScript库,都能实现参数传递,而且完全可以在M语言里读取这些传入的数据。下面给你一步步拆解具体实现方法:

一、通过嵌入URL传递参数

  • 如果你用的是Publish to web嵌入或者直接的报表嵌入URL,可以通过添加&p:<参数名>=<参数值>的格式传递自定义参数,比如:
    https://app.powerbi.com/reportEmbed?reportId=xxx&p:UserId=12345&p:Department=Engineering
    
    这种方式会直接映射到Power Query中同名的参数,非常直观。
  • 另外,如果你只是想过滤报表的视觉对象,也可以用&filter=<表名>/<列名> eq '<值>'的格式,但这种方式无法直接在M语言中访问,适合快速过滤现有视觉元素。

二、通过Power BI JavaScript库传递参数

用JS库的话灵活性更强,不管是初始化嵌入还是嵌入后动态更新参数都能实现:

初始化时传递参数

在构建嵌入配置对象时,通过settings.parameters字段传入参数:

const embedConfig = {
    type: 'report',
    id: '<你的报表ID>',
    embedUrl: '<你的嵌入URL>',
    tokenType: models.TokenType.Embed,
    accessToken: '<你的访问令牌>',
    settings: {
        parameters: {
            "UserId": "12345",
            "Department": "Engineering"
        }
    }
};

// 执行嵌入
const report = powerbi.embed(document.getElementById('reportContainer'), embedConfig);

嵌入后动态更新参数

如果需要在页面交互后修改参数,也可以调用报表实例的updateSettings方法:

// 假设用户点击了某个按钮后更新参数
document.getElementById('updateBtn').addEventListener('click', () => {
    report.updateSettings({
        parameters: {
            "UserId": "67890"
        }
    });
});

三、在M语言中访问传递的参数

这是把前端数据传入Power Query的核心步骤,操作很简单:

  1. 打开Power BI Desktop,进入编辑查询(Power Query编辑器)。
  2. 点击主页选项卡 → 参数 → 新建参数,创建和你传递的参数名完全一致的参数(比如UserId),可以设置一个默认值,方便在Desktop里调试。
  3. 现在在M语言代码里就能直接引用这个参数了,比如用来过滤数据源:
let
    Source = Sql.Database("你的数据库服务器", "你的数据库名"),
    SalesTable = Source{[Schema="dbo", Item="SalesRecords"]}[Data],
    FilteredData = Table.SelectRows(SalesTable, each [UserId] = UserId)
in
    FilteredData
  1. 把报表发布到Power BI服务后,当你通过嵌入URL或JS库传递参数时,这些值会自动覆盖Desktop里设置的默认值,M语言中的引用就会使用传入的新参数值。

需要注意的是:参数名必须完全匹配(大小写敏感),否则无法正确映射哦!

内容的提问来源于stack exchange,提问作者Matthew Christianson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:45:22