以编程方式将参数传递给 Power BI 筛选器
Passing parameters to Power BI filter programmatically
在我的应用程序中,我正在显示 Power BI 报告。它已经可以工作,所以按 ID (guid) 显示任何报告都没有问题。
但是有些报告需要参数化,例如,当前年份或查看报告的人。 这是我的问题:怎么做?
更具体地说,我将报告嵌入到 HTML <iframe>
元素中。我将 iframe URL 设置为从报告定义的 embedUrl
接收的 URL(从 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), "*");
}
现在我通过来自自定义应用程序的参数来过滤报告。有没有办法发送或传递一个值来过滤报表中的数据集?
首先,必须在报表中定义过滤器,以便用户可以手动设置。
有两种可能的方法可以将参数(从而设置筛选器)从外部源传递到 Power BI 报表。
a) 在 Power BI 应用程序中
您可以通过在报告 URL(在浏览器地址栏中)中设置 filter
参数来指定过滤器。参数采用自定义过滤器查询:
https://app.powerbi.com/groups/me/reports/12345678-6418-4b47-ac7c-f8ac7791a0a7?filter=Store/PostalCode eq '15012'
其中“12345678-6418-4b47-ac7c-f8ac7791a0a7”为报表id,"Store"为数据集,PostalCode为过滤参数。 "eq" 是相等运算符。
URL 应该被编码,所以最终的 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), "*");
}
备注
- 过滤器参数(数据源或参数名称)中不能有任何点,因为 Power BI 代码拒绝它静默 作为无效名称;
Microsoft 创建了一个 powerbi-client,您可以用它做很多事情,而不仅仅是应用一个过滤器。您可以根据需要应用任意数量的过滤器,还可以选择默认页面、默认过滤器、隐藏过滤器窗格、隐藏页面导航等。
您可以在这里找到客户:
https://microsoft.github.io/PowerBI-JavaScript/
这是一个演示应用程序:
https://microsoft.github.io/PowerBI-JavaScript/demo/index.html
在我的应用程序中,我正在显示 Power BI 报告。它已经可以工作,所以按 ID (guid) 显示任何报告都没有问题。
但是有些报告需要参数化,例如,当前年份或查看报告的人。 这是我的问题:怎么做?
更具体地说,我将报告嵌入到 HTML <iframe>
元素中。我将 iframe URL 设置为从报告定义的 embedUrl
接收的 URL(从 REST API 接收)。我通过调用 postMessage()
.
报表定义:
{
"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), "*");
}
现在我通过来自自定义应用程序的参数来过滤报告。有没有办法发送或传递一个值来过滤报表中的数据集?
首先,必须在报表中定义过滤器,以便用户可以手动设置。
有两种可能的方法可以将参数(从而设置筛选器)从外部源传递到 Power BI 报表。
a) 在 Power BI 应用程序中
您可以通过在报告 URL(在浏览器地址栏中)中设置 filter
参数来指定过滤器。参数采用自定义过滤器查询:
https://app.powerbi.com/groups/me/reports/12345678-6418-4b47-ac7c-f8ac7791a0a7?filter=Store/PostalCode eq '15012'
其中“12345678-6418-4b47-ac7c-f8ac7791a0a7”为报表id,"Store"为数据集,PostalCode为过滤参数。 "eq" 是相等运算符。
URL 应该被编码,所以最终的 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), "*");
}
备注
- 过滤器参数(数据源或参数名称)中不能有任何点,因为 Power BI 代码拒绝它静默 作为无效名称;
Microsoft 创建了一个 powerbi-client,您可以用它做很多事情,而不仅仅是应用一个过滤器。您可以根据需要应用任意数量的过滤器,还可以选择默认页面、默认过滤器、隐藏过滤器窗格、隐藏页面导航等。
您可以在这里找到客户: https://microsoft.github.io/PowerBI-JavaScript/
这是一个演示应用程序: https://microsoft.github.io/PowerBI-JavaScript/demo/index.html