Формулы отчета
В отчете можно задавать формулы для показателей: реальных и виртуальных, но нельзя размещать в атрибутах. Описание формул содержится внутри описания показателя. Однако, за счет того, что в формуле указывается идентификатор показателя, и этот идентификатор можно указать любым показателем отчета, то и формулы появятся у указанного показателя, а не у того, внутри которого описаны формулы.
Формулы рассчитываются в момент построения отчета после загрузки данных и ПОСЛЕ агрегации данных в хранимых показателях, но для виртуальных показателей агрегация выполняется после расчета формул в них.
Содержание
Особенности размещения в хранимых показателях
Формулы рассчитываются после загрузки и агрегации данных. При этом, если формулы размещаются в хранимых показателях, они могут перетереть значение, которое было в ячейке (в т. ч. null). Но такие ячейки не будут помечены как измененные, и при сохранении отчета сразу после открытия эти изменения не сохранятся в показателе. Это сделано из соображений очевидности для пользователя: было бы странным при открытии отчета показывать пользователю, что в нем уже есть измененные данные. Поэтому отчет нужно вводить в эксплуатацию либо с пустыми данными, либо чтобы эти данные соответствовали настроенному расчету.
Формула пересчитываются автоматически при изменении ячеек, от которых она зависит. В этом случае, если значение ячеек формулы изменилось, они помечаются, как измененные.
Основные свойства формулы
Все свойства формулы можно посмотреть в документации.
- Id - идентификатор формулы;
- Name - описание формулы, в дальнейшем будет отображаться в интерфейсе при просмотре описания формулы ячейки;
- IndicatorId - идентификатор показателя, в котором размещать формулу;
- LeftHeaderPlacementKind - на каких типах элементов размещать формулу: на любых / только на виртуальных (в т. ч. группировочных) / только на настоящих;
- Dictionaries - описание фильтров на справочники строк и столбцов, в которых необходимо размещать формулу. Фильтры на справочники столбцов должны быть обязательно определены. Если же не указан фильтр на справочник строк, формула будет размещаться для каждого элемента этого справочника;
- Expression - текстовое выражение формулы, операнды размещаются в квадратных скобках в виде [<идентификатор операнда>];
- Operands - коллекция операндов;
Операнды формулы
- AttributeFormulaOperandDto - операнд, значение которого берется из атрибута;
- IndicatorFormulaOperandDto - операнд, значение которого берется из показателя;
- ParameterFormulaOperandDto - операнд, значение которого берется из параметра отчета;
- TokenAttributeFormulaOperandDto - операнд, значение которого берется из токена;
- PredefinedPivotOperandDto - операнд, значение которого предопределено в момент открытия отчета;
AttributeFormulaOperandDto
1 "formulas": [
2 {
3 "indicatorId": -10,
4 "dictionaries": [],
5 "calculateByDiffs": false,
6 "leftHeaderPlacementKind": "AnyElement",
7 "expression": "if(Length(Coalesce([0], '')) > 10, Length([0]), null())",
8 "operands": [
9 {
10 "dictionaryId": 39323,
11 "attribute": {
12 "id": 22,
13 "discriminator": "OwnAttributeDefinitionDto"
14 },
15 "id": 0,
16 "name": "Атрибут-строка",
17 "discriminator": "AttributeFormulaOperandDto"
18 }
19 ],
20 "id": 1,
21 "name": "Формула 01: если длина значения атрибута-строки больше 10, то выведем длину, иначе - null",
22 "discriminator": "IndicatorFormulaDto"
23 }
24 ]