如何在 JavaScript 或 C# 中获取 PowerBI 报表页面的标题?

How to get titles of the pages of a PowerBI report in JavaScript or C#?

我有一个包含 5 个不同页面的 PowerBI 报告。当我嵌入 PowerBI 报告的网页出现在我的屏幕上时,下面的代码帮助我将所需页面设置为默认页面。

var report = powerbi.embed(reportContainer, config); 

report.on('loaded', () => {
   report.getPages().then(pages => pages[3].setActive()); 
});

目前我有两个问题找不到答案:

1- 如何使用页面的确切名称而不是数组编号将页面设置为默认页面?我需要做类似的事情:pages => pages['Overall Summary'].setActive();

2- 有没有办法在 C# 上接收页面,或者将我正在获取的页面传递给 C#?我问这个的原因是我想根据登录的用户隐藏一些页面。

如有任何建议,我们将不胜感激。谢谢!

编辑:说到 pagename,我的意思是 powerBI 报告底部的选项卡名称,每个页面都有不同的名称:

1- 不幸的是,"page" 对象当前没有 ID 或 INDEX 属性。您可以通过执行 console.log(page); 来查看所有属性;但是,我们有 "displayname" 属性,这就是我要找的。我们需要做的就是将页面保存在一个数组对象中,并在循环时使用一个计数器来获取该页面的索引。检查下面处理此问题的代码:

report.on('loaded', () => {
   report.getPages().then(function (pages) 
      pages.forEach(function(page) { pageArray.push(page);}); 
      var i = 0;
      while (i < pageArray.length) { 
        if (pageArray[i].displayName == \"" + activePageSet + "\") { pages[i].setActive(); } 
        i = i + 1;
      } 
   });
});

2-目前无法访问C#中的页面,只能使用JS。要隐藏任何页面,您可以转到 PowerBI 报表编辑器,只需右键单击任何页面并单击 "Hide Page" 选项。对于这种情况,您需要 hide/unhide 基于用户或组的页面,这个 link 有一个很好的解决方案: https://community.powerbi.com/t5/Developer/Power-BI-Embed-Page-Menu-as-List-View/td-p/174938

对于

  1. 您能否考虑更新嵌入配置以在配置中提供页面名称。所以你不必在调用嵌入后更新它。 这将使用提供的页面作为活动页面加载报告:

    var config = {
        ...
        pageName: 'Overall Summary'
    };
    

    参考:https://github.com/Microsoft/PowerBI-JavaScript/wiki/Embed-Configuration-Details

  2. 不确定 C#,在 JS 客户端,Power BI returns 页面对象,它包含关于页面的所有信息。 如果不编辑将为所有用户更新的源报告,您将无法修改导航窗格。因此,对于基于用户的隐藏页面,您可以添加自己的导航窗格,然后只在那里显示受限制的页面集。然后您可以更新活动页面以更改为该页面。

为此,您可以关注社区 link Erray 分享的内容。