Аналитические дашборды
======================

Аналитические дашборды - это набор диаграмм, отображающих состояние
данных в различных представлениях и разрезах. Они предназначены для
упрощения работы по их оценке, обработке, прогнозированию дальнейшего
состояния и принятию решений.

Введение
--------

Для интеграции аналитических дашбордов в Synergy используется
комбинация инструментов **Elasticsearch** и **Kibana**.

`Elasticsearch (ES) <https://www.elastic.co/products/elasticsearch>`_ -
это мощный инструмент для полнотекстового поиска и анализа данных.
Он позволяет быстро загружать, выполнять поиск и анализировать
большие объемы данных. Однако ES не имеет специальной визуальной
оболочки, и его использование возможно с помощью набора специальных
API.

`Kibana <https://www.elastic.co/products/kibana>`_ - это платформа
для анализа и визуализации данных. Kibana обрабатывает данные,
загруженные в ES, и работает только параллельно с ним. Если
работа с ES предполагает использование специального синтаксиса
команд, то Kibana позволяет обрабатывать те же данные с
помощью визуального интерфейса. При этом Kibana содержит
интерпретатор, позволяющий использование всех возможностей и
специальных команд ES.

Индексация и обработка исходных данных Synergy производится с
помощью ES, дальнейший анализ и визуализация - с помощью Kibana.

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

- `Elasticsearch <https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html>`_;

- `Kibana <https://www.elastic.co/guide/en/kibana/current/introduction.html>`_.

Индексация данных форм в ARTA Synergy
-------------------------------------

Запись данных в индекс производится после сохранения данных по форме.
Первичная загрузка данных в ES осуществляется с помощью процесса индексации
данных форм (*Административное приложение -> Обслуживание системы -> Управление индексом форм*).
В это время для каждой формы и каждого компонента этой формы в Synergy
создается несколько индексов. Каждый из этих индексов будет отображен в
Kibana со своим кодом, как используемое поле.

Названия индексов и alias-ы
~~~~~~~~~~~~~~~~~~~~~~~~~~~

- Для всех данных по форме, принадлежащих реестру с идентификатором ``someRegistryID``,
  создаётся индекс с именем ``<index-prefix>-r-someRegistryID``.

- Для всех данных по форме с идентификатором ``someFormID`` создаётся
  индекс с именем ``<index-prefix>-f-someFormID``.

- Если итоговая длина названия индекса (как для форм, так и для реестров)
  превысит 255 байт, оно будет обрезано до 255 байт.

Таким образом, для каждого реестра и для каждой формы, по которым есть данные,
будет создано по индексу. Если по форме создан реестр, а также созданы какие-то
данные вне реестра, то в этом случае будет создано два индекса:

#. ``<index-prefix>-r-IdOfRegistryWithOtherForm``

#. ``<index-prefix>-f-otherID``.

.. note:: `Здесь <https://www.elastic.co/guide/en/elasticsearch/reference/current/_list_all_indices.html#_list_all_indices>`_
          описано, как получить названия всех имеющихся индексов в Elasticsearch.

Кроме этого, для удобства использования и возможности переноса конфигурации для
каждого из вышеперечисленных индексов создаётся
`alias <https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html>`_.
Имена alias-ов формируются так:

- Для данных реестров: ``r-нормализованный_код_реестра``

- Для данных форм без реестров: ``f-нормализованный_код_формы``
  где ``нормализованый_код_реестра`` и ``нормализованный_код_формы`` - коды, соответственно,
  реестра и формы, в которых специальные символы \, ., [, ], {, }, (, ), +, -, ?, ^, $, |
  заменяются на _.

.. warning::  При этом возможна ситуация, когда нормализованные коды разных реестров совпадут и alias
              будет создан на на все соответветствующие индексы. Эта маловероятное затруднение может быть
              решено изменением кодов соответствующих реестров или форм. В случае, если это невозможно,
              необходимые alias-ы `можно создать вручную <https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html>`_.

              При изменении кода реестра или формы в Synergy имя соответствующего alias-а также изменяется.

