Глобальный фильтр хранится в разделе "Фильтры" Polymatica Manager, вне зависимости от того как он был создан. Создание глобального фильтра через Dashboards описано в соответствующем разделе: Добавление фильтра.

Глобальный фильтр может применяться:

  • к виджету;
  • к таблице и сводной таблице;
  • к точкам или полигонам Яндекс Карты.

Для применения глобального фильтра следует воспользоваться соответствующим элементом, расположенным на слое проекта, если глобальный фильтр вынесен на слой, или нажать на кнопку , расположенную в правом верхнем углу окна просмотра проекта.


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

В зависимости от типа глобального фильтра необходимо выбрать значение из выпадающего списка или ввести необходимое значение в поле ввода.

Тип и вид фильтра зависят от настроенного шаблона.


Примененный фильтр типа "Поиск"

Для фильтра типа «Поиск» при работе с числовыми значениями необходимо указывать дробные числа через «.» (например, «12.3») для корректного поиска по значениям.

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

Применение фильтра из панели

Для просмотра имеющихся в проекте глобальных фильтров следует нажать на кнопку , расположенную в правом верхнем углу окна просмотра проекта.

После нажатия на кнопку справа отобразится следующее окно:


Примененные фильтры

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

Для сброса всех значений в примененных фильтрах следует нажать кнопку «Сбросить все». Фильтры с установленным значением по умолчанию сбросятся до этого значения, фильтры без установленного значения по умолчанию очистятся, и произойдет переход в окно просмотра проекта.

Для закрытия окна следует нажать кнопку , расположенную в верхнем правом углу окна, или нажать левую кнопку мыши вне области окна.

Перенос значения глобального фильтра между слоями

Если фильтр применен к объекту на одном слое, то при наличии аналогичного фильтра на другом слое, фильтрация может быть повторена при переходе на другой слой. 

Для этого должны выполняться следующие условия:

  1. Фильтр-отправитель и фильтр-получатель должны быть созданы из одного шаблона.
  2. Фильтр-отправитель и фильтр-получать должны иметь одинаковый ключ (поле «Ключ» обязательно к заполнению).
  3. В настройках фильтра разрешена передача значений между слоями/проектами (необходимо добавить в настройки фильтра на финальном шаге создания связи между фильтром и объектом для обоих фильтров на обоих слоях).


Настройка переноса значений фильтра и результат

На Слое 1 в фильтре выбрано значение «Владимир», виджет отсортирован по данному значению:


Перейдем на Слой 2. В фильтре установлено то же значение, что и на Слое 1, и другой виджет отсортирован по нему:


Перенос значения фильтра на встроенный слой

В случае если второй слой встроен в первый при помощи HTML-компонента iframe, для переноса значения (или массива значений) фильтра со слоя на слой используется JavaScript-фунцкция postMessage().

Предположим, что у нас есть Слой 1 и Слой 2, при этом Слой 1 встроен в Слой 2 при помощи iframe:

Код iframe для встраивания слоя
<!-- Встроенный iframe c указанием URL слоя 2, ширины, высоты и уникального идентификатора "frame". -->

<iframe src="https://dev.platform.polymatica.ru/dashboard/project/82026/193019" width="1400" height="700" id="frame"></iframe>

Слой, встроенный в слой, и кнопка фильтрации


Также для примера создана кнопка, при нажатии на которую отправляется событие с функцией postMessage():

Код кнопки передачи значения фильтра
<!-- Кнопка для отправки события ChangeFilter с массивом value -->
 
<button onclick="sendMessage()">Кнопка фильтрации</button>
 
<script>
 
  // Функция для отправки сообщения в родительское окно
 
  function sendMessage() {
 
    // Отправляем сообщение с событием changeFilter и массивом value в iframe
 
    var iframe = document.getElementById('frame');
 
    iframe.contentWindow.postMessage({
 
      event: 'changeFilter', // Название события
 
      value: [{ value: ['январь'], key: "test123" }] 
 
      // Массив с объектами значений
 
    }, new URL(iframe.src).origin); // Ограничиваем сообщение тем же источником, что и iframe
 
  }
 
  // Слушатель для обработки сообщений от iframe (если нужно)
 
  window.addEventListener('message', (event) => {
 
    console.log(event); // Выводим событие в консоль для отладки
 
  });
 
