Forum Discussion

AdrianCox's avatar
AdrianCox
Regular Visitor
6 years ago

How does sync slicers work in a custom visual?

I'm trying to make sync slicers work in a custom visual.  My custom slicer supports date range selection by creating an advanced filter, and works well on a single page. According to the documentation this requires nothing but adding supportsSynchronizingFilterState to the capabilities.json file.  This seems far too simple: when I switch pages in my report, PowerBI calls the constructor and update functions of my custom slicer afresh on each page, and I cannot find any information on the filter state passed to my visual in the options. The sync slicer checkboxes look like this:

 

But the jsonFilters passed in are empty:

No jsonFilters

Where should I get the data from?  There are further documentation hints pointing at FilterManager, but this has been removed in recent versions.

1 Reply

  • AdrianCox's avatar
    AdrianCox
    Regular Visitor

    Further details: the example timeline slicer on Github does work. It's a good deal more complex than my slicer, and I can't currently spot what difference might be significant.  To make things even more bizarre, occasionally there is data in the jsonFilter field. Here's my full capabilities.json:

    {
        "dataRoles": [
            {
                "displayName": "Date Range",
                "name": "category",
                "kind": "Grouping"
            }
        ],
        "objects": {
            "general": {
                "displayName": "General",
                "properties": {
                    "selected": {
                        "type": {
                            "bool": true
                        }
                    },
            "filter": {
                "type": {
                    "filter": true
                }
            }
        }}
        },
        "dataViewMappings": [
            {
                "conditions": [
                    {
                        "Category": {
                            "max": 1
                        }
                    }
                ],
                "categorical": {
                    "categories": {
                        "for": {
                            "in": "category"
                        },
                        "dataReductionAlgorithm": {
                            "top": {}
                        }
                    }
                }
            }
        ],
        "suppressDefaultTitle": true,
        "supportsHighlight": true,
        "supportsSynchronizingFilterState": true
    }