Фильтрация
Фильтрация в виджетах используется для управления отображением данных в соответствии с определенными критериями или условиями. Ее основная цель — позволить пользователям виджетов извлекать и анализировать только те данные, которые соответствуют их потребностям или интересам.
Для работы с фильтрацией отчета в props
виджета передается объект filtration
интерфейса IWidgetFiltration
. Этот объект позволяет виджету не только читать фильтры, но и управлять ими.
Чтение фильтров
Чтобы виджет использовал фильтры отчета и реагировал на их изменение, необходимо передавать их в вычислитель в качестве поля filters
Подготовленные для вычислителя фильтры отчета можно получить из filtration.preparedFilterValues
. Пример можно найти в разделе Вычислители.
Также виджет может иметь предустановленные фильтры, которые лежат в его settings
.
Чтобы эти фильтры влияли на данные виджета, их также необходимо передавать в вычислитель, используя функцию mapFormulaFiltersToInputs
.
Итоговый код вызова вычислителя:
import { mapFormulaFiltersToInputs } from "@infomaximum/widget-sdk";
// В коде виджета
generalCalculator.calculate({
filters: [
...props.filtration.preparedFilterValues,
...mapFormulaFiltersToInputs(props.settings.filters ?? []),
],
measures,
dimensions,
});
Порядок передачи фильтров не влияет на вычисляемые данные.
Управление фильтрацией отчета с помощью виджета
Виджет может добавлять в отчет свои фильтры, например, в ответ на клик пользователя по интересующему значению. Добавленный фильтр будет влиять не только на текущий виджет, но и на фильтрацию остальных виджетов отчета. Более подробно про фильтрацию можно прочитать на странице Фильтр по клику.
Рассмотрим самый распространенный фильтр — по формуле. Обычно он используется для фильтрации по значениям разреза. Например, если виджет отображает значения разреза, то при клике по конкретному значению можно добавить в отчет соответствующий фильтр. Это позволит увидеть детализацию по выбранному значению в других виджетах. В этом случае обработчик клика может выглядеть следующим образом:
import { IWidgetDimension, ESimpleDataType, ECalculatorFilterMethods, getDimensionFormula } from "@infomaximum/widget-sdk";
// В коде виджета
const handleClick = (dimension: IWidgetDimension, value: string) => {
props.filtration.addFormulaFilter({
// Заголовок, отображаемый в добавленном фильтре
name: dimension.name,
// Формула, по которой осуществляется фильтрация
formula: getDimensionFormula(dimension),
// Тип данных формулы
dataType: dimension.dataType ?? ESimpleDataType.OTHER,
// Метод фильтрации
filteringMethod: ECalculatorFilterMethods.INCLUDE,
// Выбранные значения
checkedValues: [value]
});
};
Более подробно с API фильтрации можно ознакомиться в интерфейсе IWidgetFiltration.
Была ли статья полезна?