Фильтры

Если в отчете используются фильтры и коннектор с открытым кодом возвращает полные данные для всех запрошенных полей, то эти данные будут также отфильтрованы. Фильтры применяются на уровне коннектора. Это в некоторых случаях позволяет значительно повысить эффективность. Информация о фильтрах передается в объекте запроса getData(). Коннектор использует ее, чтобы отфильтровать данные перед отправкой в Студию данных.

Например, если вы подключились к базе данных SQL, то применение фильтров непосредственно в предложении WHERE (B3 на диаграмме ниже) может значительно снизить количество строк, возвращаемых в Студию данных. Это, в свою очередь, уменьшает объем данных, которые должны быть обработаны и отправлены в Студию данных (B5).

Блок-схема применения фильтров

Правила применения фильтров

  1. Возможны только два варианта: применить все фильтры или не применять ни одного. Список неподдерживаемых фильтров приведен здесь.
  2. В ответе не должно быть полей forFilterOnly.
  3. Оператор AND (И) объединяет все записи в массиве request.dimensionsFilters.

    В приведенном ниже примере коннектор после применения фильтра будет передавать только те значения, для которых country равно USA И source равно Social.

    {
          "dimensionsFilters": [
            [{
              "fieldName": "country",
              "values": ["USA"],
              "type": "INCLUDE",
              "operator": "EQUALS"
            }],
            [{
              "fieldName": "source",
              "values": ["Social"],
              "type": "INCLUDE",
              "operator": "EQUALS"
            }]
          ]
        }
        
  4. Оператор OR (ИЛИ) объединяет все подмассивы в массиве request.dimensionsFilters.

    В приведенном ниже примере коннектор после применения фильтра будет передавать только те значения, для которых country равно USA ИЛИ country равно Canada.

    {
          "dimensionsFilters": [
            [{
              "fieldName": "country",
              "values": ["Canada"],
              "type": "INCLUDE",
              "operator": "EQUALS"
            }, {
              "fieldName": "country",
              "values": ["USA"],
              "type": "INCLUDE",
              "operator": "EQUALS"
            }]
          ]
        }
        

Пример

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

Пример фильтра

  1. Пользователь добавил в отчет два фильтра:

    1. country равно IN_LIST Canada, USA
    2. source равно IN_LIST Social, Organic
  2. Пользователь настроил компонент диаграммы с параметром source и показателем sessions.

  3. Студия данных выполнила команду getData() со следующим объектом запроса:

    {
          "fields": [
            {"name": "source"},
            {"name": "sessions"},
            {"name": "country", "forFilterOnly": true}
          ],
          "dimensionsFilters": [
            [{
              "fieldName": "country",
              "values": ["Canada", "USA"],
              "type": "INCLUDE",
              "operator": "IN_LIST"
            }],
            [{
              "fieldName": "source",
              "values": ["Social", "Organic"],
              "type": "INCLUDE",
              "operator": "IN_LIST"
            }]
          ]
        }
        
  4. Коннектор отправил ответ с отфильтрованными данными.

    В этом случае возвращены source и sessions, для которых country равно "Canada" ИЛИ "USA" Иsource равно "Social" ИЛИ "Organic". Параметру filtersApplied присвоено значение true, поскольку все фильтры были успешно применены.

Исходные данные

source sessions country
Social 60 USA
Social 50 Canada
Social 40 UK
Organic 90 USA
Organic 80 Canada
Organic 70 UK
Newspaper 30 USA
Newspaper 20 Canada
Newspaper 10 UK

Отфильтрованные данные

source sessions
Social 60
Social 50
Organic 90
Organic 80

Ответ getData()

{
      "schema": [
        {"name": "source",   "dataType": "STRING"},
        {"name": "sessions", "dataType": "NUMBER"},
      ],
      "rows": [
        {"values": ["Social", 60]},
        {"values": ["Social", 50]},
        {"values": ["Organic", 90]},
        {"values": ["Organic", 80]}
      ],
      "filtersApplied": true
    }
    

Неподдерживаемые фильтры

Если коннектор не может применить какой-либо фильтр из запроса, то фильтрация не выполняется вовсе. В этом случае возвращаются все запрашиваемые поля (включая forFilterOnly), а параметру filtersApplied присваивается значение false.

Пример:

{
      "schema": [
        {"name": "source",   "dataType": "STRING"},
        {"name": "sessions", "dataType": "NUMBER"},
        {"name": "country",  "dataType": "STRING"}
      ],
      "rows": [
        {"values": ["Social", 60, "USA"]},
        {"values": ["Social", 50, "Canada"]},
        {"values": ["Social", 40, "UK"]},
        {"values": ["Organic", 90, "USA"]},
        {"values": ["Organic", 80, "Canada"]},
        {"values": ["Organic", 70, "UK"]},
        {"values": ["Newspaper", 30, "USA"]},
        {"values": ["Newspaper", 20, "Canada"]},
        {"values": ["Newspaper", 10, "UK"]},
      ],
      "filtersApplied": false
    }