report: # Объявленный тип отчета. В настоящий момент реализован только один тип - двумерный агрегированный (two_dimensional_aggregated) type: two_dimensional_aggregated # Заголовок отчета. Опциональное свойство, будет подставлено как имя отчета по умолчанию в форме сохранения отчета. title: "Входные данные {{feedbackname}} за период {{formatteddatestart}} - {{formatteddateend}}" # Описание формы фильтрации (может содержать перечисление объявленных фильтров с параметрами и конфиг полей под ключом fields одновременно) filterform: # Реализованные фильтры, докидывающие поля в форму filters: - code: feedback - code: period format: "%d.%m.%Y" # Конфиг полей, аналогичный конфигу формы в конструкторе форм. Поля будут добавлены в форму после полей фильтров fields: submit: type: 'submit' submitlabel: "Сформировать отчет" # Источники ключей по x и y xkey: # В настоящий момент поддерживается только один источник и реализован только один источник - сущность панели управления 3KL sources: # источник - сущность панели управления (otcontrolpanel_entity) # code обязательно должен быть указан - code: otcontrolpanel_entity # код сущности панели с обязательным префиксом e_ # сущность - подписки пользователей на курс entity: e_user_enrolments # конфиг полей, аналогичный конфигу полей для вкладки в панели fields: # поле связанной сущности - пользователь (ju) id - fieldcode: ju_id # Для поля может быть указан alias, чтобы было удобнее его использовать в конфиге keyfields reportalias: userid # поле связанной сущности - пользователь (ju) institution - fieldcode: ju_institution # Для поля может быть указан alias, чтобы было удобнее его использовать в конфиге keyfields reportalias: institution # поле связанной сущности - пользователь (ju) department - fieldcode: ju_department # Для поля может быть указан alias, чтобы было удобнее его использовать в конфиге keyfields reportalias: department # поле связанной сущности - курс (присоединана через сущность enrol) (je_jc) department - fieldcode: je_jc_id # Для поля может быть указан alias, чтобы было удобнее его использовать в конфиге keyfields reportalias: courseid # конфиг фильтров аналогичный конфигу фильтров для вкладки панели. Здесь можно и нужно использовать подстановки filterparams # но коды полей должны быть такими же, как в панели, алиасы тут не работают # здесь у нас фильтр по курсу, в который добавлена обратная связь (подстановка courseid докинута фильтром feedback, описанным в конфиге filterform) filters: - filtercode: field_equals field: je_jc.id value: {{courseid}} # Поля записи данных, которые станут ключами. В данном случае указаны алиасы. Эти поля ОБЯЗАТЕЛЬНО должны быть перечислены в конфиге полей keyfields: - institution - department ykey: # В настоящий момент поддерживается только один источник и реализован только один источник - сущность панели управления 3KL sources: # источник - сущность панели управления (otcontrolpanel_entity) # code обязательно должен быть указан - code: otcontrolpanel_entity # код сущности панели с обязательным префиксом e_ # сущность - вопрос обратной связи entity: e_feedback_item # конфиг полей, аналогичный конфигу полей для вкладки в панели fields: # поле - название вопроса - fieldcode: name # Для поля может быть указан alias, чтобы было удобнее его использовать в конфиге keyfields reportalias: question # поле - тип вопроса - fieldcode: typ # поле - id вопроса - fieldcode: id # поле - id обратной связи, в которую добавлен этот вопрос - fieldcode: feedback # конфиг фильтров аналогичный конфигу фильтров для вкладки панели. Здесь можно и нужно использовать подстановки filterparams # но коды полей должны быть такими же, как в панели, алиасы тут не работают # здесь у нас фильтр по id обратной связи, выбранной в форме фильтрации и типу вопроса - numeric (для других типов вопроса агрегация просто не имеет смысла) filters: - filtercode: property_equals property: feedback value: {{feedbackid}} - filtercode: property_equals property: typ value: 'numeric' # Поля записи данных, которые станут ключами. В данном случае указаны алиасы. Эти поля ОБЯЗАТЕЛЬНО должны быть перечислены в конфиге полей keyfields: - question # источники данных отчета # В настоящий момент поддерживается только один источник и реализован только один источник - сущность панели управления 3KL sources: sources: # источник - сущность панели управления (otcontrolpanel_entity) # code обязательно должен быть указан - code: otcontrolpanel_entity # код сущности панели с обязательным префиксом e_ # сущность - ответ на вопрос вопрос обратной связи entity: e_feedback_value # конфиг полей, аналогичный конфигу полей для вкладки в панели fields: # поле связанной сущности - пользователь, подключенной через таблицу feedback_completed (jfbc_ju) id - fieldcode: jfbc_ju_id # Для поля может быть указан alias, чтобы было удобнее его использовать в конфиге aggregation reportalias: userid # поле связанной сущности - пользователь, подключенной через таблицу feedback_completed (jfbc_ju) department - fieldcode: jfbc_ju_department # Для поля может быть указан alias, чтобы было удобнее его использовать в конфиге aggregation reportalias: department # поле связанной сущности - пользователь, подключенной через таблицу feedback_completed (jfbc_ju) institution - fieldcode: jfbc_ju_institution # Для поля может быть указан alias, чтобы было удобнее его использовать в конфиге aggregation reportalias: institution # поле связанной сущности анкеты - feedback_completed (jfbc) timemodified - fieldcode: jfbc_timemodified # Для поля может быть указан alias, чтобы было удобнее его использовать в конфиге aggregation reportalias: timemodified # собственно, значение ответа пользователя - fieldcode: printval # Для поля может быть указан alias, чтобы было удобнее его использовать в конфиге aggregation reportalias: value # поле связанной сущности - вопроса обратной связи jfbi - name - fieldcode: jfbi_name # Для поля может быть указан alias, чтобы было удобнее его использовать в конфиге aggregation reportalias: question # поле id обратной связи (для работы фильтра) - fieldcode: jfbi_jfb_id # поле, связывающее ответ на вопрос с анкетой (feedback_completed) - fieldcode: completed # конфиг фильтров аналогичный конфигу фильтров для вкладки панели. Здесь можно и нужно использовать подстановки filterparams # но коды полей должны быть такими же, как в панели, алиасы тут не работают # здесь у нас выборка ответов на вопросы обратной связи за период, выбранные в форме фильтрации, а также фильтр по типу вопроса - numeric filters: - filtercode: property_period field: jfbc.timemodified start: {{datestart}} end: {{dateend}} - filtercode: field_equals field: jfbi_jfb.id value: {{feedbackid}} - filtercode: field_equals property: jfbi.typ value: 'numeric' # как данные будут агрегироваться aggregation: # среднее значение ответов на вопрос, сгруппированное по полям пользователя (institution, department) и вопросу обратной связи # имя агрегации должно состоять из латинских букв и быть уникальным - name: groupaverage # поле для агрегации - значение ответа на вопрос (здесь используется alias) field: value grouping: - y - x # метод агрегации - вычисление среднего aggregator: average # среднее значение ответов на вопрос по всем пользователям, сгруппированное по вопросу обратной связи # имя агрегации должно состоять из латинских букв и быть уникальным - name: resultaverage # поле для агрегации - значение ответа на вопрос (здесь используется alias) field: value grouping: - y # метод агрегации - вычисление среднего aggregator: average # количество анкет - здесь подсчет уникальных id feedback_completed, сгруппированный по полям пользователя - name: answercount field: completed grouping: - x aggregator: countunique # количество анкет - здесь подсчет уникальных id feedback_completed по всем пользователям - name: resultanswercount field: completed aggregator: countunique # агрегации, которые должны сравниваться при сравнении отчетов # в данном случае сравниваем только среднее по группам compareableaggregation: - groupaverage # aгрегация результатов сравнения. Правила формирования конфига такие же, как и для агрегаций, # только вместо field - aggregation, которая обязательно должна быть в списке compareableaggregation compareresultaggregation: - name: groupaveragecompareresult aggregation: groupaverage grouping: - x aggregator: average - name: questionaveragecompareresult aggregation: groupaverage grouping: - y aggregator: average - name: resultaveragecompareresult aggregation: groupaverage aggregator: average # Шаблон документа отчета (для сравнения отдельный шаблон!) document: name: feedback_answer_report #page_orientation: #page_format: pages: - name: feedback_answer_report items: - type: table config: name: feedback_answer_report #textwrap: #htmlclass: columns: - width: 300 # первый столбец длинный - вопрос обратной связи # Столбцы по количеству групп {{#compositexkey}} - width: 50 textalign: center {{/compositexkey}} - width: 200 # общее среднее по всем группам textalign: center rows: - cells: - text: 'Входные данные "{{feedbackname}}" за период {{formatteddatestart}} - {{formatteddateend}}' # заголовок отчета textalign: center colspan: {{colcount}} #заголовок должен быть растянут на все ячейки weight: 500 - cells: - text: '' # первый столбец длинный - вопрос обратной связи # Дальше по количеству ключей x верхнего уровня] {{#xkey}} - colspan: {{childrencount1}} text: {{value}} weight: 500 {{/xkey}} - text: 'Среднее значение' # общее среднее по всем группам weight: 500 - cells: - text: '' # Дальше по количеству ключей x второго уровня] {{#xkey}} {{#children1}} - text: {{value}} weight: 500 {{/children1}} {{/xkey}} - text: "" weight: 500 # количество строк по клоличеству вопросов {{#ykey}} - cells: - text: '{{value}}' # первый столбец длинный - вопрос обратной связи {{#aggregation}} {{#groupaverage}} - text: {{.}} {{/groupaverage}} {{#resultaverage}} - text: {{.}} {{/resultaverage}} {{/aggregation}} {{/ykey}} # Завершающая итоговая строка - cells: - text: Количество анкет weight: 500 {{#aggregation}} {{#answercount}} - text: {{.}} weight: 500 {{/answercount}} {{#resultanswercount}} - text: {{.}} weight: 500 {{/resultanswercount}} {{/aggregation}} comparedocument: name: feedback_answer_report #page_orientation: #page_format: pages: - name: feedback_answer_report items: - type: table config: name: feedback_answer_report #textwrap: #htmlclass: columns: - width: 300 # первый столбец длинный - вопрос обратной связи # Столбцы по количеству групп {{#compositexkey}} - width: 50 textalign: center {{/compositexkey}} - width: 200 # Итоговый столбец textalign: center rows: - cells: - text: 'Динамика "{{#secondfilterparams}}{{feedbackname}}{{/secondfilterparams}}" за период {{#secondfilterparams}}{{formatteddatestart}} - {{formatteddateend}}{{/secondfilterparams}} по сравнению с периодом {{#firstfilterparams}}{{formatteddatestart}} - {{formatteddateend}}{{/firstfilterparams}}' # заголовок отчета textalign: center colspan: {{colcount}} #заголовок должен быть растянут на все ячейки weight: 500 - cells: - text: '' # первый столбец длинный - вопрос обратной связи # Дальше по количеству ключей x верхнего уровня] {{#xkey}} - colspan: {{childrencount1}} text: {{value}} weight: 500 {{/xkey}} - text: 'Общий итог' # общее среднее по всем группам weight: 500 - cells: - text: '' # Дальше по количеству ключей x второго уровня] {{#xkey}} {{#children1}} - text: {{value}} weight: 500 {{/children1}} {{/xkey}} - text: "" weight: 500 # количество строк по клоличеству вопросов {{#ykey}} - cells: # количество строк по клоличеству вопросов - text: '{{value}}' # первый столбец длинный - вопрос обратной связи {{#aggregation}} {{#groupaverage}} - text: {{.}} {{/groupaverage}} {{#questionaveragecompareresult}} - text: {{.}} {{/questionaveragecompareresult}} {{/aggregation}} {{/ykey}} - cells: - text: Среднее значение динамики weight: 500 {{#aggregation}} {{#groupaveragecompareresult}} - text: {{.}} {{/groupaveragecompareresult}} {{#resultaveragecompareresult}} - text: {{.}} {{/resultaveragecompareresult}} {{/aggregation}}