Элементы управления срезами отчетов
С помощью 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] });
Выберите значения на разных уровнях с исключениями. Например, выберите 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] });
Начните с оператора
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] });
API-интерфейсы среза
С типом slicer
можно использовать следующие методы для визуальных элементов:
-
состояние среза -
getSlicerState
-
Установка состояния среза -
setSlicerState
Заметка
Конфигурация срезов синхронизации, сохраненная в отчете, распознается API-интерфейсами среза. Это означает, что при настройке среза с помощью API все срезы в одной группе синхронизации будут затронуты.
Получение состояния среза
Чтобы получить состояние среза, необходимо найти визуальный элемент среза экземпляр и вызвать getSlicerState
. Результатом является тип ISlicerState
.
По умолчанию срез не будет применять к нему фильтры. В таких случаях getSlicerState
возвращает ISlicerState
с пустым массивом фильтров.
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 для изменения конфигурации синхронизации срезов.