Power BI报告未在MVC应用程序中加载

时间:2017-11-02 17:14:25

标签: c# asp.net-mvc powerbi powerbi-embedded

几天前,我学会了在电源BI中制作报告,这是学习电源BI的绝佳经验。当我为基于MVC的Web应用程序创建仪表板时,我想让我的仪表板看起来和填充有吸引力。我正在考虑嵌入功率BI报告,因为我在视图中使用了以下代码: -

update mstr
    SET 
        IsGlobalFamilyUnique = case when (rn > 1) then 0 else 1 end
    from(
    select
        ControlNumber,
        MD5hash,
        IsglobalFamilyUnique,
        GlobalFamilyDupID,
        row_number() over (partition by [MD5Hash] order by ID asc) [RN]
    from dbo.tblMaster
    where NuixGuid = TopLvlGuid and IsGlobalFamilyUnique is null
)mstr

控制器的代码如下: -

<body>
    <script type="text/javascript" src="~/Scripts/PowerBI/powerbi.js"></script>
    <script type="text/javascript">
    window.onload = function () {
        var iframe = document.getElementById("iFrameEmbedReport");
        iframe.src = "https://app.powerbi.com/reportEmbed?reportId=" + embedReportId;
        iframe.onload = postActionLoadReport;
    }

    function postActionLoadReport() {
        var m = {
            action: "loadReport",
            accessToken: accessToken
        };
        message = JSON.stringify(m);

        iframe = document.getElementById("iFrameEmbedReport");
        iframe.contentWindow.postMessage(message, "*");;
      }
    </script>
    <style>
        #iFrameEmbedReport {
            width: 95%;
            height: 95%;
        }
    </style>
    <iframe ID="iFrameEmbedReport"></iframe>
</body>

我认为,我正在做的一切正确,但我不知道为什么它无法显示报告。如果我在上面给出的代码中有任何错误,请建议我。

1 个答案:

答案 0 :(得分:1)

不清楚错误的位置,因为您提供了大量代码并且没有关于错误本身的规范。这里有几点需要注意:

  • 要在您的HTML中嵌入Power BI内容,您只需要一个空的div元素
  • 整体代码过多。

您需要执行以下步骤:

  • 使用带有Power BI端配置的凭据的AuthenticationContext.AcquireTokenAsync获取身份验证令牌
  • 使用您刚刚获得的令牌实例化PowerBIClient。这是您申请的代币。切勿将其传递给用户。不会在会话中存储,因为它将过期。 PowerBIClient(new Uri(_Context.ApiUrl), new TokenCredentials(authResult.AccessToken, "Bearer"))
  • 获取Power BI中可用内容的ID。针对不同类型(仪表板,报告,磁贴)以及组(工作区)中的内容(或不是,例如,不同的),存在不同的API。 client.Dashboards.GetDashboardsInGroupAsync(GroupId)。如果您已经知道您要获取的内容类型及其ID,则可以跳过此步骤。请记住,如果EmbedUrl属性在返回的对象上为空,那么即使您手动构建此类网址,也无法呈现。
  • 获取特定内容的嵌入令牌。有不同的方法,例如, client.Reports.GenerateTokenInGroupAsync(GroupId, Id-of-content, new GenerateTokenRequest(accessLevel: "view"))
  • 最后一步是在客户端应用Embed Token和EmbedUrl。以下几行:

var embedToken = $('#embedToken').val();
var txtEmbedUrl = $('#txtReportEmbed').val();
var txtEmbedReportId = $('#txtEmbedReportId').val();
var models = window['powerbi-client'].models;
var permissions = models.Permissions.All;

var config= {
    type: 'report',
    tokenType: models.TokenType.Embed,
    accessToken: embedToken,
    embedUrl: txtEmbedUrl,
    id: txtEmbedReportId,
    permissions: permissions,
    settings: {
        filterPaneEnabled: true,
        navContentPaneEnabled: true
    }
};

var embedContainer = $('#embedContainer')[0];
var report = powerbi.embed(embedContainer, config);

你应该能够测试你的东西here。只需插入你的价值观。

你也可以在这里观察示例应用程序] 2。上面提供的流程适用于&#34; app拥有数据&#34;情况下。