다음 코드 (Render Partial) HTML 메서드를 사용하여 웹 페이지에서 여러 개의 Power Bi Reports를 렌더링하고 있습니다.Power Bi : 단일 HTML 페이지의 렌더링 보고서
디버깅 후 코드가 서로 다른 ID, 포함 URL 및 해당 보고서의 URL을 저장하는 결과와 잘 작동한다는 것을 알게되었습니다. 그러나 웹 페이지에로드 한 후 Power Bi 로딩 심볼을 얻은 후에 모든 타일에 마지막 리포트가 표시됩니다. 다른 보고서를 받고 있지만 타일은 다른 보고서를 표시하지 않습니다. 전원 바이 엔진 부하가 웹 페이지에, 나는 모든 타일에 마지막 보고서를 얻을 때 여기
는 (이 코드는 모든 다른 보고서를 저장하여 잘 작동) 코드입니다 :하지만,컨트롤러 :
public class TelemetryController : Controller
{
private string workspaceCollection;
private Guid workspaceId;
private string signingKey;
private string apiUrl;
public TelemetryReports telemetryreport;
public TelemetryController()
{
this.workspaceCollection = ConfigurationManager.AppSettings["powerbi:WorkspaceCollection"];
this.workspaceId = Guid.Parse(ConfigurationManager.AppSettings["powerbi:WorkspaceId"]);
this.signingKey = ConfigurationManager.AppSettings["powerbi:SigningKey"];
this.apiUrl = ConfigurationManager.AppSettings["powerbi:ApiUrl"];
}
// GET: Telemetry
public ActionResult TelemetryIndex()
{
var authResponse = new SecurityHelper().Authenticate(new AuthenticateRequest() { IsNonMRT = false, isOnLoad = true });
telemetryreport = new TelemetryReports();
if (!authResponse.IsAuthenticated)
throw new NotAuthorizedException((String.Format(ResourceMessages.GetErrorMessage("REW_ERR_0005"), authResponse.context.LoggedInAlias)) + ";" + ((int)PAFEventID.REW_ERR_0005).ToString());
var devToken = PowerBIToken.CreateDevToken(this.workspaceCollection, this.workspaceId.ToString());
using (var client = this.CreatePowerBIClient(devToken))
{
var reportsResponse = client.Reports.GetReports(this.workspaceCollection, this.workspaceId.ToString());
foreach (var item in reportsResponse.Value)
{
var embedToken = PowerBIToken.CreateReportEmbedToken(this.workspaceCollection, this.workspaceId.ToString(), Guid.Parse(item.Id).ToString());
TelemetryReports.ReportViewModel _report = new TelemetryReports.ReportViewModel()
{
Report = item,
AccessToken = embedToken.Generate(this.signingKey)
};
telemetryreport.Reports.Add(_report);
}
}
return View(telemetryreport);
}
[ChildActionOnly]
public ActionResult Reports()
{
var devToken = PowerBIToken.CreateDevToken(this.workspaceCollection, this.workspaceId.ToString());
using (var client = this.CreatePowerBIClient(devToken))
{
var reportsResponse = client.Reports.GetReports(this.workspaceCollection, this.workspaceId.ToString());
var viewModel = new TelemetryReports.ReportsViewModel
{
Reports = reportsResponse.Value.ToList()
};
return PartialView(viewModel);
}
}
public async Task<ActionResult> Report(string reportId)
{
var devToken = PowerBIToken.CreateDevToken(this.workspaceCollection, this.workspaceId.ToString());
using (var client = this.CreatePowerBIClient(devToken))
{
var reportsResponse = await client.Reports.GetReportsAsync(this.workspaceCollection, this.workspaceId.ToString());
var report = reportsResponse.Value.FirstOrDefault(r => r.Id == reportId);
var embedToken = PowerBIToken.CreateReportEmbedToken(this.workspaceCollection, this.workspaceId.ToString(), report.Id);
var viewModel = new TelemetryReports.ReportViewModel
{
Report = report,
AccessToken = embedToken.Generate(this.signingKey)
};
return View(viewModel);
}
}
private IPowerBIClient CreatePowerBIClient(PowerBIToken token)
{
var jwt = token.Generate(signingKey);
var credentials = new TokenCredentials(jwt, "AppToken");
var client = new PowerBIClient(credentials)
{
BaseUri = new Uri(apiUrl)
};
return client;
}
}
TelemetryReport.cs
public class TelemetryReports
{
public TelemetryReports() {
Reports = new List<ReportViewModel>();
}
public List<ReportViewModel> Reports { get; set; }
public class ReportsViewModel
{
public List<Report> Reports { get; set; }
}
public class ReportViewModel
{
public IReport Report { get; set; }
public string AccessToken { get; set; }
}
}
public class TelemetryReport
{
public IReport Report { get; set; }
public string AccessToken { get; set; }
}
,691 (넣다 디버깅을 위해 필요)
index.HTML 사용 파일 :
<!DOCTYPE html>
<html lang="en">
<head>
@Styles.Render("~/Content/telemetry")
@{
Layout = null;
}
@model TelemetryReports
<script type="text/javascript" src="/js/app.js"></script>
<script src="~/Scripts/app/powerbi.js"></script>
<script src="~/Scripts/lib/chart.js"></script>
<script src="~/Scripts/lib/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/lib/bootstrap.min.js"></script>
</head>
<body>
<section>
<nav class="cl-effect-1" style="background-color:transparent">
<a class="fifth before after" href="/">Home</a>
</nav>
</section>
<br />
<div class="TelemetryReport">
@for (int i = 0; i < Model.Reports.Count; i++)
{
@Html.Partial("Report", Model.Reports[i])
}
</div>
</body>
</html>
Report.HTML :
@using Microsoft.PowerBI.AspNet.Mvc;
@{
Layout = "";
}
@model TelemetryReports.ReportViewModel
<body>
<section class="color-9">
<nav class="cl-effect-13">
<div class="active">@Model.Report.Name</div>
</nav>
</section>
@Html.PowerBIAccessToken(Model.AccessToken)
@Html.PowerBIReport(Model.Report.Name, Model.Report.EmbedUrl, new { style = "height:35vh" })
@*<div>
@Html.PowerBIAccessToken(Model.AccessToken)
@Html.PowerBIReport(Model.Report.Name,Model.Report.EmbedUrl, new { style = "height:85vh ; width:65vh;" })
</div>*@
</body>
마지막 웹 페이지는 다음과 같습니다
작업 영역 컬렉션 및 작업 영역 ID와 함께 보고서 ID를 전달하여 렌더링하려는 각 보고서에 대해 'PowerBIToken.CreateReportEmbedToken (...)'을 호출해야합니다. –
Works Fine :) 고마워요! –