从ASP.NET MVC应用程序将报表级别过滤器传递给Power Bi

时间:2019-12-23 12:25:53

标签: asp.net-mvc powerbi powerbi-embedded powerbi-filters

我在asp.net mvc应用程序中嵌入了power bi报告。它工作正常,正在显示数据。我遇到一个问题,在我的应用程序中,每个客户都有几个分支机构,例如城市。该客户端的每个用户都可以访问全部或部分分支,并且基于该访问,我们将在该用户登录系统时显示数据。

我想在Power Bi中实现相同的功能,即当用户登录系统并查看报告时,它应该显示他/她有权访问的分支的数据。我找到了一个解决方案 [Can I pass a dynamic query parameter to an embedded Power BI report in ASP.Net MVC?,我们可以在程序端设置过滤器值。我认为此方法适用,但是我仍在获取所有数据。

    const branchFilter = {
        $schema: "http://powerbi.com/product/schema#basic",
        target: {
            table: "tblWorkhistory",
            column: "BranchID"
        },
        operator: "In",
        values: [1],
        filterType: models.FilterType.BasicFilter
    }

        var config = {
        type: 'report',
        tokenType: models.TokenType.Embed,
        accessToken: accessToken,
        embedUrl: embedUrl,
        id: embedReportId,
        permissions: models.Permissions.All,
        viewMode: models.ViewMode.View,
        filters: [branchFilter],
        settings: {
            filterPaneEnabled: true,
            navContentPaneEnabled: true
        }
    };

在这里我想应用过滤器,它将仅显示id为1的分支的数据,但它显示所有数据。我在这里想念什么吗?在此代码之后我还需要做任何报告方面的事情吗?

关于, 稀树草原

2 个答案:

答案 0 :(得分:1)

支持使用embed config应用过滤器,并且您共享的代码示例似乎有效。

如果report.setFilters也失败,则表明过滤器出现问题。

尝试验证过滤器的数据类型,应为1还是“ 1”?

如果这不起作用,.setFilters请求是否返回任何错误消息?:

const filter = { ... };

report.setFilters([filter])
  .catch(errors => {
    // Handle error
  });

了解更多here有关通过JS SDK设置过滤器的信息。

答案 1 :(得分:0)

要显示基于登录到您的应用程序的用户的数据,您必须先在Power Bi报告中应用行级安全性(RLS),然后按照以下https://docs.microsoft.com/en-us/power-bi/developer/embedded-row-level-security条中的步骤进行操作