如何使用JavaScript或C#获取PowerBI报告的页面标题?

时间:2019-01-11 19:05:32

标签: javascript c# powerbi powerbi-embedded powerbi-js-api

我有一个PowerBI报告,其中包含5个不同的页面。当嵌入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#?我之所以这样问,是因为我想根据登录的用户隐藏一些页面。

任何建议将不胜感激。谢谢!

编辑:说页面名称,是指powerBI报表底部的选项卡名称,每个页面都有一个不同的名称: enter image description here

2 个答案:

答案 0 :(得分:0)

1-不幸的是,“页面”对象当前未持有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报表编辑器,只需右键单击任何页面,然后单击“隐藏页面”选项。在这种情况下,您需要根据用户或组隐藏/取消隐藏页面,此链接为此提供了一个很好的解决方案: https://community.powerbi.com/t5/Developer/Power-BI-Embed-Page-Menu-as-List-View/td-p/174938

答案 1 :(得分:0)

对于

  1. 您是否可以考虑更新embed配置以在配置中提供页面名称。因此,您无需在调用embed后对其进行更新。 这将使用提供的页面作为活动页面加载报告:

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

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

  2. 不确定C#,在JS Client中,Power BI返回具有所有页面信息的pages对象。 如果不编辑源报表,该报表将为所有用户更新,您将无法修改导航窗格。因此,要隐藏基于用户的页面,可以添加自己的导航窗格,然后仅在其中显示受限的页面集。然后,您可以更新活动页面以更改为该页面。

为此,您可以关注Erray共享的社区链接。