Документація Reportizer
Contents Index

Функції, доступні в виразах звіту

Початок Попередній Наступний

Тут описуються оператори та функції движка виразів, що використовується у звітах.

Зауваження

Вирази та функції розраховуються "на льоту" перед їх виводом до цільового документу.
Назви функцій та операторів не залежні від регістру символів.
Параметри параметризованих функцій можуть бути як константами (літералами), так і виразами.
Рядкові (текстові) літерали повинні братися в одинарні лапки. Якщо літерал містить одинарні лапки всередині, кожен з них повинен бути продубльований.
Багаторядкові літерали не дозволяються. Якщо потрібно передати великий текст в якості параметра, розбийте його на невеликі окремі рядки та з'єднайте їх за допомогою оператора +.
Параметри параметризованих функцій жорстко типізовані.

Неправильно

Некоректний вираз dataset_field_val(1, Cust_Name)

Правильно

Коректний вираз dataset_field_val(1, 'Cust_Name')

Пояснення: В цьому прикладі назва поля бази даних має тип String (текст), тому має братися в одинарні лапки.

Вираз повинен повертати одне значення.

Неправильно

Некоректний вираз Назва книги: dataset_field_val(1, 'TITLE')

Правильно

Коректний вираз 'Назва книги: ' + dataset_field_val(1, 'TITLE')

Коректний вираз Назва книги: <<<dataset_field_val(1, 'TITLE')>>>

Пояснення: Щоб вираз дав одне значення, потрібно, щоб число операндів у виразі типу String (текст) повинно дорівнювати числу операторів плюс один. Іншими словами, потрібно, щоб у виразі типу String між кожними двома операндами був один оператор.

Іншим рішенням є виділення динамічних частин виразу. В контексті звітів динамічні частини починаються трійкою відкритих трикутних дужок (<<<) і закриваються трійкою закритих трикутних дужок (>>>).

Оператори

Арифметичні оператори

Працюють з числами та повертають числа (окрім оператора +, котрий може також використовуватися для конкатенації строчок).

+ Додавання чисел. Також може використовуватися для конкатенації строчокових операндів (як альтернатива функції concat).
- Віднімання чисел
* Множення чисел
/ Ділення чисел
^ Піднесення лівого операнда до степеня, вказаного правим операндом (як альтернатива функції power)
div Цілочисельне ділення. Це ділення, в якому дрібна частина відкидається.
mod Остача від ділення

Логічні оператори

Працюють з булевськими константами та виразами, які повертають булевські значення, і повертають булевські True або False.

not Логічне НІ. Повертає False, якщо його єдиний операнд може бути перетворений до True; інакше повертає True.
and Логічне І. Повертає True, якщо обидва операнди True; інакше повертає False.
or Логічне АБО. Повертає True, якщо хоча б один операнд True; якщо обидва операнди False, повертає False.
xor Виключне АБО. Повертає True, якщо один операнд True,а інший False; інакше повертає False.
= Рівність
<> Нерівність
> Більше ніж
>= Більше ніж або дорівнює
< Менше ніж
<= Менше ніж або дорівнює

Функції

Використовуйте функції для обрахунку значень. Кожна функція повертає одне значення. Параметрами функцій можуть бути як константи, так і вирази (виключаючи рекурсивні виклики функцій), якщо інше не зазначено нижче.

Функції, пов'язані з базою даних

Загальні

dataset_row_number(
  StepNo Integer, 
  GroupLevel Integer 
): Integer
dataset_group_number(
  StepNo Integer, 
  GroupLevel Integer 
): Integer
dataset_field_val(
  StepNo Integer,
  FieldName String | FieldIndex Integer
): <FieldType>
dataset_field_hex_val(
  StepNo Integer,
  FieldName String | FieldIndex Integer
): String
dataset_field_is_null(
  StepNo Integer,
  FieldName String | FieldIndex Integer
): Boolean
dataset_nvl(
  StepNo Integer,
  FieldName String | FieldIndex Integer,
  SubstVal <FieldType>
): <FieldType>
dataset_field_exists(
  StepNo Integer,
  FieldName String
): Boolean
dataset_param_val(
  StepNo Integer,
  ParamName String
): <ParamType>
query_res(
  StepNo Integer,
  SqlText String
): <FieldType>

