Power BI Embedded的filtersApplied事件不触发,如何监听用户筛选操作
问题原因:filtersApplied事件触发前置配置缺失
filtersApplied事件默认不会自动启用,你需要在嵌入报告的配置项中显式声明要监听该事件,同时确保使用的Power BI JS SDK版本≥2.19.0,旧版本存在该事件无法触发的已知缺陷。
步骤1:修正嵌入配置(Angular端示例)
在你的嵌入配置对象中添加events字段,声明需要监听的事件:
const embedConfig = { type: 'report', id: '<你的报告ID>', embedUrl: '<报告嵌入地址>', accessToken: '<你的嵌入令牌>', settings: { filterPaneEnabled: true // 确保筛选器面板是开启状态 }, // 必须显式声明要监听的事件列表 events: ['filtersApplied'] };
配置完成后你之前写的事件绑定代码即可正常触发,触发后可以通过以下方法获取当前所有生效的筛选值:
eventHandlersMap.set('filtersApplied', async (event?: service.ICustomEvent<any>) => { // 获取报告页所有生效的筛选器:包含报表级、页级、视觉对象级筛选 const allFilters = await report.getFilters(); console.log('当前生效筛选值:', allFilters); })
如果需要区分用户操作的是筛选器面板的筛选,可以判断返回的筛选器filterType字段,筛选器面板的筛选对应类型为FilterType.Basic或FilterType.Advanced。
需求2:导出当前视图的PowerPoint文件
App owns data模式下导出带当前筛选条件的报告,直接调用Power BI JS SDK提供的导出方法即可,导出时会自动携带当前页面所有生效的筛选条件:
// 导出配置 const exportSettings = { format: 'pptx', // 可选配置:指定导出哪些页面,不传默认导出所有可见页 pages: [report.getActivePage().then(page => page.name)], // 开启导出当前视图状态:包含筛选、切片器选择、钻取层级等 includeCurrentReportView: true }; // 触发导出 report.exportToFile(exportSettings) .then(async (exportResult) => { // 轮询导出状态直到完成 while (exportResult.status === 'running') { await new Promise(resolve => setTimeout(resolve, 1000)); exportResult = await exportResult.checkExportStatus(); } if (exportResult.status === 'succeeded') { // 获取导出文件的Blob地址,触发下载 const blob = await exportResult.getFile(); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = '报告导出.pptx'; a.click(); window.URL.revokeObjectURL(url); } });
注意需要在生成嵌入令牌的时候开启导出权限,在调用Power BI REST API生成嵌入令牌时,accessLevel设为View即可,不需要额外的编辑权限。
内容的提问来源于stack exchange,提问作者Steve Drake
相关产品推荐
相关产品推荐

