Поделиться через


Элементы управления срезами отчетов

С помощью API-интерфейсов среза можно получить и задать состояние срезов Power BI. Кроме того, можно использовать конфигурацию загрузки для изменения состояния среза при загрузке отчета.

Существует два типа визуальных элементов среза:

  • — срезы для визуальных элементов Power BI вне коробки. Встроенные срезы поддерживают все визуальные элементы Power BI, которые поставляются с Помощью Power BI (Desktop и service).

  • визуальные элементы Power BI из AppSource и файлов — срезы для сторонних визуальных элементов Power BI, доступных из AppSource или в виде PBIVIZ-файла. Срезы для визуальных элементов Power BI из AppSource и файлов или коротких визуальных элементов из AppSource или файлов— это срезы для визуальных элементов Power BI, созданных разработчиками.

Объект среза

Существует четыре типа среза:

Категориальный срез

категориальные срезы поддерживают следующие отображения:

  • Список
  • Раскрывающееся меню
  • Карточки значений

Вы можете выбрать один или несколько элементов из этих списков, чтобы отфильтровать отчет соответствующим образом.

Чтобы изменить выбор для этих типов срезов, необходимо создать объект IBasicFilter. Дополнительные сведения о создании базового фильтра см. в разделе Базовый фильтр.

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

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

Если целевой объект среза является иерархией, укажите IFilterHierarchyTarget целевой объект. Дополнительные сведения см. в разделе Использование целевых объектов для выбора поля данных для.

const basicFilter = {
  $schema: "http://powerbi.com/product/schema#basic",
  target: {
    table: "Store",
    hierarchy: "Country",
    hierarchyLevel: "Code"
  },
  operator: "In",
  values: [456, 943],
  filterType: models.FilterType.BasicFilter
};

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

Срез диапазона

срезы диапазона условий поддержки, таких как:

  • Между
  • Перед
  • После

Чтобы изменить выбор для срезов диапазона, создайте объект IAdvancedFilter. Дополнительные сведения см. в разделе Расширенный фильтр.

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: models.FilterType.AdvancedFilter
};

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

Срез относительной даты

срезы относительной даты условий поддержки, таких как:

  • На прошлой неделе
  • Последние пять лет

Чтобы изменить выбор для относительных срезов дат, создайте объект IRelativeDateFilter. Дополнительные сведения см. в объектах фильтра относительной даты и времени.

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

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

Относительный срез времени

срезы относительного времени условий поддержки, таких как:

  • Последние пять минут
  • Этот час

Чтобы изменить выбор для относительных срезов времени, создайте объект IRelativeTimeFilter. Дополнительные сведения см. в разделе Относительные даты и относительные фильтры времени.

const relativeTimeFilter = {
  $schema: "http://powerbi.com/product/schema#relativeTime",
  target: {
    table: "Sales",
    column: "OrderDate"
  },
  operator: models.RelativeDateOperators.InLast,
  timeUnitsCount: 5,
  timeUnitType: models.RelativeDateFilterTimeUnit.Minutes,
  filterType: models.FilterType.RelativeTime
};

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

Срез иерархии

срезы иерархии позволяют фильтровать из нескольких связанных полей.

снимок экрана, показывающий пример среза иерархии. В нем показаны уровни года, квартала и месяца.

Срез иерархии поддерживается из пакета SDK версии 2.21. Задайте выборы в срезе иерархии с помощью api setSlicerState или получения текущих выборов иерархии с помощью api getSlicerState.

Узнайте о добавлении полей в срезы иерархии.

Фильтр иерархии

В IHierarchyFilter описывается иерархия срезов. Используйте методы getSlicerState и setSlicerState с этим фильтром.

