Преобразование crossfilter
Преобразование crossfilter поддерживает маску фильтра для запросов по нескольким измерениям с помощью отсортированных индексов. Вместе с resolvefilter оно позволяет быстро интерактивно фильтровать большие наборы данных. Приём основан на библиотеке Crossfilter Майка Бостока и соавторов.
Параметры преобразования
| Свойство | Тип | Описание |
|---|---|---|
| fields | Field[ ] | Обязательно. Поля данных для фильтрации. Одно поле можно включить несколько раз, чтобы задать несколько запросов. |
| query | Array[ ] | Обязательно. Массив диапазонов для соответствующих полей. Каждый элемент должен вычисляться в массив из двух чисел: включаемой нижней и не включаемой верхней границы. |
| signal | String | Имя сигнала для вычисленной маски фильтра, если оно указано. |
Преобразование записывает свойство _index в каждый входной объект. Если другое преобразование перезапишет его, поведение не определено.
Использование
Пример перекрёстно фильтрует поля задержки delay, времени time и расстояния distance в данных об авиарейсах. crossfilter задаёт фильтры по диапазонам из сигналов. Три производных набора данных применяют resolvefilter, каждый раз игнорируя одно поле. Например, "filterTimeDistance" фильтрует данные по time и distance, не учитывая запрос по delay.
{
"signals": [
{ "name": "delayRange", "value": [-60, 180] },
{ "name": "timeRange", "value": [0, 24] },
{ "name": "distanceRange", "value": [0, 2400] },
],
"data": [
{
"name": "flights",
"url": "data/flights-200k.json",
"transform": [
{
"type": "crossfilter",
"signal": "xfilter",
"fields": ["delay", "time", "distance"],
"query": [
{"signal": "delayRange"},
{"signal": "timeRange"},
{"signal": "distanceRange"}
]
}
]
},
{
"name": "filterTimeDistance",
"source": "flights",
"transform": [
{
"type": "resolvefilter",
"filter": {"signal": "xfilter"},
"ignore": 1
},
...
]
},
{
"name": "filterDelayDistance",
"source": "flights",
"transform": [
{
"type": "resolvefilter",
"filter": {"signal": "xfilter"},
"ignore": 2
},
...
]
},
{
"name": "filterDelayTime",
"source": "flights",
"transform": [
{
"type": "resolvefilter",
"filter": {"signal": "xfilter"},
"ignore": 4
},
...
]
}
]
}