Настроить сворачивание данных по справочникам

Материал из 3v-wiki
Перейти к навигации Перейти к поиску

Описание

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

Пример

Для простоты и наглядности рассмотрим двумерный показатель с единственным вещественным фактом:

Исходный показатель.png

Предположим, мы хотим установить среднее значение для каждого из погодных условий за весь период наблюдений. В таком случае нам следует свернуть показатель по измерению "Календарь" с типом сворачивания (агрегации) "Среднее значение". При этом из двух измерений справочника останется только одно - "Погодные условия", а значения факта будут усреднены вдоль измерения "Календарь":

Свёрнутый показатель.png

Включение сворачивания

Следует понимать, что сворачивание измерений показателя - функциональность отчёта, и, соответственно, она может быть добавлена только в отчёт, содержащий показатель.

Через конструктор отчётов

Настройка сворачивания через конструктор отчётов (1).png
  • На вкладке "Столбцы" найти показатель, который требуется свернуть, и выбрать справочник, задающий сворачиваемое измерение.
  • Для выбранного справочника на вкладке "Свойства" поставить флаг "Сворачивать данные по справочнику".
  • При необходимости - повторить с остальными сворачиваемыми измерениями.
Настройка сворачивания через конструктор отчётов (2).png
  • Выбрать сворачиваемый показатель и на вкладке "Свойства" выбрать тип агрегации для значений фактов.


Через модель отчёта

Чтобы свернуть показатель, необходимо изменить тип соответствующего ему элемента шапки отчёта с IndicatorOptionsDto на ViewIndicatorOptionsDto, указать тип агрегации при сворачивании и перечислить справочники, задающие измерения, по которым происходит сворачивание, в dictionaryFilterOptions:

Без сворачивания
 1 {
 2   ...
 3   "topHeader": {
 4     "topHeaderItems": [
 5       ...
 6       {
 7         "name": "Погода",
 8         "indicatorId": 139041,
 9         "isVisible": true,
10         "dictionaries": [
11           {
12             "isVisible": null,
13             "displayAttributeId": null,
14             "elementCustomNames": [],
15             "groupingMethod": "Default",
16             "virtualElements": [],
17             "dictionaryId": 139040,
18             "filter": {
19               "value": null,
20               "skipIfValueNull": false,
21               "attributeId": null,
22               "attribute": {
23                 "discriminator": "OwnAttributeDefinitionDto",
24                 "id": 1
25               },
26               "conditionType": "AllElements",
27               "discriminator": "ValueConditionalDictionaryFilterDto",
28               "inversion": false
29             },
30             "hierarchyId": null,
31             "limit": null
32           }
33         ],
34         "formulas": [],
35         "aggregations": [],
36         "useFullLeftHeaderHierarchy": false,
37         "recalcAggregationsOnAutoFilter": false,
38         "transformAggregationType": "None",
39         "discriminator": "IndicatorOptionsDto"
40       }
41     ],
42 	...
43   },
44   ...
45 }


Со сворачиванием
 1 {
 2   ...
 3   "topHeader": {
 4     "topHeaderItems": [
 5       ...
 6       {
 7         "sourceIndicatorId": 139041,
 8         "aggregationType": "Avg",
 9         "dictionaryFilterOptions": [
10           {
11             "dictionaryId": 139040,
12             "filter": {
13               "value": null,
14               "skipIfValueNull": false,
15               "attributeId": null,
16               "attribute": {
17                 "discriminator": "OwnAttributeDefinitionDto",
18                 "id": 1
19               },
20               "conditionType": "AllElements",
21               "discriminator": "ValueConditionalDictionaryFilterDto",
22               "inversion": false
23             },
24             "hierarchyId": null,
25             "limit": null
26           }
27         ],
28         "name": null,
29         "indicatorId": -36380,
30         "isVisible": true,
31         "dictionaries": [],
32         "formulas": [],
33         "aggregations": [],
34         "useFullLeftHeaderHierarchy": false,
35         "recalcAggregationsOnAutoFilter": false,
36         "transformAggregationType": "None",
37         "discriminator": "ViewIndicatorOptionsDto"
38       }
39     ],
40     ...
41   },
42   ...
43 }