能否通过Azure Embedded Power BI调用SQL Server存储过程生成报表并集成至Azure Web应用?
能否通过Azure Embedded Power BI调用SQL Server存储过程生成报表并集成到Azure Web应用?
当然可以实现这个方案,以下是具体的实施步骤和关键要点:
1. 在Power BI Desktop中对接存储过程
- 打开Power BI Desktop,选择获取数据 -> SQL Server,填入你的SQL Server实例信息。
- 进入高级选项,直接在SQL语句框中调用目标存储过程,示例:
EXEC dbo.GetSalesReport @StartDate = '2024-01-01', @EndDate = '2024-06-30'。 - 加载返回的数据集后,设计报表的可视化组件,完成后将报表发布到Power BI服务(需确保工作区关联了支持嵌入的容量,如A SKU或EM SKU)。
2. 配置Azure Embedded Power BI的权限与容量
- 在Azure门户中创建或使用现有Power BI Embedded容量,将报表所在的工作区分配至该容量。
- 注册Azure AD应用,获取客户端ID、客户端密钥和租户ID,用于Web应用的嵌入认证。
- 为Azure AD应用授予目标工作区的Embed Content权限,或通过服务主体配置细粒度权限。
3. 在Azure Web应用中集成嵌入功能
- 在Web应用项目中引入Power BI JavaScript SDK,通过SDK调用嵌入API。
- 后端通过Azure AD应用凭据生成嵌入令牌,令牌需指定报表ID、工作区ID及对应权限(如View)。
- 在前端页面添加HTML容器,通过SDK的
embed方法将报表嵌入,示例代码片段:
// 从后端获取嵌入令牌、嵌入URL和报表ID const embedToken = "生成的嵌入令牌"; const embedUrl = "报表的嵌入地址"; const reportId = "目标报表ID"; const embedConfig = { type: 'report', tokenType: models.TokenType.Embed, accessToken: embedToken, embedUrl: embedUrl, id: reportId, settings: { panes: { filters: { visible: false }, pageNavigation: { visible: true } } } }; // 嵌入报表到页面容器 const reportContainer = document.getElementById('report-container'); const embeddedReport = powerbi.embed(reportContainer, embedConfig);
4. 核心注意事项
- 若需动态传递存储过程参数,可在Power BI报表中定义参数并与存储过程参数绑定,嵌入时通过SDK传入参数值实现动态报表。
- 确保SQL Server防火墙允许Power BI服务(或Azure Embedded容量)访问数据库,Azure SQL Server可添加Power BI IP范围或启用服务端点。
- 嵌入令牌有效期需合理设置,同时遵循权限最小化原则,避免过度授权。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