Статистичні (агрегатні)

Ці функції виконують розрахунки на даних поточного набору даних. На відміну від інших функцій, статистичні функції акумулюють дані з кожного запису набору даних, тому вони вимагають більше ресурсів і їх використання (особливо в умовних функціях) може уповілнювати обробку великих наборів даних.

Наполегливо рекомендується використовувати ці функції лише всередині або після циклів по записам набору даних, інакше вони повернуть неадекватні значення.

Стандартні (подібні до агрегатних функцій SQL)

dataset_row_count(
  StepNo Integer,
  GroupLevel Integer
): Integer
dataset_min(
  StepNo Integer,
  GroupLevel Integer,
  FieldName String
): Numeric
dataset_max(
  StepNo Integer,
  GroupLevel Integer,
  FieldName String
): Numeric
dataset_sum(
  StepNo Integer,
  GroupLevel Integer,
  FieldName String
): Numeric
dataset_avg(
  StepNo Integer,
  GroupLevel Integer,
  FieldName String
): Numeric
dataset_count(
  StepNo Integer,
  GroupLevel Integer,
  FieldName String
): Integer

Умовні

Ці функції роблять те ж саме, що і стандартні статистичні функції, але з однієї суттєвою відмінністю: вони перевіряють умову Condition для кожного запису, і розраховують своє значення лише якщо ця умова повертає True. Параметри цих функцій повинні бути або константами, або детерміністичними виразами (тобто повертати один і той же результат кожного разу при передачі одних і тих же параметрів). Параметр Condition може використовувати не детерміністичні вирази, але повинен бути записаний як рядковий літерал або як детерміністичний рядковий вираз.

У звіті functions.dtt можна побачити багато прикладів використання умовних статистичних функцій.

dataset_row_count_ex(
  StepNo Integer,
  GroupLevel Integer,
  Condition String
): Integer
dataset_min_ex(
  StepNo Integer,
  GroupLevel Integer,
  FieldName String,
  Condition String
): Numeric
dataset_max_ex(
  StepNo Integer,
  GroupLevel Integer,
  FieldName String,
  Condition String
): Numeric
dataset_sum_ex(
  StepNo Integer,
  GroupLevel Integer,
  FieldName String,
  Condition String
): Numeric
dataset_avg_ex(
  StepNo Integer,
  GroupLevel Integer,
  FieldName String,
  Condition String
): Numeric
dataset_count_ex(
  StepNo Integer,
  GroupLevel Integer,
  FieldName String,
  Condition String
): Integer
Не рекомендується робити вкладені виклики статистичних функцій (тобто коли умова Condition містить виклик статистичної функції), оскільки в такому випадку програма не може гарантувати коректний результат. Якщо ж все-таки робите таке, то уникайте циклічних посилань в цих функціях, оскільки це може призвести до неочікуваних результатів виразів. Наприклад, використання поля FieldName всередині Condition є циклічним посиланням і не повинно застосовуватися.

Приклади коректних вживань умовних статистичних функцій:

dataset_sum_ex(1, 0, 'PaymentSum', 'dataset_field_val(1, ''CustNo'') > 1000')

(цей вираз буде підсумовувати значення поля PaymentSum, якщо значення поля CustNo більше від 1000)

dataset_count_ex(1, 0, 'CustNo', 'dataset_field_val(1, ''Paid'')')

(цей вираз поверне кількість значень поля CustNo, де значення булевського поля Paid дорівнює True)

dataset_sum_ex(1, 0, 'BillSum', 'dataset_sum_ex(1, 0, ''OldBillSum'', ''dataset_field_val(1, ''''CustNo'''') > 0'') > 0')

