This is now working for operators besides "In". Modified code:
function advancedFilter(table, column, logicalOperator, operator, value){
if (logicalOperator == undefined || logicalOperator == "" || logicalOperator == null) {
logicalOperator = "And";
}
if (operator == undefined || operator == "" || operator == null) {
operator = "Is";
}
if (value == undefined || value == "" || value == null) {
value = 0;
}
if (operator == "In") {
return filter = {
$schema: "http://powerbi.com/product/schema#advanced",
target: {
table: table,
column: column
},
logicalOperator: logicalOperator,
conditions: [
{
operator: operator,
values: value
}
]
};
}
else {
return filter = {
$schema: "http://powerbi.com/product/schema#advanced",
target: {
table: table,
column: column
},
logicalOperator: logicalOperator,
conditions: [
{
operator: operator,
value: value
}
]
};
}
}Called in the view:
var arr = [104, 102, 117];
var useFilter = advancedFilter(table, column, "", "In", arr);
Pushed to the report filters:
report.on('loaded', event => {
report.getFilters()
.then(filters => {
filters.push(useFilter);
return report.setFilters(filters);
})
})It may also be worth noting that I have the function in a separate javascript file that I am referencing in the view. Here is what returns in the alert text box:
{
"$schema":"http://powerbi.com/product/schema#advanced",
"target":{
"table":"SiteInfo",
"column":"SiteId"
},
"logicalOperator":"And",
"conditions":[
{
"operator":"In",
"values":[
104,
102,
117
]
}
]
}I still get the error message in the developer console on the web page: Uncaught (in promise): Array[4].
Array[4] 0 : Object message : "operator is invalid. Not meeting required constraint" __proto__ : Object 1 : Object message : "values is invalid. Not meeting required constraint" __proto__ : Object 2 : Object message : "conditions.0.value is invalid. Not meeting required constraint" __proto__ : Object 3 : Object message : "filter is invalid"
What do you suggest?