最近注意到,使用setFilters()设置PowerBI Embedded的筛选器会从筛选器面板中删除除第一个筛选器之外的所有滤镜。但是,当使用getFilters()时,所有其他过滤器仍然会被返回。在几个不同的环境中进行了测试。可能是什么地方出了问题,或者是微软的一些更新?
report.getFilters().then(r => console.log(r))产生:
[
{
"$schema": "http://powerbi.com/product/schema#basic",
"target": {
"table": "Regions",
"column": "Region"
},
"filterType": 1,
"displaySettings": {
"isLockedInViewMode": false,
"isHiddenInViewMode": false
},
"operator": "All",
"values": [],
"requireSingleSelection": false
},
{
"$schema": "http://powerbi.com/product/schema#basic",
"target": {
"table": "Hydrocarbon",
"column": "Hydrocarbon"
},
"filterType": 1,
"operator": "All",
"values": [],
"requireSingleSelection": true
}
]然而,从视觉上看,滤镜面板中只有“区域”滤镜。
运行以下命令:
report.setFilters([
{
"$schema": "http://powerbi.com/product/schema#basic",
"target": {
"table": "Hydrocarbon",
"column": "Hydrocarbon"
},
"filterType": 1,
"operator": "All",
"values": [],
"requireSingleSelection": true
},
{
"$schema": "http://powerbi.com/product/schema#basic",
"target": {
"table": "Regions",
"column": "Region"
},
"filterType": 1,
"displaySettings": {
"isLockedInViewMode": false,
"isHiddenInViewMode": false
},
"operator": "All",
"values": [],
"requireSingleSelection": false
}])不产生错误,将“碳氢化合物”放在过滤器面板的第一位,隐藏过滤器面板中的“区域”。
然后,report.getFilters().then(r => console.log(r))生成:
[
{
"$schema": "http://powerbi.com/product/schema#basic",
"target": {
"table": "Hydrocarbon",
"column": "Hydrocarbon"
},
"filterType": 1,
"operator": "All",
"values": [],
"requireSingleSelection": true
},
{
"$schema": "http://powerbi.com/product/schema#basic",
"target": {
"table": "Regions",
"column": "Region"
},
"filterType": 1,
"displaySettings": {
"isLockedInViewMode": false,
"isHiddenInViewMode": false
},
"operator": "All",
"values": [],
"requireSingleSelection": false
}
]我已经尝试将整个项目代码还原到几个月前。尝试将微软PowerBI JS SDK 2.18.0 -> 2.8.1降级,但仍然是一样的。
所以我猜是微软的一些“更新”(我找不到任何关于它的提及),或者问题仍然在我们这边--我们的一些报告设置…
report.updateFilters(models.FiltersOperations.Add, filters);的作用是一样的--视觉上只从滤镜数组中追加第一个滤镜,然而调用getFilters()产生的滤镜是最初的两倍……
手动折叠/展开滤镜面板(在setFilters/updateFilters之后)有助于取消隐藏消失的滤镜。
我会玩更多,看看这是否与filterPaneEnabled设置有关……
发布于 2021-09-01 19:44:45
作为一个快速解决方案,我为循环中的每个过滤器调用updateFilters()。它适用于报告级别的筛选器。
async function addFilters(obj_to_apply, filters) {
for (let i = 0; i < filters.length; i++) {
await obj_to_apply.updateFilters(models.FiltersOperations.Add, [filters[i]]);
}
}
https://stackoverflow.com/questions/68623939
复制相似问题