(цей вираз поверне суму значень поля BillSum, де умовна сума поля OldBillSum більша від 0)

Приклади некоректних вживань умовних статистичних функцій:

dataset_count_ex(1, 0, 'CustNo', 'yes')

(помилка: небулевська константа не може використовуватися як умова)

dataset_sum_ex(1, 0, 'BillSum', 'dataset_sum_ex(1, 0, ''OldBillSum'', ''dataset_sum_ex(1, 0, ''''BillSum'''', True) > 0'') > 0')

(помилка: циклічне посилання на поле BillSum)

Математичні функції

abs(
  x Numeric
): Numeric
frac(
  x Numeric
): Numeric
int(
  x Numeric
): Numeric
round(
  x Numeric
): Integer
sqrt(
  x Numeric
): Numeric
power(
  x Numeric,
  y Numeric
): Numeric
exp(
  x Numeric
): Numeric
ln(
  x Numeric
): Numeric
cos(
  x Numeric
): Numeric
sin(
  x Numeric
): Numeric
tan(
  x Numeric
): Numeric
atan(
  x Numeric
): Numeric

Функції дати і часу

date: DateTime
time: DateTime
add_date_time(
  x DateTime,
  y Numeric
): DateTime
compare_date_time(
  Date1 DateTime,
  Date2 DateTime
): Integer
date_time_diff(
  Date1 DateTime,
  Date2 DateTime
): Numeric
format_date_time(
  x DateTime,
  Mask String
): String

Функції, пов'язані з файлами

file_created(
  FileName String
): DateTime
file_last_modified(
  FileName String
): DateTime
file_last_accessed(
  FileName String
): DateTime
file_size(
  FileName String
): Numeric
file_version(
  FileName String
): String
extract_file_ext(
  FileName String
): String
extract_file_name(
  FileName String
): String
extract_file_dir(
  FileName String
): String
extract_file_path(
  FileName String
): String
extract_file_text(
  FileName String
): String
file_exists(
  FileName String
): Boolean
dir_exists(
  DirectoryName String
): Boolean

Інші функції

capitalize(
  Str String,
): String
char(
  x Integer
): String
concat(
  Str1 String,
  Str2 String
): String
format_float(
  x Numeric,
  Mask String
): String
iif(
  Condition Boolean,
  x <AnyType>,
  y <AnyType>
): <AnyType>
length(
  Str String,
): Integer
lower(
  Str String,
): String
lpad(
  Str String,
  Count Numeric,
  Char String
): String
number_to_words(
  x Numeric,
  Language String,
  Options String
): String
ordinal_number(
  x Integer,
  Language String,
  Case String,
  Gender String
): String
parse(
  x <AnyType>
): <AnyType>
pos(
  SubStr String,
  Str String
): Integer
pretty(
  Str String,
): String
quantitative_numeral(
  x Integer,
  Language String,
  Case String,
  Gender String
): String
rgb(
  Red Integer,
  Green Integer,
  Blue Integer
): String
rpad(
  Str String,
  Count Numeric,
  Char String
): String
string_replace(
  Str String,
  SubStr String,
  NewSubStr String
): String
substr(
  Str String,
  Index Integer,
  Count Integer
): String
substr_count(
  Str String,
  SubStr String
): Integer
to_number(
  <AnyType> String
): Numeric
to_string(
  <AnyType> String
): String
trim(
  Str String,
): String
trim_left(
  Str String,
): String
trim_right(
  Str String,
): String
upper(
  Str String,
): String

Функції, специфічні для звітів

report_author: String
report_changed_by: String
report_database_name: String
report_dataset_name: String
report_description: String
report_file_name: String
page_left_margin: Integer
page_right_margin: Integer
page_top_margin: Integer
page_bottom_margin: Integer
page_number: Integer
page_count: Integer
page_height: Integer
page_width: Integer
internal_property(
  PropertyName String
): String

Застарілі функції для звітів

