gpt4 book ai didi

filter - 以编程方式将参数传递给 Power BI 筛选器

转载 作者:行者123 更新时间:2023-12-03 10:39:01 24 4
gpt4 key购买 nike

在我的应用程序中,我正在显示 Power BI 报告。它已经可以工作了,因此通过其 ID (guid) 显示任何报告都没有问题。

但是有些报告需要参数化,例如,当前年份或查看报告的人。 那是我的问题:怎么做?

更具体地说,我将报告嵌入 HTML <iframe> 元素中。我将 iframe URL 设置为从报告定义的 embedUrl(从 REST API 接收)接收的 URL。我通过调用 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 代码会拒绝它 作为无效名称;
  • 关于filter - 以编程方式将参数传递给 Power BI 筛选器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35555694/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com