如何将多个 Power BI 数据集绑定到单个 Power BI 报表

时间:2021-04-23 15:03:51

标签: powerbi powerbi-embedded

我有一个登录 Web 应用程序的用户名。

我正在使用 HTML、CSS、JavaScript 和 ASP.NET 网络表单来运行带有 Power BI 嵌入式报表的 Web 应用程序。

我正在尝试编写代码以根据登录到 Power BI 嵌入式配置的用户传递服务器名称和数据库名称。

如何将服务器名称和数据库名称传递给 Power BI Embedded 配置?

尝试使用以下内容使用导入数据集测试应用程序流,但 Power BI 报告未加载到 HTML div 元素中。它在嵌入 div 中给出“Power BI 加载徽标”,然后显示消息“Power BI 内容不可用”

申请流程:

  1. Power BI 工作区有一个报表和两个数据集

  2. 以下是.NET中的Token生成代码

            // Generate an embed token and populate embed variables
            using (var client = new PowerBIClient(new Uri(Configurations.ApiUrl), Authentication.GetTokenCredentials()))
            //using (var client = new PowerBIClient(new Uri(Configurations.ApiUrl), Authentication.m_tokenCredentials))
            {
                var report = client.Reports.GetReportInGroup(new Guid(Configurations.WorkspaceId), new Guid(ddlReport.SelectedValue));
                                                           
                var rls = new EffectiveIdentity(username: appLoginUserName, new List<string> { userDatasetId.ToString() });
                
                // Effective Identity
                var rolesList = new List<string>();
                rolesList.Add("Tenant");
                rls.Roles = rolesList;

                // Create list of datasets
                var v2DatasetID = new List<Guid>();
                v2DatasetID.Add(userDatasetId);

                // Create list of Effective Identities
                var v2rls = new List<EffectiveIdentity>();
                v2rls.Add(rls);

                // Create a request for getting Embed token 
                // This method works only with new Power BI V2 workspace experience
                var tokenRequest = new GenerateTokenRequestV2(

                    reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(report.Id) },

                    datasets: v2DatasetID.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),

                    identities: v2rls,

                    targetWorkspaces: null


                );

                // Generate Embed token
                var getToken = client.EmbedToken.GenerateToken(tokenRequest);
                

                // Populate embed variables (to be passed client-side)
                //embedToken = tokenResponse.Token;
                embedToken = getToken.ToString();
                embedUrl = report.EmbedUrl;
                reportId = report.Id;

            }
  1. 以下是带有动态数据集的 Power BI 嵌入配置:
        <script>
            // Read embed token
            var embedToken = "<% =this.embedToken %>";

            // Read embed URL
            var embedUrl = "<% = this.embedUrl %>";

            // Read report Id
            var reportId = "<% = this.reportId %>";

            // Read dataset Id
            var userDatasetId = "<% = this.userDatasetId %>";

            // Get models (models contains enums)
            var models = window['powerbi-client'].models;

            // Embed configuration is used to describe what and how to embed
            // This object is used when calling powerbi.embed
            // It can also includes settings and options such as filters
            var config = {
                type: 'report',
                tokenType: models.TokenType.Embed,
                accessToken: embedToken,
                embedUrl: embedUrl,
                id: reportId,   
                datasetId: userDatasetId, // The dataset id that you want the report to use 
                settings: {
                    filterPaneEnabled: true,
                    navContentPaneEnabled: true,
                    extensions: [
                        {
                            command: {
                                name: "cmdShowValue",
                                title: "Show Value in MessageBox",
                                selector: {
                                    $schema: "http://powerbi.com/product/schema#visualSelector",
                                    visualName: "VisualContainer7" // Sales and Avg Price by Month visual
                                },
                                extend: {
                                    visualContextMenu: {
                                        title: "Show Value in MessageBox"
                                    }
                                }
                            }
                        }
                    ]

                }
            };

            // Embed the report within the div element
            var report = powerbi.embed(embedDiv, config);
            
        </script>

1 个答案:

答案 0 :(得分:0)

这是不可能的。这些是报告范围设置,您要询问同时查看同一份报告的两个不同用户如何连接到不同的数据源。您必须部署尽可能多的报告并选择要嵌入的报告,或者使用所有数据源构建一份报告,然后根据当前登录的使用情况filter the data

否则,您的问题的直接答案是rebind the reportchange the datasource of the dataset