Макро подстановка
Обычно используется для того, чтобы выполнить 1 операцию внути опреатора SET или вызвать функции с определенными параметрами.
Иногда полезно комбинировать макроподстановки
Примеры вызова
$(eRows('mytable'));
IF $(eTableExists('mytablename')) THEN
...
ELSE
...
END IF
LET preciding_load = IF ($(eTableExists('myTable')), 'OUTER JOIN ([$('myTable')])', 'NOCONCATENATE [$('myTable')]:');
$(preciding_load)
LOAD
...
RESIDENT ...;
Полезные функции с макроподстановкой
eRows - вывести в лог скрипта количество строк в таблице
Код для вставки в скрипт:
SET eRows = CALL ls_t_rowcount($1);
SUB ls_t_rowcount(ls_tname)
LET ls_r_qty = NOOFROWS('$(ls_tname)');
TRACE '$(ls_tname): rows count = $(ls_r_qty)';
SET ls_r_qty;
SET ls_tname;
END SUB;
Пример использования:
$(eRows('mytable'));
в логе выполнения скрипта будет написано количество строк в таблице mytable:
mytable: rows count = 555
eFileExists - проверка существования файла
Код для вставки в скрипт:
SET eFileExists = 'LEN(FILESIZE($1))>0';
Пример использования:
IF $(eFileExists('lib://qvd/layer/mydata.qvd')) THEN
...
END IF
В случае, если файл существует, то начнётся выполнение скрипта внутри условия IF
eDefaultIfEmpty - поставить значение по умолчанию, если поле пустое
Код для вставки в скрипт:
SET eDefaultIfEmpty = 'IF (LEN($1), $1, $2)';
Пример использования:
LOAD
ID
, $(eDefaultIfEmpty([MyValue],'0')) as MyValue
FROM ....
При чтении значений из источника, значение в поле MyValue будет проверятся на заполненность, и если длина строки будет равна нулю, то будет поставлено значение 0.
В принципе, макроподстановка работает аналогично функции COALESCE
eDropTableIfExists - удалить таблицу, если она существует
Код для вставки в скрипт:
SET eDropTableIfExists = WHEN LEN(TABLENUMBER('$1')) DROP TABLE [$1];
Пример использования:
$(eDropTableIfExists('mytable'));
Если таблица с указанным именем существует, то она будет удалена из модели
eTableHeader - подстановка CONCATENATE или NOCONCATENATE
Код для вставки в скрипт:
SET eTableHeader = IF(TABLENUMBER('$1')>=0, 'CONCATENATE([$1])', 'NOCONCATENATE [$1]:');
Пример использования:
LET vTableName = $(eTableHeader(myTable));
$(vTableName)
LOAD
...
FROM/RESIDENT ...
в переменную vTableName будет записано значение:
CONCATENATE([myTable])если таблица с таким имененм уже существует- или
NOCONCATENATE [myTable]если таблица с таким именем не существует