Ссылки на поля, меры и переменные
Выражение может содержать ссылки на поля, переменные и меры.
В большинстве случаев выражения — это агрегирования, являющиеся вычислениями, которые потенциально могут охватывать несколько записей. Это означает, что все ссылки на поля в выражении необходимо заключать в функцию агрегирования. Если функция агрегирования не используется, применяется функция Only().
Если имя меры используется в выражении, оно интерпретируется как псевдоним для меры. Это позволяет повторно использовать уже определенный элемент. Таким образом можно использовать метки основных мер и мер диаграмм. Однако мера диаграммы должна быть в той же диаграмме. Использовать метки мер в других диаграммах нельзя.
Меру можно определить рекурсивно. Другими словами, мера может содержать ссылку на саму себя. Однако это следует делать только в диаграммах с небольшим количеством строк. Если в диаграмме много строк, производительность снижается. Если будут сотни строк, то рекурсивное определение полностью прекратит работу.
Переменная может использоваться двумя различными способами — в прямой ссылке или в расширении со знаком доллара. При использовании прямой ссылки значение переменной будет применяться в вычислении. При использовании расширения со знаком доллара все расширение будет заменено на значение переменной, прежде чем будет выполнен синтаксический анализ выражения. Поэтому два различных метода могут возвратить различные результаты.
Интерпретация имен
Имя в выражении может быть ссылкой на поле, переменную, функцию или меру. В зависимости от ситуации имя интерпретируется по-разному.
Пример:
Строка XXX представляет поле, переменную, функцию или меру. XXX будет интерпретироваться как одна из них, в зависимости от способа создания выражения.
Выражение | XXX интерпретируется как |
---|---|
XXX | мера, переменная или поле |
$(XXX) | переменная |
Count(XXX) | поле или переменная |
XXX() | функция |
Не следует использовать одно и то же имя для поля и переменной (или меры). Однако в противном случае и при неоднозначности применяется следующий порядок очередности.
-
Если имя находится в функции агрегирования, у поля есть приоритет над переменной.
-
Если имя находится за рамками функции агрегирования, у метки меры есть приоритет над именем переменной, у которого в свою очередь есть приоритет над именем поля.
Правила для выражений
К выражениям диаграммы применяются следующие правила:
-
Если ссылка на поле не заключена в функцию агрегирования, функция Only() используется подсистемой.
-
Все выражения возвращают число и/или строку, исходя из применимости.
-
Логические функции и операторы возвращают значение 0 для элемента False и -1 для элемента True. Преобразования числа в строку и строки в число являются неявными.
-
Логические операторы и функции интерпретируют значение 0 как False, а все остальные как True.
-
Выражения, которые не могут быть правильно оценены, например, в результате неправильных параметров или функций, возвращают значение NULL.