</script>

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

Отправляемые данные - это объект, имеющий поля event и value, где event – название отправляемого события, а value – значение.

Для передачи фильтра в iframe мы используем event с названием 'changeFilter'.

Структура value всегда имеет тип массива объектов, которые имеют по два обязательных свойства: value и key, где value  –  значение, передаваемое в фильтр, и key – ключ этого фильтра.

Результат нажатия на кнопку фильтрации:

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

Передача значения в опубликованный виджет

В случае если в слой при HTML-компонента iframe встроен виджет, опубликованный по ссылке, для переноса значения (или массива значений) фильтра со слоя на виджет также используется JavaScript-фунцкция postMessage().

Предположим, что у нас есть Слой 1 и Виджет 1, при этом Виджет 1 встроен в Слой 1 при помощи iframe:

Код iframe для встраивания виджета
<!-- Встроенный iframe c указанием URL Виджета 1, ширины, высоты и уникального идентификатора "frame". -->

<iframe src="<iframe src="https://dev.platform.polymatica.ru/dashboard/shared-widget/88969?uid=86bc4e49-4ab6-5746-a785-7ef010369997" width="1400" height="700" id="frame"></iframe>

Обратите внимание

К виджету должен быть предоставлен неограниченный доступ (см. Действия с элементами проекта при просмотре).

Опубликованный виджет, встроенный в слой

Также для примера создана кнопка, при нажатии на которую отправляется событие с функцией postMessage():

Код кнопки передачи значения фильтра
<!-- Кнопка для отправки события SetFilter с массивом value -->

<button onclick="setFilter()">Кнопка фильтрации</button>

<script>

  function setFilter() {  
    var iframe = document.getElementById('frame');
    iframe.contentWindow.postMessage({
      event: 'setFilter', // Название события
       value: 
        [
          {
    "logical": "AND",
    "child": [
    {
    "column_id": 4313421,
    "action": "EQ",
    "value": "Бабушкинская"
	}
		  ]
		}
      ] 
    }, new URL(iframe.src).origin); // Ограничиваем сообщение тем же источником, что и iframe
    
    console.warn('set filter'); // Отправляем сообщение в консоль для отладки
  }
</script>

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

Отправляемые данные - это объект, имеющий поля event и value, где event – название отправляемого события, а value - обертка для параметров фильтрации и передаваемого значения фильтра.

Для передачи фильтра в iframe мы используем event с названием 'setFilter'.

В структуру value входят:

  • logical - тип логического оператора, который используется для фильтрации (AND или OR);
  • child - массив, включающий в себя:
    • column_id - идентификатор колонки датасета, на котором построен опубликованный виджет;
    • action - условие фильтрации;
    • value - передаваемое значение.


Подсказка

  1. Узнать идентификатор колонки датасета можно в окне редактирования датасета, просто наведя курсор на колонку (см. Руководство пользователя модуля Manager для вашей версии → "Датасеты" → "Настройка датасета").
  2. Доступные типы условий фильтрации для передачи в поле action:
    • EQ - равно
    • NEQ - не равно
    • GT - больше
    • LT - меньше
    • GTE - больше или равно
    • LTE - меньше или равно
    • IN - принадлежит множеству
    • NIN - не принадлежит множеству
    • LIKE - Содержит (с учетом регистра)
    • LIKE_I - Содержит (без учета регистра)
    • NLIKE - Не содержит (с учетом регистра)
    • NLIKE_I - Не содержит (без учета регистра)
    • START_LIKE - Начинается на (с учетом регистра)
    • START_LIKE_I - Начинается на (без учета регистра)
    • NSTART_LIKE - Не начинается на (с учетом регистра)
    • NSTART_LIKE_I - Не начинается на (без учета регистра)
    • END_LIKE - Заканчивается на (с учетом регистра)
    • END_LIKE_I - Заканчивается на (без учета регистра)
    • NEND_LIKE - Не заканчивается на (с учетом регистра)
    • NEND_LIKE_I - Не заканчивается на (без учета регистра)
    • DATE_RANGE - Входит в период
    • NDATE_RANGE - Не входит в период
    • RANGE - Входит в диапазон
    • NRANGE - Не входит в диапазон

Результат выполнения кода при нажатии кнопки фильтрации:

Кнопка фильтрации и результат фильтрации

  • Нет меток