Иногда данные оказываются недоступными (несуществующими) для исходных элементов: либо потому, что компания не сообщила их, либо из-за того, что формуле требуются исходные данные предыдущего периода, которых нет (такое, например, неизбежно случается, если требуются данные для периода, предшествующего самому раннему из тех, для которых есть данные). Специалистам по финансовым данным необходимо решить, как их формулы должны обращаться с отсутствующими данными. Например, логика операций с отсутствующими данными должна однозначно определять результат следующих выражений: 10 + null; null + null; 10 div null; null div 10; if (null ne 10) then (null + 20) else (30); if (25 gt null) ..; if(null = null).., и т.д...
В оставшейся части статьи автор использует бизнес-логику вычисления формул, принятую в его организации. Бизнес-логика других организаций может отличаться, но техническая обработка должна быть такой же.
Практический опыт показывает, что формулы должны иметь определенный тип (см. ниже), и для каждого типа существует ограниченное количество допустимых выражений. Эти ограничения необходимы, если должна применяться логика обработки отсутствующих данных. Измененная схема -
schema_complex.xml (листинг 7) - имеет элементы следующих четырех типов:
знаменателя (denominator), причем
числитель и знаменатель рассматриваются как под-формулы, имеющие простой тип или тип ввода.
(test_left_hand test_operator test_right_hand). Под-формулы test_left_hand, test_right_hand, formula_if_true и formula_if_false имеют простой тип или тип ввода.
Каждый элемент вычисляемого типа также имеет атрибут
null_eval_rule, который указывает, как вычислять формулу или под-формулу простого типа в условном типе или типе "отношение".