interface IHierarchyFilter extends IFilter {
    target: (IFilterTarget | IFilterKeyTarget)[];
    hierarchyData: IHierarchyFilterNode[];
}
  • hierarchyData — выбранные и неизбираемые элементы в дереве иерархии, где каждый IHierarchyFilterNode представляет один выбор значения.

    interface IHierarchyFilterNode {
        value?: PrimitiveValueType;
        keyValues?: PrimitiveValueType[];
        children?: IHierarchyFilterNode[];
        operator?: HierarchyFilterNodeOperators;
    }
    
    • Необходимо задать value или keyValues.
    • children — список дочерних элементов узла, относящихся к текущему выбору
    • operator — оператор для отдельных объектов в дереве. Оператор может быть одним из следующих:

    type HierarchyFilterNodeOperators = "Selected" | "NotSelected" | "Inherited";

    • Selected — значение явно выбрано.
    • NotSelected — значение явно не выбрано.
    • Inherited — выбор значения соответствует родительскому значению в иерархии или по умолчанию, если это корневое значение.

    operator является необязательным. Если оператор не задан, значение по умолчанию Inherited.

Примеры среза иерархии

В следующих примерах описаны различные сценарии использования API setSlicerState с срезами иерархии.

  • Выберите значения на разных уровнях. Например, в 2013 году выберите "Qtr 1" и "Qtr 2" и "Qtr 1" и "Qtr 2" в 2014 году.

    const filter = {
      "$schema": http://powerbi.com/product/schema#hierarchy,
      "target": [
          {
              "table": "Dates",
              "hierarchy": "Date Hierarchy",
              "hierarchyLevel": "Year"
          },
          {
              "table": "Dates",
              "hierarchy": "Date Hierarchy",
              "hierarchyLevel": "Quarter"
          }
      ],
      "filterType": 9,
      "hierarchyData": [
          {
              "operator": "Inherited",
              "value": 2013,
              "children": [
                  {
                      "operator": "Selected",
                      "value": "Qtr 1"
                  },
                  {
                      "operator": "Selected",
                      "value": "Qtr 2"
                  }
              ]
          },
          {
              "operator": "Inherited",
              "value": 2014,
              "children": [
                  {
                      "operator": "Selected",
                      "value": "Qtr 1"
                  },
                  {
                      "operator": "Selected",
                      "value": "Qtr 2"
                  }
              ]
          }
      ]
    };
    
    await slicer.setSlicerState({ filters: [filter] });
    

    снимок экрана, показывающий пример среза иерархии с четвертью и двумя выбранными в течение 2013 и 2014 года.

  • Выберите значения на разных уровнях с исключениями. Например, выберите 2014 без Qtr 1.

    const filter = {
      "$schema": http://powerbi.com/product/schema#hierarchy,
      "target": [
          {
              "table": "Dates",
              "hierarchy": "Date Hierarchy",
              "hierarchyLevel": "Year"
          },
          {
              "table": "Dates",
              "hierarchy": "Date Hierarchy",
              "hierarchyLevel": "Quarter"
          }
      ],
      "filterType": 9,
      "hierarchyData": [
          {
              "operator": "Selected",
              "value": 2014,
              "children": [
                  {
                      "operator": "NotSelected",
                      "value": "Qtr 1"
                  }
              ]
          }
      ]
    };
    
    await slicer.setSlicerState({ filters: [filter] });
    

    снимок экрана, показывающий пример среза иерархии, который выбирает значения на разных уровнях с исключениями. Он выбрал год 2014, за исключением Q 1.

  • Начните с оператора NotSelected, чтобы выбрать все , кроме для определенных значений. Например, выберите все, кроме "Qtr 1" 2008 и 2009.

    const filter = {
      "$schema": http://powerbi.com/product/schema#hierarchy,
      "target": [
          {
              "table": "Dates",
              "column": "Year"
          },
          {
              "table": "Dates",
              "column": "Quarter"
          }
      ],
      "filterType": 9,
      "hierarchyData": [
          {
              "operator": "NotSelected",
              "value": 2009
          },
          {
              "operator": "Inherited",
              "value": 2008,
              "children": [
                  {
                      "operator": "NotSelected",
                      "value": "Q1"
                  }
              ]
          }
      ]
    }
    
    await slicer.setSlicerState({ filters: [filter] });
    

    снимок экрана, показывающий пример среза иерархии, который выбирает все, кроме указанных значений. Выбраны годы 2010–2014. 2008 выбран без Q 1 и 2009 не выбраны вообще.

