Преобразование 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
        },
        ...
      ]
    }
  ]
}