Forum Discussion
Error embed token panel powerbi
HI apenaranda,
The error message mentions the issue is related to the dataset id. Can you please share some more detail about detail operation steps? They can help us clarify your scenario and test to troubleshoot.
How to Get Your Question Answered Quickly
Regards,
Xiaoxin Sheng
- apenaranda2 years agoPost Partisan
well, I'll explain what I do when I want to embed a report
everything starts in app.py with the def get_embed_info (Returns report embed configuration) which calls
embed_info = PbiEmbedService().get_embed_params_for_single_report(app.config['WORKSPACE_ID'], app.config['REPORT_ID'])This function will:
class PbiEmbedService: def get_embed_params_for_single_report(self, workspace_id, report_id, additional_dataset_id=None): report_url = f'https://api.powerbi.com/v1.0/myorg/groups/{workspace_id}/reports/{report_id}' api_response = requests.get(report_url, headers=self.get_request_header()) if api_response.status_code != 200: abort(api_response.status_code, description=f'Error while retrieving Embed URL\n{api_response.reason}:\t{api_response.text}\nRequestId:\t{api_response.headers.get("RequestId")}') api_response = json.loads(api_response.text) print(api_response) report = ReportConfig(api_response['id'], api_response['displayName'], api_response['embedUrl']) dataset_ids = [api_response['datasetId']] #dataset_ids = app.config['DATASET_DASHBOARD'] # Append additional dataset to the list to achieve dynamic binding later if additional_dataset_id is not None: dataset_ids.append(additional_dataset_id) embed_token = self.get_embed_token_for_single_report_single_workspace(report_id, dataset_ids, workspace_id) embed_config = EmbedConfig(embed_token.tokenId, embed_token.token, embed_token.tokenExpiry, [report.__dict__]) return json.dumps(embed_config.__dict__)get_request_header will generate token:
def get_request_header(self): return {'Content-Type': 'application/json', 'Authorization': 'Bearer ' + AadService.get_access_token()}and get_embed_token_for_single_report_single_workspace goes to:
def get_embed_token_for_single_report_single_workspace(self, report_id, dataset_ids, target_workspace_id=None): '''Get Embed token for single report, multiple datasets, and an optional target workspace Args: report_id (str): Report Id dataset_ids (list): Dataset Ids target_workspace_id (str, optional): Workspace Id. Defaults to None. Returns: EmbedToken: Embed token ''' request_body = EmbedTokenRequestBody() for dataset_id in dataset_ids: request_body.datasets.append({'id': dataset_id}) request_body.reports.append({'id': report_id}) if target_workspace_id is not None: request_body.targetWorkspaces.append({'id': target_workspace_id}) # Generate Embed token for multiple workspaces, datasets, and reports. Refer https://aka.ms/MultiResourceEmbedToken embed_token_api = 'https://api.powerbi.com/v1.0/myorg/GenerateToken' api_response = requests.post(embed_token_api, data=json.dumps(request_body.__dict__), headers=self.get_request_header()) if api_response.status_code != 200: abort(api_response.status_code, description=f'Error while retrieving Embed token\n{api_response.reason}:\t{api_response.text}\nRequestId:\t{api_response.headers.get("RequestId")}') api_response = json.loads(api_response.text) embed_token = EmbedToken(api_response['tokenId'], api_response['token'], api_response['expiration']) return embed_tokenAfterwards, the embedding is generated through index.js:
$(function () { var reportContainer = $("#report-container").get(0); // Initialize iframe for embedding report powerbi.bootstrap(reportContainer, { type: "report" }); var models = window["powerbi-client"].models; var reportLoadConfig = { type: "report", pageView: 'fitToWidth', tokenType: models.TokenType.Embed, // Enable this setting to remove gray shoulders from embedded report // settings: { // background: models.BackgroundType.Transparent // } }; $.ajax({ type: "GET", url: "/getembedinfo", dataType: "json", success: function (data) { embedData = $.parseJSON(JSON.stringify(data)); console.log(embedData); reportLoadConfig.accessToken = embedData.accessToken; // You can embed different reports as per your need reportLoadConfig.embedUrl = embedData.reportConfig[0].embedUrl; console.log(reportLoadConfig.embedUrl); // Use the token expiry to regenerate Embed token for seamless end user experience // Refer https://aka.ms/RefreshEmbedToken tokenExpiry = embedData.tokenExpiry; // Embed Power BI report when Access token and Embed URL are available var report = powerbi.embed(reportContainer, reportLoadConfig); // Triggers when a report schema is successfully loaded report.on("loaded", function () { console.log("Report load successful") }); // Triggers when a report is successfully embedded in UI report.on("rendered", function () { console.log("Report render successful") }); // Clear any other error handler event report.off("error"); // Below patch of code is for handling errors that occur during embedding report.on("error", function (event) { var errorMsg = event.detail; // Use errorMsg variable to log error in any destination of choice console.error(errorMsg); return; }); }, error: function (err) { // Show error container var errorContainer = $(".error-container"); $(".embed-container").hide(); errorContainer.show(); // Format error message var errMessageHtml = "<strong> Error Details: </strong> <br/>" + $.parseJSON(err.responseText)["errorMsg"]; errMessageHtml = errMessageHtml.split("\n").join("<br/>") // Show error message on UI errorContainer.html(errMessageHtml); } }); });This process works perfectly embedding reports, the problem comes when embedding the panel. The only thing I substitute (I don't know if it's correct) is the line
report_url = f'https://api.powerbi.com/v1.0/myorg/groups/{workspace_id}/reports/{report_id}'by
report_url = f'https://api.powerbi.com/v1.0/myorg/groups/{workspace_id}/dashboards/{report_id}'and also in index.js that changed report for dashboard
If I run I get the error:
Error Details:
'datasetId'This would be the entire process.