Общая информация
В Polymatica Analytics предусмотрена возможность экспорта данных мультисферы в файлы следующих форматов: Excel, CSV, JSON, ODS. Файл можно сохранить как локально, на рабочей машине пользователя, так и удаленно, на сервере.
Часовой пояс системы при выгрузке данных — UTC.
Чтобы была доступна возможность экспорта из закрытого контура, добавьте в файле конфигурации /etc/polymatica/polymatica.conf строку, это добавит новую кнопку в интерфейс пользователя:
plm.user_interface.enable_remote_export_button
Для удаленного экспорта данных укажите следующую переменную в файле конфигурации /etc/polymatica/polymatica.conf, для которой укажите директорию, в которой будет сохраняться файл при экспорте:
# Директория, в которую производится удаленный экспорт plm.export_path = /usr/share/polymatica/export
По умолчанию:
- Путь к файлу:
- Удаленный экспорт: repo/export/<Имя пользователя>/
- Локальный экспорт: repo/tmp/
- Имя файлу присваивается по следующему образцу:
- Из мультисферы: <Название мультисферы>_<Дата>_<Время>.csv, например, sh222_20-04-27_16:53:07.csv
- Из ассоциативных правил: AssociationRules_<Название мультисферы>_<Дата>_<Время>.csv, например, AssociationRules_sh222_20-04-27_16:53:07.csv
Параметр в файле конфигурации, отвечающий за состояние чекбокса «Выбрать формат перед экспортом»:
plm.export.use_formatted_export_by_default
Принимает значения:
- false – чекбокс не отмечен. Это значение параметра установлено по умолчанию.
- true – чекбокс отмечен.
Логирование экспорта
Существует возможность логирования связанных с экспортом событий.
Для того, чтобы вести лог связанных с экспортом событий, внесите следующие изменения в файл конфигурации:
## Лог экспорта # Включить логирование (для отключения логирования эту строку нужно закомментировать или удалить) plm.log.export.enabled # Уровень логирования plm.log.export.loglvl = 3 # Включение записи в файл plm.log.export.log_to_file # Путь до файла относительно корневой папки репозитория plm.log.export.file.path = logs/export/Userlog_export.csv
Пример лога событий:
// "удаленный" в директорию на сервере "29.04.2020";"12:50:27.171";"a";"Multisphere";"sh222";"Dims: A, C. Facts: F1, F2. Format: csv. Rows: 8";"../repo/export/a/sh222_20-04-29_12:50:27.csv";"Remote";"Started" "29.04.2020";"12:50:27.172";"a";"Multisphere";"sh222";"Dims: A, C. Facts: F1, F2. Format: csv. Rows: 8";"../repo/export/a/sh222_20-04-29_12:50:27.csv";"Remote";"Finished" // "локальный" с отправкой пользователю "29.04.2020";"13:00:18.309";"q";"Multisphere";"sh222";"Dims: A, C. Facts: F1, F2. Format: csv. Rows: 8";"../repo/tmp/sh222_20-04-29_13:00:18.csv479e38cc";"Local";"Started" "29.04.2020";"13:00:18.310";"q";"Multisphere";"sh222";"Dims: A, C. Facts: F1, F2. Format: csv. Rows: 8";"../repo/tmp/sh222_20-04-29_13:00:18.csv479e38cc";"Local";"Finished" "29.04.2020";"13:00:18.325";"q";"Multisphere";"";"";"../repo/tmp/sh222_20-04-29_13:00:18.csv479e38cc";"Local";"Downloaded" "29.04.2020";"13:00:21.847";"a";"Multisphere";"sh222";"Dims: A, C. Facts: F1, F2. Format: csv. Rows: 8";"../repo/tmp/sh222_20-04-29_13:00:21.csv4648ba38";"Local";"Started" "29.04.2020";"13:00:21.848";"a";"Multisphere";"sh222";"Dims: A, C. Facts: F1, F2. Format: csv. Rows: 8";"../repo/tmp/sh222_20-04-29_13:00:21.csv4648ba38";"Local";"Finished" "29.04.2020";"13:00:21.869";"a";"Multisphere";"";"";"../repo/tmp/sh222_20-04-29_13:00:21.csv4648ba38";"Local";"Downloaded"
Файл для выгрузки с данным логом событий будет выглядеть следующим образом:
Loading
, где соответствующие поля содержат следующие данные:
- Date – дата.
- Time – время.
- UserName – логин пользователя.
- ObjectType – источник экспорта (мультисфера или ассоциативные правила).
- ObjectName – название мультисферы, откуда был экспорт.
- OperationDetails – перечень размерностей, фактов, формат выгружаемого файла и количество строк в экспортируемых данных.
- ResultObjectID – путь сохранения на сервере и название выгружаемого файла.
- Status – тип выгрузки:
- Remote – на сервер, без доступа пользователя;
- Local – на компьютер пользователя.
- Remote – на сервер, без доступа пользователя;
- ErrorCode – имя и код ошибки (состояние выгрузки, если нет ошибок):
- Started – принят запрос на экспорт;
- Finished – экспорт завершен;
- Downloaded - пользователю отдан файл экспорта.
Примечание
При локальном экспорте для фильтрации успешных событий рекомендуется использовать сочетание строк с полями Finished (содержит всю информацию по мультисфере) и Downloaded (подтверждает успешное сохранение на рабочую машину пользователя). Сочетание строк определяется общим именем файла (например, sh222_20-04-29_13:00:18.csv479e38cc).
Параметры, связанные с экспортом, также приводятся на странице «Файл конфигурации», в разделе «Настройки экспорта».
Экспорт по шаблону с помощью Python-скрипта
В Polymatica Analytics есть возможность настраивать шаблоны для экспорта данных окна мультисферы в формате XLSX или ODS. Такой экспорт выполняется с помощью Python-скрипта, который необходимо предварительно зарегистрировать для приложения при помощи утилиты plm-util.
Пакет, необходимый для установки скрипта, можно установить вместе с приложением Polymatica Analytics для следующих операционных систем:
- Astra Linux CE 2.12;
- Astra Linux SE 1.7;
- Astra Linux SE 1.8;
- CentOS 7 (Intel);
- CentOS Stream 9;
- Debian 12;
- Ubuntu 18.04 (Intel);
- Ubuntu 22.04;
- Ubuntu 24.04;
- Альт 10 СП Сервер;
- Альт Сервер 10;
- ОСнова 2;
- РЕД ОС 7.3;
- РЕД ОС 8.
После установки папка python-export-excel с кодом скрипта и вспомогательными файлами будет размещена в директории /var/plmrepo/. По умолчанию путь до скрипта экспорта будет следующий: /var/plmrepo/python-export-excel/src/main.py.
Файл с кодом скрипта будет автоматически обновляться вместе с обновлением системы. Настроенные файлы конфигурации изменяться не будут и будут работать с обновленным скриптом.
Шаблон экспорта настраивается через файл конфигурации скрипта. Используя один файл с исходным кодом скрипта можно зарегистрировать несколько шаблонов, создав для них несколько файлов конфигурации. Файл конфигурации имеет следующую структуру:
{
"connection": {
"url": "http://localhost:8080/",
"login": {
"username": "admin",
"password": "password"
},
"session": {
"session_id": null,
"manager_uuid": null,
"full_polymatica_version": "5.9.4-402dfc4b"
},
"script_name": null,
"module_uuid": null
},
"paths": {
"fonts_dir": "fonts",
"output_filename": "result.xlsx"
},
"font": {
"font_size": 14,
"font_name": "Arial"
},
"columns": {
"autosize": true,
"max_width": 35,
"min_width": 5
},
"data": {
"units": 10000,
"hierarchy_columns": null,
"shift_symb": " "
},
"blocks": {
"date": {
"format": "%Y-%m-%d %H:%M:%S",
"name": "Дата формирования файла",
"name_font_size": 12,
"name_font_bold": false,
"date_font_size": 14,
"date_font_bold": false
},
"date_relevance": {
"name": "Дата и время актуальности данных",
"name_font_size": 12,
"name_font_bold": false,
"date_font_size": 14,
"date_font_bold": false
},
"title": {
"name": "",
"olap_name_instead_of_layer_name": false,
"font_size": 14,
"font_bold": true,
"align_h": "center",
"align_v": "center"
},
"out_filter": {
"name": "Фильтры из панели \"Размерности и факты\":",
"name_font_size": 18,
"name_font_bold": true
},
"data_filter": {
"name": "Фильтры из отчета:",
"name_font_size": 18,
"name_font_bold": false
},
"table": {
"total_name": "Всего",
"header_font_size": 15,
"header_font_bold": false,
"header_align_h": "left",
"header_align_v": "bottom",
"header_wrap_text": false,
"left_dim_align_h": "right",
"left_dim_align_v": "bottom",
"left_dim_wrap_text": false,
"data_dim_align_h": "left",
"data_dim_align_v": "bottom",
"data_wrap_text": false,
"border_style": "thin",
"border_color": "00000000",
"font_bold_total_col": false,
"font_bold_total_row": false,
"merge_left_dims_cells": false,
"data_number_format": "0.00000"
}
}
}
Если скрипт находится на одном хосте с Polymatica Analytics, в connection достаточно передать:
"connection": {
"url": "http://localhost:8080/",
"script_name": null,
"module_uuid": null
},
Если используется порт, отличный от 8080, следует указать его.
Заполнение полей в составе connection (в том числе login либо session) конкретными значениями, требуется, только если скрипт запускается с локальной машины, которая удаленно подключается к Polymatica Analytics.
Параметры, настраиваемые в файле конфигурации, описаны в блоке кода ниже:
{
"connection": {
"url": "http://localhost:8080/", //URL стенда Polymatica Analytics (string)
"login": { //необязательное поле для авторизации; если заполняется оно, то не заполняется session
"username": "admin", //логин пользователя (string)
"password": "password" //пароль пользователя (string)
},
"session": { //необязательное поле для авторизации; если заполняется оно, то не заполняется login
"session_id": null, //идентификатор сессии из куки-файла (string)
"manager_uuid": null, //идентификатор менеджера, получаемый при авторизации (string)
"full_polymatica_version": "" //версия системы, получаемая при авторизации
},
"script_name": null, //название сценария для выгрузки данных (string)
"module_uuid": null //идентификатор модуля для выгрузки данных (string)
},
"paths": {
"fonts_dir": "fonts", //директория шрифтов (string)
"output_filename": "result.xlsx" //путь до файла с результатом и название файла (string)
},
"font": {
"font_size": 14, //кегль шрифта (integer)
"font_name": "Arial" //название шрифта (string)
},
"columns": {
"autosize": true, //автоматическое изменение ширины ячейки (bool)
"max_width": 35, //максимальная ширина ячейки (float)
"min_width": 5 //минимальная ширина ячейки (float)
},
"data": {
"units": 10000, //количество строк в порции выгружаемых данных
"hierarchy_columns": null, //необязательный набор столбцов*, которые необходимо сгруппировать, в соответствии с требуемой иерархией (sequence).
"shift_symb": " " //символ отступа (string)
},
"blocks": {
"date": {
"format": "%Y-%m-%d %H:%M:%S", //формат даты (string)
"name": "Дата формирования файла", //текст, который выводится для даты формирования файла (string)
"name_font_size": 12, //кегль шрифта для name (integer)
"name_font_bold": false, //жирность шрифта для name (bool)
"date_font_size": 14, //кегль шрифта для даты (integer)
"date_font_bold": false //жирность шрифта для даты (bool)
},
"date_relevance": {
"name": "Дата и время актуальности данных", //текст, который выводится для даты актуальности данных (string)
"name_font_size": 12, //кегль шрифта для name (integer)
"name_font_bold": false, //жирность шрифта для name (bool)
"date_font_size": 14, //кегль шрифта для даты (integer)
"date_font_bold": false //жирность шрифта для даты (bool)
},
"title": {
"name": "", //необязательный заголовок (string)
"olap_name_instead_of_layer_name": false, //выводить название окна мультисферы вместо названия слоя (bool)
"font_size": 14, //кегль шрифта заголовка (integer)
"font_bold": true, //жирность шрифта заголовка (bool)
"align_h": "center", //горизонтальное выравнивание (string); возможные значения: "centerContinuous", "justify", "right", "left",
//"distributed", "general", "center", "fill"
"align_v": "center" //вертикальное выравнивание (string); возможные значения: "justify", "bottom", "distributed", "top", "center"
},
"out_filter": { //блок фильтров по неактивным размерностям
"name": "Фильтры из панели \"Размерности и факты\":", //название блока (string)
"name_font_size": 18, //кегль шрифта (integer)
"name_font_bold": true //жирность шрифта (bool)
},
"data_filter": { //блок фильтров по активным размерностям
"name": "Фильтры из отчета:", //название блока (string)
"name_font_size": 18, //кегль шрифта (integer)
"name_font_bold": false //жирность шрифта (bool)
},
"table": {
"total_name": "Всего", //название ячейки итогов (string)
"header_font_size": 15, //кегль заголовка таблицы (integer)
"header_font_bold": false, //жирность заголовка таблицы (bool)
"header_align_h": "left", //горизонтальное выравнивание заголовка таблицы (string)
"header_align_v": "bottom", //вертикальное выравнивание заголовка таблицы (string)
"header_wrap_text": false, //перенос текста на следующую строку в заголовке (bool)
"left_dim_align_h": "right", //горизонтальное выравнивание левых размерностей (string)
"left_dim_align_v": "bottom", //вертикальное выравнивание левых размерностей (string)
"left_dim_wrap_text": false, //перенос текста на следующую строку для левых размерностей (bool)
"data_dim_align_h": "left", //горизонтальное выравнивание в данных (string)
"data_dim_align_v": "bottom", //вертикальное выравнивание в данных (string)
"data_wrap_text": false, //перенос текста на следующую строку в данных (bool)
"border_style": "thin", //стиль границы таблицы (string); возможные значения: "mediumDashed", "mediumDashDotDot", "slantDashDot", "double", "dashDot", "hair",
//"medium", "dotted", "thin", "thick", "mediumDashDot", "dashDotDot", "dashed"
"border_color": "00000000", //цвет границы (string); например, "00FF0000"
"font_bold_total_col": false, //жирность шрифта итогов для столбцов (bool)
"font_bold_total_row": false, //жирность шрифта итогов для строк (bool)
"merge_left_dims_cells": false, //объединение ячеек элементов левых размерностей с одинаковыми значениями
"data_number_format": "0.00000" //формат числовых значений (string)
}
}
}
*Для поля hierarchy_columns в массиве указывается одна или несколько групп, состоящих из порядковых номеров столбцов, начиная с 0, в порядке возрастания. Группы указываются в порядке возрастания значения первого столбца группы. Например: "[[0, 2, 4], [1, 3, 5]]" или "[[1, 5, 7]]" или "null".
Столбцы фактов в объединении не участвуют, их указывать не нужно.
При наличии в окне мультисферы верхних размерностей или при отключенном отображении итогов данная функция недоступна (экспорт по шаблону с настроенными группами в таких условиях завершается ошибкой).
Если столбцов левых размерностей в окне мультисферы меньше, чем столбцов, указанных в группах в значении поля hierarchy_columns, экспорт завершается ошибкой.
Версия скрипта
Номер версии скрипта состоит их трех чисел, разделенных точками, x.y.z:
- x увеличивается при внесении в скрипт изменений без сохранения обратной совместимости;
- y увеличивается при добавлении в скрипт нового функционала с сохранением обратной совместимости;
- z увеличивается при внесении в скрипт исправлений с сохранением обратной совместимости.
Текущую версию скрипта экспорта можно узнать, выполнив следующие команды:
cd /var/plmrepo/python-export-excel/src/ python3 -c "import main; print(main.version)"
В первой строке указывается путь до папки, в которой находится файл с кодом скрипта.