Структура документа в индексе
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Одна единица данных в индексе Elasticsearch называется *Документ*. Документ содержит
поля определённых `типов <https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html>`_.
Каждый документ в текущем индексе соответствует одной единице данных по форме (=файлу по форме,
записи реестра) и содержит следующие поля:

- ``asfDataId`` - идентификатор данных по форме, тип ``keyword``;

- ``formId`` - идентификатор формы, тип ``keyword``;

- ``formCode`` - код формы, тип ``keyword``;

- ``registryId`` - идентификатор реестра, тип ``keyword`` (содержит значение ``-1`` для данных по
  форме, не связанных с реестром);

- ``documentId`` - идентификатор документа Synergy, тип ``keyword``;

- ``status`` - статус записи реестра, тип ``number``:

	- 0 - "Подготовка" (``NO_ROUTE``) - это значение также устанавливается для данных по форме,
  не связанных с реестром

	- 1 - "В процессе" (``STATE_NOT_FINISHED``)

	- 2 - "Активная" (``STATE_SUCCESSFUL``)

	- 3 - "Неуспешная" (``STATE_UNSUCCESSFUL``)

- ``deleted`` - признак удаления записи реестра (0 - не удалено, 1 - удалено), тип ``number``
  (0 для данных по форме, не связанных с реестром);

- ``created`` - дата и время создания данных по форме, тип ``date``;

- ``modified`` - дата и время изменения данных по форме, тип ``date``.

Далее следуют поля, соответствующие компонентам формы:

- Для каждого компонента формы создаётся несколько полей документа в индексе.

- Название полей, соответствующих компоненту формы, формируется так:
  ``идентфикаторкомпонентаформывнижнемрегистре_key_постфикс`` и
  ``идентфикаторкомпонентаформывнижнемрегистре_value_постфикс`` (данные для которых берутся,
  соответственно, из полей ``key`` и ``value`` данных по форме).

- Для каждого поля ``*_key`` и ``*_value`` создаются поля с нижеперечисленными постфиксами.

- Для компонентов, находящихся внутри динамической таблицы, а также компонентов с
  мультивыбором ("Объекты Synergy"), значения записываются в
  `массив <https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html>`_
  для всех постфиксов с учетом типов компонентов.

- Для компонентов, имеющих ``key`` и ``value``, создается общее поле ``*_object``
  (`Object <https://www.elastic.co/guide/en/elasticsearch/reference/5.3/object.html>`_).

Постфиксы для полей ``*_key``:

- ``_exact`` - поле содержит значение ``key``, приведенное к нижнему регистру, тип ``keyword``;

- ``_sort`` - поле содержит точное значение ``key``, тип ``keyword``;

- ``_number`` - поле содержит значение ``key``, приведенное к числу, тип ``number``;

            .. note:: Если поле ``key`` в документе пусто, в данное поле будет записано максимальное
                      значение для типа ``long``: 9 223 372 036 854 775 807

- ``_date`` - поле содержит значение ``key``, приведенное к дате; поле присутствует только для
компонентов Synergy типа "Дата/время"; тип ``date``;

- ``_double`` - поле содержит значение ``key``, приведенное к числу, тип ``double``;

            .. note:: Данное поле создается только в том случае, если из значения ``key`` удалось
                      выделить число (т.е. есть хотя бы один документ, использующий это поле,
                      содержит числовое значение);

- пустой постфикс - поле содержит n-граммы значения ``key``, через пробел, тип ``text``.

Постфиксы для полей ``*_value``:

- ``_exact`` - поле содержит значение ``value``, приведенное к нижнему регистру, тип ``keyword``;

- ``_sort`` - поле содержит точное значение ``value``, тип ``keyword``;

- ``_number`` - поле содержит значение ``value``, приведенное к числу, тип ``number``;

            .. note:: Если поле ``key`` в документе пусто, в данное поле будет записано максимальное
                      значение для типа ``long``: 9 223 372 036 854 775 807

- ``_prefix`` - поле содержит возможные префиксы из значения ``value``, через пробел, тип ``text``;

- ``_postfix`` - поле содержит возможные постфиксы из значения ``value``, через пробел, тип ``text``;

- пустой постфикс - поле содержит n-граммы значения ``value``, через пробел, тип ``text``.

Индексы изменения данных (историчные индексы)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Индексы изменения данных создаются только для тех форм и реестров, коды которых подпадают
под шаблоны (секции в конфигурационном файле ``arta/elasticConfiguration.xml``, см. описание выше).

Имя индекса ``<index-prefix>-rh-someRegistryID`` и ``<index-prefix>-fh-someFormID``, для реестров и
форм, соответственно. Alias-ы: ``rh-нормализованный_код_реестра`` и ``fh-нормализованный_код_формы``.

Отличие индексов изменения данных от текущих индексов - на каждое изменение данных по форме
создаётся новый документ в индексе. Кроме этого, для компонентов формы создаются только поля
со следующими постфиксами:

- Для ``*_key``:

	- ``_exact``

	- ``_number``

	- ``_date``

	- ``_double``

- Для ``*_value``:

	- ``_exact``

	- ``_number``

Типы данных и условия создания полей такие же, как и в текущем индексе.

Визуализация данных в Kibana
----------------------------

Шаблоны индексов
~~~~~~~~~~~~~~~~

Для использования индексов Elasticsearch в диаграммах Kibana
необходимо указать эти индексы, используя **шаблоны индексов**
(Index patterns). Они представляют собой маску имени, которой
должны соответствовать индексы, входящие в этот шаблон.

Подробно о шаблонах индексов написано в
`официальном руководстве по Kibana <https://www.elastic.co/guide/en/kibana/current/index-patterns.html>`_.

Например, если необходимо создать шаблон для индексов ``myindex-1``,
``myindex-2``, ``myindex-3`` и ``myindex-abc``, требуется создать
шаблон индекса ``myindex-*``, где символ * означает подстановку
произвольного набора символов.

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

          В случае, если изменение кодов компонентов не представляется
          возможным, можно создать шаблон индекса с маской "*". Этот шаблон
          будет содержать все индексы Elasticsearch.

          Другой способ объединения данных по форме в единый шаблон индекса -
          создание шаблона для отдельного реестра или формы. Например, если
          в диаграмме необходимо использовать данные реестра ``someRegistryID``,
          нужно создать шаблон индекса с названием ``r-someRegistryID``.
          Аналогично, для использования данных формы (в случае, если Synergy
          не содержит реестра для этой формы) с кодом ``someFormID`` нужно
          создать шаблон индекса ``f-someFormID``.

Создание шаблонов индексов осуществляется в разделе *Management* -
*Index Patterns*. Для создания нового шаблона нужно нажать на
кнопку **+ Add New**. Откроется окно создания нового индекса:

.. figure:: _static/img/dashboards/configure_index_pattern.png

    Создание нового шаблона индексов

Установленный чекбокс **Index contains time-based events** означает,
что данные, которые входят в шаблон, содержат временные данные.

.. attention::  Не рекомендуется оставлять этот чекбокс включенным, если не
                планируется визуализация данных во времени - например, отслеживать
                нагрузку на сервер в настоящий момент. Без особой настройки диаграммы,
                использующие такие поля, будут отображать только данные, соответствующие
                текущему моменту времени.

В поле **Index name or pattern** необходимо ввести имя шаблона индекса:

.. figure:: _static/img/dashboards/configure_index_pattern_1.png

    Создание нового шаблона индексов без временных данных

В случае, если Elasticsearch содержит индексы с именами, соответствующими
указанному шаблону, отобразится доступная кнопка **Create**. Для создания
шаблона индекса нужно нажать на эту кнопку.

.. figure:: _static/img/dashboards/index_pattern.png

    Созданный шаблон индексов

После создания шаблона отображается таблица со списком индексов, входящих
в этот шаблон, и их свойствами. Эти свойства зависят от типов индексов.
Типы, с которыми индексируются данные форм Synergy, описаны в разделе
`Индексация данных форм в ARTA Synergy`_.

Создание диаграмм
~~~~~~~~~~~~~~~~~

Kibana позволяет создавать следующие типы диаграмм:

1. **Area chart** - предназначена для отображения общего изменения
данных во времени, когда выявление суммарного значения всех данных
важнее, чем сравнение любых двух или более последовательностей.
Например, полезна для отображения использования ресурсов сервера.

2. **Data table** - отображение данных как результата агрегации в
виде таблицы.

3. **Line chart** - используется для отображения данных в виде линий
(графиков). В отличие от Area charts, удобна для сравнения
последовательностей между собой.

4. **Markdown widget** - вставка произвольной информации, используя
синтаксис языка Markdown.

5. **Metric** - отображение одного числа - результата агрегации
числовых данных.

6. **Pie Chart** - предназначена для отображения вклада нескольких
частей в некоторый общий результат. Может принимать вид круговой
(pie) или кольцевой (donut) диаграммы.

7. **Tag cloud** - отображение данных таким образом, чтобы их размер
зависел от некоторого числового показателя этих данных (например,
количества упоминаний).

8. **Tile map** - специфический тип диаграмм, использующий агрегацию
географических данных (тип поля ``geo_point``) для их отображения на
карте.

9. **Timeseries** - специфический тип диаграмм, визуализирующий
временные ряды.

10. **Vertical bar chart** - наиболее универсальная диаграмма,
отображающая числовые показатели произвольных полей в виде
вертикальной гистограммы.

Здесь будут рассмотрены некоторые наиболее универсальные из этих
диаграмм. Для ознакомления с работой остальных типов рекомендуем
обратиться к `официальному руководству по Kibana <https://www.elastic.co/guide/en/kibana/current/visualize.html>`_.

.. note:: В диаграммах возможно использование только агрегируемых типов
          полей. К ним относятся все числовые типы, а также типы ``date``,
          ``keyword``, ``geo_shape`` и другие. Агрегируемые поля отмечены
          галочкой в графе "Aggregatable" (на странице Managenent -
          Index Patterns).

Общая часть
"""""""""""

Все диаграммы создаются в разделе **Visualize**:

.. figure:: _static/img/dashboards/visualize.png

    Kibana, раздел Visualize

В общем случае, процесс создания диаграмм состоит из трех шагов:

1. Выбор типа диаграммы.

2. Выбор источника данных шаблона индекса.
В одной диаграмме возможно использование только одного шаблона,
поэтому для использования в одной диаграмме данных документов по
нескольким формам, необходимо использовать alias-ы.

    .. note:: Этот шаг отсутствует для диаграммы *Markdown widget*

.. figure:: _static/img/dashboards/step2.png

    Выбор источника данных

В качестве источника данных может выступать шаблон индекса
или результат поиска по данным (сохраненный или новый).

3. Настройка отображаемых данных:

.. figure:: _static/img/dashboards/step3.png

    Настройка отображаемых данных

Окно настройки данных имеет стандартный вид:

    В верхней части располагается панель меню с пунктами:

       - *New* - создать новую диаграмму, переход к шагу 1;

       - *Save* - сохранить диаграмму;

       - *Open* - открыть существующую диаграмму;

       - *Share* - предоставить доступ к сохраненной диаграмме;

       - *Refresh* - обновить данные.

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

    ``deleted:0``

где ``deleted`` - поле, генерируемое во время индексации данных
форм и хранящее значение 0, если данные в Synergy не были удалены.

Основная рабочая область окна делится на две части:

    - настройка данных: выбор полей и способа их агрегации;

    - просмотр результатов: отображение результата обработки
    выбранных данных.

В части настройки данных, в разделе *Metrics*, необходимо
выбрать способ агрегации числовых данных, отображаемых в
диаграмме. В поле *Aggregation* выбирается способ агрегации,
а в поле *Custom label* вводится отображаемое название параметра.

В разделе *Buckets* необходимо выбрать используемые данные,
числовые параметры которых будут отображены на диаграмме. Так
же, как и в разделе *Metrics*, здесь в поле *Aggregation*
выбирается способ агрегации, а в поле *Custom label* вводится
отображаемое название параметра. Отличие от раздела *Metrics*
состоит в том, что раздел *Buckets* позволяет группировать
произвольные типы данных при выборе соответствующего типа
агрегации.

Наиболее универсальным способом агрегации, используемом во
всех примерах ниже, является *Term*. Этот способ позволяет
агрегировать данные как строки, аналогично функции `GROUP BY`
в SQL. Подробно об остальных типах агрегации можно ознакомиться
в официальном руководстве по Kibana.

При выборе этого типа агрегации дополнительно отображаются
поля:

    - *Field* - выпадающий список, содержащий все поля, входящие
      в текущий шаблон индекса, для которых доступна агрегация.

    - *Order By* - параметр сортировки данных - по метрике из
      раздела *Metrics*, по отдельной метрике (*Custom metric*) или
      по содержимому текущего поля (*Term*).

    - *Order* - направление сортировки:

    - *Descending* - по убыванию;

    - *Ascending* - по возрастанию.

    - *Size* - количество отображаемых элементов - отображаются
      указанное количество элементов, располагающиеся в начале
      списка отсортированных указанным образом данных.

    - *Custom label* - отображаемое название параметра.

>> Для каждого используемого параметра, независимо от того, используется
ли он в разделах *Metrics* или *Buckets*, доступна дополнительная
настройка, отображаемая при нажатии на лейбл **Advanced**:

>> ![JSON Input](resources/img/integration/dashboards/json_input.png)

>> Она представляет собой текстовое поле, в которое можно добавить
специальные свойства в формате `JSON`, например:

>> `{ "script" : "doc['grade'].value * 1.2" }`

В настоящем документе процесс создания диаграмм и дашбордов
будет рассмотрен на примере анализа данных формы "Заявка":

![Форма "Заявка"](resources/img/integration/dashboards/request_form.png)

##### Pie chart {#sec.dashboards_pie_chart}

![Создание диаграммы Pie chart](resources/img/integration/dashboards/pie_chart_creation.png)

Для диаграммы Pie chart возможно два способа организации
используемых параметров:

- **Split Slices**: параметр будет отображен на диаграмме как
новый уровень секторов:

> ![Заявки по офисам и клиентам](resources/img/integration/dashboards/pie_chart_split_slices.png)

> На этом примере в разделе *Buckets* в качестве первого
параметра использовано поле "Центр решений" - результаты этой
агрегации на диаграмме отображены во внутреннем круге.

> В качестве второго параметра используется поле "Клиент/проект",
и результаты этой агрегации отображаются во внешнем круге.

>> **Примечание:**

>> Такая последовательность была выбрана в силу специфики
входных данных: известно, что один центр решений занимается
несколькими проектами, но одним проектом занимается ровно
один центр решений.

> Итоговая диаграмма позволяет оценить распределение объема
заявок как по центрам решений, так и по отдельным проектам.

- **Split Chart**: для нового параметра будет построена
отдельная диаграмма:

> ![Заявки по офисам и клиентам](resources/img/integration/dashboards/pie_chart_split_charts.png)

> Здесь для каждого центра решений (поле выбрано первым
параметром с типом *Split Chart*) отрисована отдельная
диаграмма, в которой показано распределение заявок по
проектам этих центров (второй параметр с типом *Split Slices*).
Видно, что три центра решений оставляли заявки только по одному
из своих проектов.

>> **Примечание:**

>> Kibana допускает использование *Split Chart* только в
сочетании с *Split Slices*, причем в этом случае параметр
со *Split Chart* обязательно должен располагаться выше, чем
параметр со *Split Slices* (сначала разделить данные по
отдельным диаграммам, а потом разделять данные внутри каждой
диаграммы).

Добавить новый параметр можно, нажав на кнопку **Add sub-buckets**.

Вкладка **Options** для этого типа диаграмм содержит три
параметра:

![Вкладка "Опции" диаграммы Pie chart](resources/img/integration/dashboards/pie_chart_options.png)

- Вид диаграммы: если чекбокс *Donut* включен, диаграмма
принимает вид кольцевой, если отключен - круговой (по
умолчанию).

- Расположение легенды: по умолчанию справа от диаграммы.

- Показывать всплывающие подсказки при наведении на часть
диаграммы: отображаются, если включен чекбокс *Show Tooltip*.

##### Data table {#sec.dashboards_data_table}

![Создание диаграммы Data table](resources/img/integration/dashboards/data_table_creation.png)

В разделе *Metrics* необходимо указать одну или несколько
метрик, по которым будут агрегироваться данные в таблице.

В разделе *Buckets* необходимо указать используемые параметры
и способы их агрегации. Для этого типа диаграмм также существует
два способа организации входных параметров:

- *Split Rows* для добавления параметра как нового столбца к
текущей таблице;

- *Split Table* для добавления параметра как отдельной таблицы.

Функциональность этих способов полностью аналогична *Split Slices*
и *Split Chart* для [круговой диаграммы](#sec.dashboards_pie_chart).

![Настроены отображаемые данные в таблице](resources/img/integration/dashboards/data_table_result.png)

> В диаграмме, указанной на рисунке выше, все параметры были
добавлены как *Split Rows*. Для каждого параметра в разделе
*Buckets* используется агрегация *Terms*.

Вкладка **Options** для этого типа диаграмм содержит следующие
параметры:

![Вкладка "Опции" диаграммы Data table](resources/img/integration/dashboards/data_table_options.png)

- Количество отображаемых строк на странице: по умолчанию
отображается 10 строк. В случае, если все записи не помещаются
на одну страницу, в нижней части таблицы отображается переключатель
страниц.

- Отображать метрики для каждой группы/уровня: если чекбокс
включен, то для каждого столбца (в случае *Split Rows*) или
каждой таблицы (в случае *Split Table*) будет добавлен столбец
с результатом агрегации из раздела *Metrics*.

- Отображать частичные строки: если чекбокс включен, то в таблицу
будут включены строки с данными, отсутствующими для выбранных
индексов (полей). По умолчанию в таблице отображаются только
полностью заполненные строки.

- Считать метрики для каждой группы/уровня: чекбокс, недоступный
для ручной установки. Его значение зависит от параметра
"Отображать метрики для каждой группы/уровня".

- Отображать итоговые значения: если чекбокс включен, то на каждой
странице таблицы для каждой отображаемой метрики будет указано
итоговое значение этой метрики для всех данных таблицы.

- Функция для итогов: выбор функции для подсчета итоговых значений
метрик. Параметр доступен только в том случае, если установлен
чекбокс "Отображать итоговые значения".

##### Vertical bar chart {#sec.dashboards_vertical_bar_chart}

![Создание диаграммы Vertical bar chart](resources/img/integration/dashboards/step3.png)

В диаграмме этого типа по оси Y располагаются метрики (параметры
в *Metrics*), с по оси X - группы (параметры в *Buckets*).

Доступно указание нескольких метрик на оси Y и не больше одной
группы каждого типа:

- *X-Axis*

- *Split Bars*

- *Split Chart*

Функциональность *Split Bars* и *Split Chart* полностью аналогична
*Split Slices* и *Split Chart* для [круговой диаграммы](#sec.dashboards_pie_chart).

![Диаграмма Vertical bar chart, пример 1](resources/img/integration/dashboards/split_chart_vertical_bar.png)

На примере 1 показан результат разделения параметров по диаграммам:
отображается количество заявок, поданных разными авторами и
выполненных разными исполнителями. Для этого исполнители расположены
по оси Х, а для каждого автора заявок отрисована отдельная диаграмма.

![Диаграмма Vertical bar chart, пример 2](resources/img/integration/dashboards/split_bars_vertical_bar.png)

На примере 2 показана простая гистограмма, визуализирующая количество
заявок, выполненных разными исполнителями.

##### Markdown widget {#sec.dashboards_Markdown_widget}

Специфичный тип диаграммы, который не имеет раздела *Data*.
В левой части рабочей области располагается поле ввода текста
с использованием синтаксиса языка
[Markdown](https://ru.wikipedia.org/wiki/Markdown), в правой
части отображается результат разметки текста:

![Создание Markdown widget](resources/img/integration/dashboards/markdown_widget.png)

Эта диаграмма не имеет никаких особых настроек.

##### Metric {#sec.dashboards_metric}

Диаграмма *Metric* работает только с числовыми данными, поэтому
для нее доступны только агрегации типа *Metrics*:

![Создание Metrics](resources/img/integration/dashboards/metrics_creation.png)

Добавить новую метрику можно, нажав на кнопку **Add metrics**.
Новая метрика будет добавлена как новое отображаемое число.

Вкладка **Options** для этого типа диаграмм содержит только
один параметр - размер шрифта:

![Вкладка "Опции" диаграммы Metrics](resources/img/integration/dashboards/metrics_options.png)

##### Tag cloud {#sec.dashboards_tag_cloud}

![Создание Tag cloud](resources/img/integration/dashboards/tag_cloud_creation.png)

В диаграмме Tag cloud возможно использование только одной агрегации *Metrics*
и только одного, специального способа организации данных в *Buckets* -
*Tags*. Добавление новых метрик или новых групп недоступно.

![Пример диаграммы Tag cloud](resources/img/integration/dashboards/tag_cloud_result.png)

Вкладка **Options** содержит следующие параметры:

- зависимость размера текста от числовой метрики: линейная, логарифмическая
или квадратичная;

- ориентация тэгов: горизонтальная, вертикальная или произвольная;

- границы размеров шрифта в тэгах;

- отображать название используемых параметров: чекбокс, по умолчанию выключен.

![Вкладка "опции" диаграммы Tag cloud](resources/img/integration/dashboards/tag_cloud_options.png)

#### Создание дашбордов {#sec.dashboards_dashboards_creation}

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

Создание дашбордов производится в разделе **Dashboard**:

![Kibana, раздел Dashboard](resources/img/integration/dashboards/add_dashboard.png)

Панель меню этого раздела содержит пункты:

- **New** - переход к строке поиска и созданию нового фильтра.

- **Add** - добавить новый дашборд, содержит перечень сохраненных диаграмм
и результатов поиска:

> ![Добавление диаграммы на дашборд](resources/img/integration/dashboards/dashboard_add_panel.png)

> Каждая диаграмма в списке сопровождается пиктограммой, указывающей на тип
диаграммы.

- **Save** - сохранить текущий дашборд.

- **Open** - открыть ранее сохраненный дашборд.

- **Share** - настройки публикации дашборда. Доступны только для сохраненного
дашборда.

- **Options** - настройка внешнего вида дашборда, содержит единственный
чекбокс "Использовать темную тему", по умолчанию выключен.

- **Time range** - настройка режима отображения данных для диаграмм.
В самой панели отображается настроенный период. По умолчанию отображаются
данные за последние 15 минут. Данная настройка актуальна, если есть
необходимость отображения данных в режиме реального времени. Доступна
возможность быстрой настройки периода (за сегодня, за эту неделю,
за последний год), указания абсолютной (дата и время в формате
`YYYY-MM-DD HH:mm:ss.SSS`) или относительной (например, последние
25 минут) настройки.

> ![Настройки периода отображения](resources/img/integration/dashboards/dashboard_time_range.png)

> При переходе к этой настройке в панели меню появляется дополнительный
пункт **Auto-refresh**. Он предназначен для настройки интервала обновления
диаграмм:

> ![Настройки периода обновления диаграмм](resources/img/integration/dashboards/dashboard_refresh.png)

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

> По умолчанию автообновление выключено.

Для всех диаграмм на дашборде возможно одновременное применение условий
для отображаемых данных. Для этого нужно ввести условие в панель поиска,
располагающуюся ниже панели меню. Функциональность этой панели для
раздела **Dashboards** аналогично панели в разделе **Visualize**.

##### Добавление и настройка диаграмм {#sec.dashboards_add_diargam_to_panel}

Для добавления ранее сохраненной диаграммы на дашборд необходимо выбрать пункт
меню **Add**. Отобразится список доступных диаграмм (илл. "Добавление диаграммы
на дашборд" выше). Необходимо кликнуть на нужную диаграмму - она будет добавлена
на дашборд:

![Добавлена панель диаграммы на дашборд](resources/img/integration/dashboards/add_digramm_step1.png)

Размер отображаемой диаграммы можно изменить, потянув за левый нижний угол панели
диаграммы:

![Изменение размера панели диаграммы](resources/img/integration/dashboards/add_diagramm_resize.png)

![Изменен размер панели диаграммы](resources/img/integration/dashboards/add_daigramm_step2.png)

В случае, если все данные диаграммы не помещаются на панели, в нее будет добавлен
внутренний скролл.

> **Примечание:**

> Если на определенном размере панели диаграммы "Облако тэгов" не помещаются все
данные, в ней будут отображены только наиболее популярные тэги (столько, сколько
возможно уместить на указанном размере панели), и будет отображен текст, предупреждающий,
что для отображения всех данных необходимо увеличить размер панели диаграммы:

> ![](resources/img/integration/dashboards/tag_cloud_resize.png)

На панели диаграммы отображаются пиктограммы управления:

- ![](resources/img/integration/dashboards/pict1.png) - изменить диаграмму (переход
к настройкам отображаемых данных диаграммы в разделе **Visualize**);

- ![](resources/img/integration/dashboards/pict2.png) - переместить панель диаграммы
на дашборде;

- ![](resources/img/integration/dashboards/pict3.png) - удалить панель диаграммы с
дашборда;

- ![](resources/img/integration/dashboards/pict4.png) - изменить размер панели диаграммы;

- ![](resources/img/integration/dashboards/pict5.png) - отобразать/свернуть источники
данных в виде таблицы, запроса или исходных данных Elasticsearch, а также
статистику запроса данных для этой диаграммы;

- ![](resources/img/integration/dashboards/pict6.png) - отобразить/свернуть легенду.

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

Пример готового дашборда:

![Пример готового дашборда в режиме редактирования](resources/img/integration/dashboards/dashboard_kibana.png)

Типы использованных примеров диаграмм (перечислены сверху вниз, слева направо):

1. *Markdown widget*

1. *Pie chart*

1. *Tag cloud*

1. *Metric*

1. *Vertical bar chart*

1. *Pie chart*

1. *Data table*

> **Примечание:**

> Применение фильтров ко всем диаграммам на дашборде дает корректные
результаты только в том случае, если коды используемых полей полностью
совпадают (в том числе постфиксы). В случае, если необходимо отображение
данных из нескольких форм, имеющих сквозные параметры (например, параметр
"Статус"), необходимо, чтобы коды компоненов, соответствующих этому
параметру, совпадали на всех формах, а в диаграммах использовалось одно
и то же поле с учетом [постфикса](#sec.dashboards_form_indexator_doc_structure).

##### Публикация дашборда {#sec.dashboards_sharing}

Kibana предоставляет способы публикации дашборда как интерактивной диаграммы
или как снимка его состояния на момент публикации (`shapshot`). Публикация
производится в меню **Share**:

![Пункт меню "Share"](resources/img/integration/dashboards/dashboard_share.png)

Встраивание как дашборда, так и его снимка возможно двумя способами:

1. как фрейма `html` - код для вставки содержится в поле **Embedded iframe**;

2. как ссылки - URL страницы содержится в поле **Link**.

> **Примечание:**

> По URL, автоматически генерируемому Kibana, пользователям предоставляется
дашборд в режиме редактирования, с правом доступа ко всем разделам Kibana.
Для того, чтобы предоставить пользователям доступ к дашборду только в режиме
просмотра, необходимо в URL ссылки добавить параметр:

> `&embed=true`

Один из способов публикации дашборда в Synergy - добавление его как
[внешнего модуля](#integration.methods.web-module). При этом каждый дашборд
должен быть оформлен как отдельный внешний модуль. В качестве адреса приложения
необходимо использовать URL дашборда.

Другой способ - включение фрейма с дашбордом в [пользовательский компонент](#integration.methods.user-component). В этом случае в качестве HTML-кода необходимо
использовать код из поля *Embedded iframe*.

> **Примечание:**

> По умолчанию в код фрейма включены границы 800х600 пикселей. Для того, чтобы
дашборд занимал все доступное место, необходимо изменить эти параметры:

> `height="100%" width="100%"`

> Параметр `embed=true`, означающий доступ к дашборду только в режиме просмотра,
включается Kibana по умолчанию.

> **Примечание:**

> Обратите внимание, что для того, чтобы дашборд был доступен пользователю, у него
должен быть доступ к серверу, на котором запущена Kibana.

![Пример дашборда, опубликованного как внешний модуль](resources/img/integration/dashboards/dashboard.png)
