Forum Discussion
in selector json what is the 't' attribute
"{"selector":"{\"data\":[\"{\\\"comp\\\":{\\\"k\\\":0,\\\"l\\\":{\\\"col\\\":{\\\"s\\\":{\\\"e\\\":\\\"qtEmergencyRecords\\\"},\\\"r\\\":\\\"Year\\\"}},\\\"r\\\":{\\\"const\\\":{\\\"t\\\":4,\\\"v\\\":2017}}}}\"]}","highlight":false}"
"{"selector":"{\"data\":[\"{\\\"comp\\\":{\\\"k\\\":0,\\\"l\\\":{\\\"col\\\":{\\\"s\\\":{\\\"e\\\":\\\"qtFacility\\\"},\\\"r\\\":\\\"Facility County\\\"}},\\\"r\\\":{\\\"const\\\":{\\\"t\\\":1,\\\"v\\\":\\\"Baker\\\"}}}}\"]}","highlight":false}"
Seems like some sort of type code but doesn't match anything I see in metadata. Please advise. I am trying to build a filter that lets me select table/column, then value, but the generated selectors build filters across all the columns I've added to the control. so I'd like to build simple filters as above manually.
Hi rdegr,
I had a similar request andwas able to solve it in the following was:
1. I create an array of custom identities, in this case it uses the category as text, but that can be changed to SQExprBuilder.number if needed.
let categoryIdentities = categories.map((category) => { let sqlExpr = powerbi["data"].SQExprBuilder.equal(dataView.metadata.columns[0].expr, powerbi["data"].SQExprBuilder.text(category)); return powerbi["data"].createDataViewScopeIdentity(sqlExpr); });
# ref: https://github.com/liprec/powerbi-boxWhiskerChart/blob/89179879a7209b030245fd05c317eee2034db394/src/boxWhiskerChart.ts#L2602. When I loop thru the individual catagories (=i variable)I use the following code to create the correct SelectionId identifier:
let selectionId = new SelectionId({ data: [ categoryIdentities[i] ] }, false); # ref: https://github.com/liprec/powerbi-boxWhiskerChart/blob/89179879a7209b030245fd05c317eee2034db394/src/boxWhiskerChart.ts#L282I added links to my solution for more reference and hope this can also work for your visual.
-JP
16 Replies
- v-viigCommunity Champion
What is expected behavior for filtering?
Ignat Vilesov,
Software Engineer
Microsoft Power BI Custom Visuals
- rdegrHelper I
I want to first select a column from a dropdown list of the columns added to the control in edit mode, then select values from that column- I have that much working- then filter on the selected values for the selected column only. The problem is that once I have multiple columns and switch between them the code generates filters that filter across multiple columns so I want to build my own filter string or otherwise only filter the selected column. Here is my selection method
public setSelectedByValues() { let arr:any[] = []; for (let i = 0; i < this.dropdownByValues.selectedOptions.length; i++) { arr.push(this.selectionIds[this.dropdownByValues.selectedOptions[i].value+'']); } this.selectionManager.clear().then(()=> { this.selectionManager.select(arr, false).then((ids: ISelectionId[])=> { debugger; this.selectionManager.applySelectionFilter(); }); }); }and this.selectionIds populated as follows:
let cat = this.dataView.categorical.categories[index-1]; cat.values.forEach((val:any, valIndex:number) => { if (!hash[val+'']) { hash[val+''] = true; let optV:HTMLOptionElement = document.createElement("option"); optV.text = val; optV.value = val; this.dropdownByValues.options.add(optV); this.selectionIds[val+''] = this.host.createSelectionIdBuilder() .withCategory(cat, valIndex) .createSelectionId(); } });I think the real issue may be in this code. Here is an example of a selector where all I want is to filter on year but I also get facility.
{"selector":"{\"data\":[\"{\\\"and\\\":{\\\"l\\\":{\\\"comp\\\":{\\\"k\\\":0,\\\"l\\\":{\\\"col\\\":{\\\"s\\\":{\\\"e\\\":\\\"qtEmergencyRecords\\\"},\\\"r\\\":\\\"Year\\\"}},\\\"r\\\":{\\\"const\\\":{\\\"t\\\":4,\\\"v\\\":2017}}}},\\\"r\\\":{\\\"comp\\\":{\\\"k\\\":0,\\\"l\\\":{\\\"col\\\":{\\\"s\\\":{\\\"e\\\":\\\"qtFacility\\\"},\\\"r\\\":\\\"Facility County\\\"}},\\\"r\\\":{\\\"const\\\":{\\\"t\\\":1,\\\"v\\\":\\\"Alachua\\\"}}}}}}\"]}- rdegrHelper I
When I manually build "selector" strings identical to the ones I get if I only have a single column added to the control, then I get
Uncaught TypeError: e.hasIdentity is not a function
at
this.selectionManager.select(arr, false)