我在设置 Python 应用程序以嵌入分页 Power BI 报告时遇到困难。我可以让它在普通报告/视觉效果上正常工作,但在分页报告上却不能。
有人有一个用于在应用程序内呈现分页报告的 python 代码示例吗?
我一直在浏览网络和文档,我一定是缺少一些简单的配置。
def get_embed_params_for_multiple_reports(self, workspace_id, report_ids, additional_dataset_ids=None):
'''Get embed params for multiple reports for a single workspace
Args:
workspace_id (str): Workspace Id
report_ids (list): Report Ids
additional_dataset_ids (list, optional): Dataset Ids which are different than the ones bound to the reports. Defaults to None.
Returns:
EmbedConfig: Embed token and Embed URLs
'''
# Note: This method is an example and is not consumed in this sample app
dataset_ids = []
# To store multiple report info
reports = []
for report_id in report_ids:
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)
report_config = ReportConfig(api_response['id'], api_response['name'], api_response['embedUrl'])
reports.append(report_config.__dict__)
dataset_ids.append(api_response['datasetId'])
# Append additional dataset to the list to achieve dynamic binding later
if additional_dataset_ids is not None:
dataset_ids.extend(additional_dataset_ids)
embed_token = self.get_embed_token_for_multiple_reports_single_workspace(report_ids, dataset_ids, workspace_id)
embed_config = EmbedConfig(embed_token.tokenId, embed_token.token, embed_token.tokenExpiry, reports)
return json.dumps(embed_config.__dict__)
def get_embed_token_for_multiple_reports_multiple_workspaces(self, report_ids, dataset_ids, target_workspace_ids=None):
'''Get Embed token for multiple reports, multiple datasets, and optional target workspaces
Args:
report_ids (list): Report Ids
dataset_ids (list): Dataset Ids
target_workspace_ids (list, optional): Workspace Ids. Defaults to None.
Returns:
EmbedToken: Embed token
'''
# Note: This method is an example and is not consumed in this sample app
request_body = EmbedTokenRequestBody()
for dataset_id in dataset_ids:
request_body.datasets.append({'id': dataset_id})
for report_id in report_ids:
request_body.reports.append({'id': report_id})
if target_workspace_ids is not None:
for target_workspace_id in target_workspace_ids:
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_token
正如您提到的,正常报告和视觉效果正在嵌入,我们可以假设带有嵌入 URL 和嵌入令牌的访问部分正在按预期工作。
对于分页报告,由于您没有提及分页报告使用的配置,请确保嵌入配置包含
IPaginatedReportSettings
:
export interface IEmbedConfigurationBase {
...
settings?: IPaginatedReportSettings;
}
对于嵌入分页报告,我们需要在您的容量上启用分页报告工作负载,然后为其分配包含分页报告的工作区。
注意: 这仅适用于嵌入式 Gen1。
要启用分页报告,请登录 Power BI > 管理门户 > 容量设置。
参考资料: