Click here to Skip to main content
15,885,244 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I have a blazor project that embeds a PowerBI report however i'm struggling to get different pages to show different reports. Currently I can only get two pages to show the same report. I have a .razor page called "PowerBIReport.razor" which has this code (I also have a page called "ReportTest.razor" which I want to show a different PowerBI report:

if (firstRender)
            {
                var embedModuleTask = JS.InvokeAsync<IJSObjectReference>("import", "./scripts/powerbi-embed.js");
                var reportViewModelTask = Http.GetFromJsonAsync<EmbeddedReportViewModel>("api/PowerBI");
                embedModule = await embedModuleTask;
                reportViewModel = await reportViewModelTask;
                StateHasChanged();
            }
            else if (embedModule is not null && reportViewModel is not null)
            {
                errorMessage = string.Empty;
                await embedModule.InvokeVoidAsync("embedReport",
                    PowerBIElement,
                    reportViewModel.Id,
                    reportViewModel.EmbedUrl,
                    reportViewModel.Token);
            }

This sends it to "PowerBIController.cs":
var authResult = await app.AcquireTokenForClient(scopes).ExecuteAsync();

                var tokenCredentials = new TokenCredentials(authResult.AccessToken, "Bearer");
                var urlPowerBiServiceAppRoot = "https://api.powerbi.com/";
                var pbiClient = new PowerBIClient(new Uri(urlPowerBiServiceAppRoot), tokenCredentials);

                var workspaceId = new Guid(_configuration["PowerBI:WorkspaceId"]);
                var reportId = new Guid(_configuration["PowerBI:ReportId"]);
                var report = pbiClient.Reports.GetReportInGroup(workspaceId, reportId);

                var tokenRequest = new GenerateTokenRequest(TokenAccessLevel.View, report.DatasetId);
                var embedTokenResponse = await pbiClient.Reports.GenerateTokenAsync(workspaceId, reportId, tokenRequest);

                var reportViewModel = new EmbeddedReportViewModel(
                    report.Id.ToString(),
                    report.Name,
                    report.EmbedUrl,
                    embedTokenResponse.Token);

                return Ok(reportViewModel);


These are the .json settings:

{
  "AzureAppInfo": {
    "AuthenticationMode": "ServicePrincipal",
    "AuthorityUri": "https://login.microsoftonline.com/TenantId",
    "ClientId": "d7177345-fa2e-4ef5-9d42-619441aa18f0",
    "TenantId": "32e5e8eb-b522-4d94-b35f-75e6755a9b83",
    "Scope": "https://analysis.windows.net/powerbi/api/.default",
    "ClientSecret": "V3d8Q~s3TyFB3aKHxkEsf36UsU2ngP8O~K.UEbcP"
  },
  "PowerBI": {
    "WorkspaceId": "08ec7b7f-8b1a-4952-8f9c-c8d65e8d7ab3",
    "ReportId": "e3ceb447-0ae6-4398-a14d-abf16fe11031"
  },
  "ReportTest": {
    "WorkspaceId": "08ec7b7f-8b1a-4952-8f9c-c8d65e8d7ab3",
    "ReportId": "ac1d04be-9d9c-47b7-bcda-fb225ac00ce1"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}


My problem is that in the controller I can either call "PowerBI:WorkspaceID" or "ReportTest:WorkspaceID". So both pages I have end up just displaying the same report. I need some advice on how I can switch between the different ID's in appsettings.json

What I have tried:

All I have tried is switching between "PowerBI:WorkspaceId PowerBI:ReportId " and "ReportTest:WorkspaceID ReportTest:ReportId".
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900