使用PowerBI-JavaScript库在视觉对象上设置过滤器时,我面临以下问题:
例如,当使用setFilters
函数(在视觉对象上)时,无法在视觉上设置以下类型的筛选器:高级(filterType:0)和TopN(filterType:5):
const myAdvancedFilter = {
$schema: 'http://powerbi.com/product/schema#advanced',
target: {
table: 'MyDataTable',
measure: 'TimeDifference'
},
filterType: 0,
logicalOperator: 'And',
conditions: [
{
operator: 'GreaterThanOrEqual',
value: 0
},
{
operator: 'LessThanOrEqual',
value: 12
}
]
}
myVisual.setFilters([myAdvancedFilter])
.catch(errors => {
console.log(errors) // An error occurs
});
这是我收到的错误:
以下内容也不起作用:
reportPage.getVisuals().then(visuals => {
let firstVisual = visuals[0]; // Note: The report only contains one visual
firstVisual.getFilters().then(visualFilters => {
// The visualFilters array contains advanced/topN filters (note: the visual has the advanced filters applied when it is initially embedded; before I attempt to set filters)
firstVisual.setFilters(visualFilters).catch(errors => {
// If I attempt to set the 'visualFilters' to the visual I get the error depicted in the above screenshot. This issue shouldn't occur because the report already has these filters applied
});
})
})
setFilters()
函数似乎向内置报表(在iframe中)发送了PUT
请求(/ report / pages / {PageName} visuals / {Visual} / filters),并将过滤器传递给请求正文。响应返回“ InvalidFilter”错误。
注意:我可以设置基本过滤器,例如没有任何错误的列上的值。例如:
const basicFilter = {
$schema: 'http://powerbi.com/product/schema#advanced',
filterType: 1,
operator: 'In',
target: {
table: 'MyDataTable',
column: 'Zone'
},
values: ['MyZone']
}
myVisual.setFilters([basicFilter])
.catch(errors => {
console.log(errors) // No error occurs
});
我可以通过过滤器窗格设置所有过滤器(基本过滤器,高级过滤器和topN过滤器),而我无法通过PowerBI-JavaScript库以编程方式设置它们。
我该如何解决这个问题?
答案 0 :(得分:2)
在我从头开始验证时,并根据constructing filters的文档,语法和实现看起来都是正确的。如果提供的表或列名称引用不正确,则会引发此类错误。
过滤器定义中的一个或多个引用实体(表,列)可能在报表中不再可用,或者名称不正确。在这种情况下,将引发“无效的过滤器定义”错误设置过滤器时。