Общая информация

В 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 – на компьютер пользователя.
  • 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)"

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

  • Нет меток