API-интерфейсы среза

С типом slicer можно использовать следующие методы для визуальных элементов:

Заметка

Конфигурация срезов синхронизации, сохраненная в отчете, распознается API-интерфейсами среза. Это означает, что при настройке среза с помощью API все срезы в одной группе синхронизации будут затронуты.

Получение состояния среза

Чтобы получить состояние среза, необходимо найти визуальный элемент среза экземпляр и вызвать getSlicerState. Результатом является тип ISlicerState.

По умолчанию срез не будет применять к нему фильтры. В таких случаях getSlicerState возвращает ISlicerState с пустым массивом фильтров.

работает для и визуальных элементов из AppSource или файлов срезов.

let state = await visual.getSlicerState();

Установка состояния среза

Чтобы задать состояние среза, необходимо найти визуальный элемент среза экземпляр, создать состояние среза и вызвать setSlicerState с созданным срезом.

await visual.setSlicerState(state);

Состояние среза является объектом ISlicerState.

interface ISlicerState {
    filters: ISlicerFilter[];
    targets?: SlicerTarget[];
}

Чтобы сбросить срез, вызовите setSlicerState с пустым массивом фильтров.

Настройка среза для визуальных элементов из AppSource или файлов

Чтобы задать визуальные элементы из AppSource или файлов срезов, необходимо создать объект ISlicerFilter, который может иметь следующие типы:

  • IBasicFilter
  • IAdvancedFilter
  • IRelativeDateFilter
  • IRelativeTimeFilter

Различные визуальные элементы из AppSource или файлов срезов, поддерживают различные типы фильтров. Чтобы определить тип фильтра, необходимый для изменения среза, вызовите visual.getSlicerState().

Дополнительные сведения о типах фильтров см. в фильтрах отчетов управления.

Настройка срезов при загрузке отчета

конфигурация загрузки отчета поддерживает изменение состояния срезов. Это позволяет изменить состояние срезов отчетов во время загрузки отчета. Для этого передайте массив ISlicer.

interface IReportLoadConfiguration {
    ...
    slicers?: ISlicer[];
}

Каждый объект ISlicer содержит селектор и состояние среза.

interface ISlicer {
    selector: SlicerSelector;
    state: ISlicerState;
}

Используйте визуальное имя или целевой объект среза , чтобы выбрать, какой срез нужно изменить. Дополнительные сведения см. в разделе Использование селекторов для управлениявизуальных элементов.

Заметка

Если передать разные объекты ISlicer, которые находятся в одной группе синхронизации, результат будет непредвиденным.

Применение среза к примерам загрузки

В этом разделе приведены два примера конфигурации загрузки с срезами.

  • Задание определенного среза по имени

    let slicers = [
      {
        selector: {
          $schema: "http://powerbi.com/product/schema#visualSelector",
          visualName: "d1feb8891635af3b335a"
        },
        state: {
          filters: [advancedFilter]
        }
      }
    ];
    
    let embedConfig = {
      ...
      slicers: slicers,
    };
    
  • Установка срезов по целевому объекту среза

    let target = {
      table: "Store",
      column: "StoreNumber"
    };
    
    let slicers = [
      {
        selector: {
          $schema: "http://powerbi.com/product/schema#slicerTargetSelector",
          target: target 
        },
        state: {
          filters: [advancedFilter]
        }
      }
    ];
    
    let embedConfig = {
      ...
      slicers: slicers,
    };
    

Рекомендации и ограничения

  • Срезы кортежей не поддерживаются.

  • Срез иерархии поддерживается из пакета SDK версии 2.21.

  • Встроенные срезы поддерживают только один фильтр.

  • Вызов setSlicerState на визуальном элементе, который не является срезом, вернет отклоненное обещание с ошибкой, операция работает только на срезах.

  • Нет API для изменения конфигурации синхронизации срезов.