Skip to content

Slicers

ali-hamud edited this page Jun 27, 2018 · 17 revisions

As you may have read from the Embed Configuration Details page, you can change slicer selection when loading a report. Using slicers APIs, You can also get and set slicer state.

You may want to read Slicer Docs about how to use slicers in Power BI.

Slicer state

Slicer state contains the current filters applied by the slicer. Slicers support the following types of filters:

  1. Basic filters
  2. Basic filters with Keys.
  3. Advanced filters
  4. Relative date filters.

You can read more about creating filter object in Filters page.

type ISlicerFilter = IBasicFilter | IBasicFilterWithKeys | IAdvancedFilter | IRelativeDateFilter;

interface ISlicerState {
  filters: ISlicerFilter[];
}

Slicer APIs

Get Slicer state

To get a slicer state you need to find the slicer visual and call a method called getSlicerState on this visual.

visual.getSlicerState()
 .then(state => {
     ...
 });

Set Slicer state

To set a slicer state you need to create a SlicerState object, find the slicer visual and call a method called setSlicerState with the slicer state you created. To reset a slicer, just call setSlicerState with an empty array of filters.

visual.setSlicerState(state)
  .catch(errors => {
    // Handle error
  });

Native slicers

A slicer can be shown from one of various types:

Categorical slicers

This slicer shows a list, dropdown values (or other views), where you can select single or multiple items to filter the report accordingly.

To change a selection for these types of slicers you need to create an object of type IBasicFilter. example:

const basicFilter = {
  $schema: "http://powerbi.com/product/schema#basic",
  target: {
    table: "Store",
    column: "Count"
  },
  operator: "In",
  values: [1,2,3,4],
  filterType: pbi.models.FilterType.BasicFilter
};

visual.setSlicerState({
    filters: [basicFilter]
});

Range slicers

Range slicers support conditions like: Between, Before, After, .. To change a selection for range slicers you need to create an object of type IAdvancedFilter. example:

const advancedFilter = {
  $schema: "http://powerbi.com/product/schema#advanced",
  target: {
    table: "Store",
    column: "Number"
  },
  logicalOperator: "And",
  conditions: [
    {
      operator: "GreaterThanOrEqual",
      value: 30
    },
    {
      operator: "LessThan",
      value: 40
    }
  ],
  filterType: pbi.models.FilterType.AdvancedFilter
};

visual.setSlicerState({
    filters: [advancedFilter]
});

Relative date slicers

Relative date slicers support conditions like: Last Week, Last 5 Years, ... To change a selection for Relative date slicers you need to create an object of type IRelativeDateFilter. example:

const relativeDateFilter = {
  $schema: "http://powerbi.com/product/schema#relativeDate",
  target: {
    table: "Sales",
    column: "OrderDate"
  },
  operator: pbi.models.RelativeDateOperators.InLast,
  timeUnitsCount: 30,
  timeUnitType: pbi.models.RelativeDateFilterTimeUnit.Days,
  includeToday: true,
  filterType: pbi.models.FilterType.RelativeDate
};

visual.setSlicerState({
    filters: [relativeDateFilter]
});

Again, You can read more about creating filter object in Filters page.

Custom slicers

To get custom slicer selection, call getSlicerState. This works the same as in native slicers. To set custom slicer selection, you need to create an object of type ISlicerFilter, which can be of different types: IBasicFilter, IAdvancedFilter and more. see above.

Different custom slicers (custom visual slicers) support different type of filters. To understand what the filter type you need to create in order to change the slicer, you may call visual.getSlicerState() on the specific slicer you need to change.

Limitations

  • Legacy custom slicers are not supported.
  • Native slicers support only one filter.