在我的应用程序中,我显示了Power BI报告。它已经有效,因此通过其ID(guid)显示任何报告都没有问题。
但有一些报告需要进行参数化,例如,当前年份或观看报告的人员。 那是我的问题:怎么做?
更具体地说,我将报告嵌入HTML <iframe>
元素中。我将iframe网址设置为从报告定义&#39; s embedUrl
(从REST API接收)收到的网址。我通过调用postMessage()
的JavaScript代码控制它。
报告定义:
{
"id":"12345678-6418-4b47-ac7c-f8ac7791a0aa",
"name":"Retail Analysis Sample",
"webUrl":"https://app.powerbi.com/reports/12345678-6418-4b47-ac7c-f8ac7791a0aa",
"embedUrl":"https://app.powerbi.com/reportEmbed?reportId=12345678-6418-4b47-ac7c-f8ac7791a0aa"
}
用于加载报告的JavaScript代码:
function onFrameLoaded() {
var m = {
action: "loadReport",
reportId: reportId,
accessToken: accessToken
};
iframe.contentWindow.postMessage(JSON.stringify(m), "*");
}
现在我通过自定义应用程序中的参数来过滤报告。有没有办法在报告中发送或传递值来过滤数据集?
答案 0 :(得分:30)
首先,必须在报告中定义过滤器,以便用户可以手动设置过滤器。
有两种方法可以将参数(从而设置过滤器)从外部源传递到Power BI报告。
a)在Power BI应用程序中
您可以通过在报告网址(浏览器地址栏中)中设置filter
参数来指定过滤器。参数采用自定义过滤查询:
https://app.powerbi.com/groups/me/reports/12345678-6418-4b47-ac7c-f8ac7791a0a7?filter=Store/PostalCode eq '15012'
其中&#34; 12345678-6418-4b47-ac7c-f8ac7791a0a7&#34;是一个报告ID,&#34; Store&#34;是一个数据集,PostalCode是要过滤掉的参数。 &#34;当量&#34;是一个相等运算符。
应对URL进行编码,因此最终网址如下所示:
https://app.powerbi.com/groups/me/reports/12345678-6418-4b47-ac7c-f8ac7791a0a7?filter=Store/PostalCode%20eq%20%2715012%27
b)JavaScript sendMessage oDataFilter参数
JavaScript(浏览器客户端)通过带有参数的postMessage()
调用来控制加载的BI报告(就像上面的问题一样)。还有一个额外的选项oDataFilter
可以设置为过滤报告。
设置如下:oDataFilter: "Store/PostalCode eq '15012'"
完整代码如下所示:
function onFrameLoaded() {
var m = {
action: "loadReport",
reportId: reportId,
accessToken: accessToken,
oDataFilter: "Store/PostalCode eq '15012'"
};
iframe.contentWindow.postMessage(JSON.stringify(m), "*");
}
<强>说明强>
答案 1 :(得分:6)
Microsoft创建了一个powerbi-client,除了应用一个过滤器之外,您还可以做很多事情。您可以根据需要应用任意数量的过滤器,也可以选择默认页面,默认过滤器,隐藏过滤器窗格,隐藏页面导航等。
您可以在此处找到客户: https://microsoft.github.io/PowerBI-JavaScript/
这是一个演示应用程序: https://microsoft.github.io/PowerBI-JavaScript/demo/index.html