GROUPRECORDNUMBER Замість цієї функції використовуйте dataset_row_number
NUMTOWORDS Замість цієї функції використовуйте number_to_words
DATASETNAME Замість цієї функції використовуйте report_dataset_name
DATABASENAME Замість цієї функції використовуйте report_database_name
FILENAME Замість цієї функції використовуйте report_file_name
PAGEHEIGHT Замість цієї функції використовуйте page_height
PAGEWIDTH Замість цієї функції використовуйте page_width
LEFTMARGIN Замість цієї функції використовуйте page_left_margin
RIGHTMARGIN Замість цієї функції використовуйте page_right_margin
TOPMARGIN Замість цієї функції використовуйте page_top_margin
BOTTOMMARGIN Замість цієї функції використовуйте page_bottom_margin
PAGENUMBER Замість цієї функції використовуйте page_number
RECORDNUMBER Замість цієї функції використовуйте dataset_row_number
PAGERECORDNUMBER Замість цієї функції використовуйте dataset_row_number
GROUP1RECORDNUMBER Замість цієї функції використовуйте dataset_row_number
GROUP2RECORDNUMBER Замість цієї функції використовуйте dataset_row_number
GROUP3RECORDNUMBER Замість цієї функції використовуйте dataset_row_number
RECORDCOUNT Замість цієї функції використовуйте record_count
REPORTDESCRIPTION Замість цієї функції використовуйте report_description
REPORTAUTHOR Замість цієї функції використовуйте report_author
PAGECOUNT Замість цієї функції використовуйте page_count
MIN Замість цієї функції використовуйте dataset_min
MAX Замість цієї функції використовуйте dataset_max
SUM Замість цієї функції використовуйте dataset_sum
AVERAGE Замість цієї функції використовуйте dataset_avg
COUNT Замість цієї функції використовуйте dataset_count
MINEX Замість цієї функції використовуйте dataset_min_ex
MAXEX Замість цієї функції використовуйте dataset_max_ex
SUMEX Замість цієї функції використовуйте dataset_sum_ex
AVERAGEEX Замість цієї функції використовуйте dataset_avg_ex
COUNTEX Замість цієї функції використовуйте dataset_count_ex
FILESIZE Замість цієї функції використовуйте file_size
FIELDVAL Замість цієї функції використовуйте dataset_field_val
PARAMVAL Замість цієї функції використовуйте dataset_param_val
ISNULL Замість цієї функції використовуйте dataset_is_null
FIELDEXISTS Замість цієї функції використовуйте dataset_field_exists
NVL Замість цієї функції використовуйте dataset_nvl
QUERYRES Замість цієї функції використовуйте query_res
STR Замість цієї функції використовуйте to_string
TRIMLEFT Замість цієї функції використовуйте trim_left
TRIMRIGHT Замість цієї функції використовуйте trim_right
ORDINALNUMBER Замість цієї функції використовуйте ordinal_number
QUANTITATIVENUMERAL Замість цієї функції використовуйте quantitative_numeral
FILECREATED Замість цієї функції використовуйте file_created
FILELASTMODIFIED Замість цієї функції використовуйте file_last_modified
FILELASTACCESSED Замість цієї функції використовуйте file_last_accessed
EXTRACTFILENAME Замість цієї функції використовуйте extract_file_name
EXTRACTFILEEXT Замість цієї функції використовуйте extract_file_ext
EXTRACTFILEDIR Замість цієї функції використовуйте extract_file_dir
EXTRACTFILEPATH Замість цієї функції використовуйте extract_file_path
REPLACE Замість цієї функції використовуйте string_replace
ADDDATETIME Замість цієї функції використовуйте add_date_time
COMPAREDATETIME Замість цієї функції використовуйте compare_date_time
DATETIMEDIFF Замість цієї функції використовуйте date_time_diff
FORMATDATETIME Замість цієї функції використовуйте format_date_time
SUBSTRCOUNT Замість цієї функції використовуйте substr_count