Рекомендации по использованию пользовательских макросов
При создании или использовании пользовательского макроса помните о следующих рекомендациях:
*
*
Если источник данных сконфигурирован с использованием свойства ENABLE_SELECT_SORT_BY = TRUE, вы должны написать пользовательский макрос на основе чистого SQL с условием ORDER BY, чтобы произвести сортировку возвращенных записей на основе полей ключа аудитории для уровня аудитории, с которым вы работаете. В противном случае, если порядок сортировки не будет таким, как ожидается, будет сгенерирована ошибка, если пользовательский макрос используется в производном поле в процессе Снимок.
*
*
Если пользовательский макрос использует временные таблицы в основном алгоритме, временная таблица будет принудительно помещена в базу данных, чтобы обработка алгоритма не завершилась с ошибкой.
Однако, если пользовательский макрос используется на высшем уровне SELECT, не будет никакой хронологии для Campaign, чтобы принудительно поместить временную таблицу в базу данных, и обработка алгоритма завершится с ошибкой.
Таким образом, при создании пользовательского макроса, в котором используется чистый SQL, вам может потребоваться создать две версии одного и того же пользовательского макроса: одну, в которой используются маркеры временной таблицы, и одну, в которой они не используются.
Пользовательский макрос без маркеров временной таблицы может использоваться на высшем уровне дерева (например, в первом операторе SELECT). Пользовательский макрос без маркеров временной таблицы может использоваться в любом другом месте дерева, где может оказаться временная таблица, которой можно воспользоваться.
*
Например, если вы используете пользовательский макрос на основе чистого SQL, который возвращает значение и (например, в процессе Снимок) вы выводите пользовательский макрос и другое поле из таблицы, на которой основан пользовательский макрос, Campaign произведет самообъединение для этой таблицы. Если таблица не нормализована, вы получите декартово произведение (то есть, число показанных записей будет больше, чем вы ожидаете).
*
Во время выполнения пользовательский макрос разрешается путем поиска его определения в системной таблице UA_CustomMacros (где хранятся определения), а затем используется/выполняется.
*
Campaign поддерживает хранимые запросы от прежних выпусков. Однако в ссылках на неуникальные сохраненные запросы должен использоваться прежний синтаксис:
storedquery(<query name>)
*
При разрешении пользовательских переменных в пользовательские макросы Campaign использует текущее значение пользовательской переменной при проверке синтаксиса. Если текущее значение осталось пустым, Campaign сгенерирует ошибку.
*
*
Если вы собираетесь использовать пользовательский макрос в нескольких разных базах данных, вы можете использовать выражение IBM® вместо чистого SQL, так как чистый SQL может быть связан с какой-то определенной базой данных.
*
*
Campaign рассматривает запятую как разделитель параметров. Если вы используете запятые как буквальные символы в параметре, заключите текст в фигурные скобки ({}), как в следующем примере:
TestCM( {STRING_CONCAT(UserVar.Test1, UserVar.Test2) } )
*
Campaign поддерживает простую замену параметров в пользовательских макросах с использованием чистого кода SQL. Например, если вы зададите блок процесса Выбрать на поточной диаграмме, содержащей следующий запрос:
exec dbms_stats.gather_table_stats(tabname=> <temptable>,ownname=> 'autodcc')
Campaign успешно подставит фактическую временную таблицу вместо маркера <temptable>. Учтите, что требуется заключить имя таблицы в одинарные кавычки.
В приведенных ниже таблицах показано, как Campaign обрабатывает пользовательские макросы в запросах и производных полях.
Пользовательские макросы в запросах и производных полях (процессы Выбрать, Сегмент и Аудитория)
Если значение не используется таким образом, Campaign обработает ненулевое значение как TRUE для выбора ID, а нулевое значение или строку - как FALSE.
IBM® Выражение
В запросе на основе чистого SQL (процессы Выбрать, Сегмент и Аудитория)
IBM® Выражение