Выражения привязки в приложениях шаблона On-demand

Привязки данных в приложении шаблона указывают, какие данные из соответствующего приложения выбора следует использовать для создания запросов в ходе загрузки данных в приложение On-demand.

Базовая форма выражений привязки, $(od_FIELDNAME), может быть изменена для уточнения выбора и обеспечения правильной загрузки данных приложением шаблона.

Предупреждение: Приложения шаблона, первоначально созданные с помощью расширения Qlik Sense для On-demand App Generation, следует изменить, чтобы использовать подход, показанный ниже, для привязки большого количества выборок из поля.

Привязка большого количества выборок из поля

Qlik associative engine ограничивает количество значений, которые можно объединить в одном операторе LET. Чтобы обойти это ограничение, можно использовать оператор INLINE LOAD для эффективного создания списка значений, разделенных запятыми.

Сначала необходимо создать подпрограмму скрипта для обработки таблицы INLINE.

SUB BuildValueList(VarName, TableName, ColName, QuoteChrNum) IF $(QuoteChrNum) = 0 THEN LET LOADEXPR = 'Concat($(ColName),' & chr(39) & ',' & chr(39) & ') AS CombinedData'; ELSE LET CHREXPR = ' chr(' & '$(QuoteChrNum)' & ') '; LET LOADEXPR = 'Concat( $(CHREXPR) & $(ColName) & $(CHREXPR)' & ',' & chr(39) & ',' & chr(39) & ') AS CombinedData'; ENDIF _TempTable:   LOAD $(LOADEXPR) Resident $(TableName); Let vNoOfRows = NoOfRows('_TempTable'); IF $(vNoOfRows)> 0 THEN LET $(VarName) = Peek('CombinedData',0,'_TempTable'); ENDIF drop table _TempTable; drop table '$(TableName)'; END SUB;
Примечание: Для вызова подпрограммы BuildValueList необходимо использовать определенные значения параметра QuoteChrNum. Если поле, обрабатываемое подпрограммой, является числовым, параметру присваивается значение 0. Для символьных данных параметру присваивается значение 39.

Затем привязка записывается в таблицу INLINE, чтобы создать структуру для значений полей, которые будут загружаться независимо от количества значений.

SET ORIGIN=''; OdagBinding: LOAD * INLINE [ VAL $(odso_ORIGIN){"quote": "", "delimiter": ""} ]; SET ORIGIN_COLNAME='ORIGIN'; CALL BuildValueList('ORIGIN', 'OdagBinding', 'VAL', 39);

Выражение $(od_ORIGIN) {"quote": "", "delimiter": "") будет заменено списком значений поля ORIGIN из приложения выбора, разделенных разрывами строки. Если поле ORIGIN содержит три значения BOS, JFK, ORD, расширенная таблица INLINE будет выглядеть следующим образом:

SET ORIGIN=''; OdagBinding: LOAD * INLINE [ VAL BOS JFK ORD ]; SET ORIGIN_COLNAME='ORIGIN'; CALL BuildValueList('ORIGIN', 'OdagBinding', 'VAL', 39);

Значение переменной ORIGIN после вызова BuildValueList будет следующим:

'BOS','JFK’,'JFK'

Привязка дополнительных и исключенных значений

Иногда требуется создать условие фильтрации в запросе для скрипта приложения шаблона On-demand с помощью полей, которые не доступны для выбора непосредственно в приложении выбора. Например, записи о продажах могут использовать код региона вида REGION_CODE, в то время как в приложении выбора для выполнения выборок по региону используется более распознаваемое поле REGION_NAME. В модели приложения выбора может использоваться отдельная таблица для связи REGION_CODE с REGION_NAME, благодаря чему пользователи могут выбирать значения из REGION_NAME в целях управления состоянием выборки.

При выборе значений REGION_NAME эти значения помещаются в выбранное состояние; значения REGION_CODE находятся только в состоянии дополнительных — они отображаются белым, а не зеленым цветом. Кроме того, если из набора фильтров листа приложения выбора исключен элемент REGION_CODE, выражение привязки $(od_REGION_CODE) в скрипте приложения On-demand не удастся расширить до списка выбранных регионов, так как значения REGION_CODE никогда не перейдут в состояние выбранных — они не будут отображаться зеленым.

Решить эту проблему можно с помощью дополнительного синтаксиса, который позволяет более точно определять, в каких состояниях выборок должны находиться значения, использующиеся при каждой привязке данных. Префикс od_ в части имени поля в каждом выражении привязки On-demand может включать сочетание букв, которые определяют, будут ли в процессе привязки использоваться значения из состояний выбранных и дополнительных. Приведем примеры допустимых сочетаний, включающих элемент REGION_CODE:

Допустимые сочетания, включающие элемент REGION_CODE
Образец Расширение
$(ods_REGION_CODE) Выбранные (зеленые) значения REGION_CODE
$(odo_REGION_CODE) Дополнительные (белые) значения REGION_CODE
$(odso_REGION_CODE) Выбранные или дополнительные значения REGION_CODE
$(od_REGION_CODE) То же, что и в случае с $(ods_REGION_CODE), только выбранные (зеленые) значения REGION_CODE

В случае примера приложения On-demand для данных продаж следующее выражение привязки данных обеспечивает включение либо выбранных, либо дополнительных значений REGION_CODE в привязку REGION_CODE:

$(odso_REGION_CODE)

Привязка числовых значений

Если данные, которые необходимо привязать к приложению On-demand, состоят из числовых, а не строковых значений, полезно предотвратить заключение числовых полей в кавычки. Например, если записи о продажах включают числовой столбец DAY_OF_WEEK, при этом необходимо, чтобы пользователь приложения выбора мог выбирать произвольные сочетания элементов DAY_OF_WEEK, следует изменить запрос агрегирования, использующийся для загрузки приложения выбора, включив элемент DAY_OF_WEEK как в список SELECT, так и в список GROUP BY. Если при выборе значений DAY_OF_WEEK эти значения заключаются в кавычки, при этом база данных не поддерживает автоматическое преобразование типа из строкового в числовой, может возникнуть ошибка выполнения запроса.

Решить эту проблему можно с помощью суффикса синтаксиса, который можно добавить в конце части выражения привязки FIELDNAME в целях принудительного использования привязкой поля числовых, а не строковых значений приложения выбора. Суффикс имеет вид _n, как в следующем предложении WHERE:

WHERE DAY_OF_WEEK IN ( $(od_DAY_OF_WEEK_n) );

При этом происходит расширение до следующего вида:

WHERE DAY_OF_WEEK IN ( 1,2 );

Требование определенного количества выбираемых значений

В некоторых ситуациях необходимо настроить запрос приложения On-demand таким образом, чтобы он содержал определенное количество или диапазон значений для определенного поля. Например, если запрос приложения On-demand содержит предложение BETWEEN, которое служит для получения данных о всех продажах за период от даты начала до даты окончания, выражение привязки для поля YEARQUARTER может включать синтаксис суффикса [2], который требует выбора строго двух значений для элемента YEARQUARTER, как показано далее:

$(od_YEARQUARTER)[2]

Точка навигации приложения On-demand в приложении выбора будет оставаться выключенной до тех пор, пока не будет выбрано строго два значения элемента YEARQUARTER. Будет отображено сообщение о том, что необходимо выбрать строго два значения YEARQUARTER.

Ограничения количества выбираемых значений создают обязательную связь между приложением выбора и приложением On-demand. В этом заключается отличие от выражений привязки, в которых ограничения количества не используются. Например, если скрипт приложения шаблона содержит выражение привязки без ограничения количества, как показано далее:

$(od_MYFIELD)

при этом не требуется, чтобы приложение выбора содержало поле с именем MYFIELD или какие-либо выбранные значения данного поля, если оно существует. Если приложение выбора не содержит поле с именем MYFIELD или если пользователь не делает никаких выборок из него, точку навигации приложения On-demand можно включить в ходе выполнения других выборок, чтобы соблюсти условие значения ограничения количества записей.

С другой стороны, если выражение привязки имеет вид:

$(od_MYFIELD)[1+]

теперь для приложения выбора действует два требования:

  • Приложение выбора должно содержать поле с именем MYFIELD.
  • Пользователь должен выбрать по крайней мере одно значение для элемента MYFIELD.

Данный тип выражения привязки следует использовать с осторожностью, так как он определяет, какие приложения выбора можно использовать с приложением шаблона. Не следует применять ограничение количества для привязок приложения шаблона, за исключением случаев, когда пользователь применяет требование количества выбираемых значений ко всем приложениям выбора, связанным с приложением шаблона.

Для выполнения привязки служба приложения On-demand использует метод замены строк, который не учитывает комментарии в скрипте. Это означает, что выражения привязки не следует использовать в комментариях, за исключением случаев, когда в комментарии необходимо включить список привязанных значений после создания приложения.

Возможны и другие ограничения количества. В следующей таблице представлены разные сочетания ограничений количества выбираемых значений.

Разные сочетания ограничений количества выбираемых значений
Образец ограничения Требование к выбору
$(od_YEARQUARTER)[2] Следует выбрать строго 2 значения YEARQUARTER.
$(od_YEARQUARTER)[2-4] Следует выбрать от 2 до 4 значений YEARQUARTER.
$(od_YEARQUARTER)[2+] Следует выбрать не менее 2 значений YEARQUARTER.
$(od_YEARQUARTER)[2-] Следует выбрать не более 2 значений YEARQUARTER.
Примечание: В ходе создания приложения выполняется проверка соответствия всем установленным для приложения шаблона ограничениям количества. В случае несоблюдения ограничения количества запрос создания приложения будет отклонен и отобразится сообщение об ошибке.

Изменение символов кавычек и разделителей

Если список значений из поля, выбранного в приложении выбора On-demand, вставить в скрипт приложения шаблона, значения будут заключены в одинарные кавычки и разделены запятыми. Это символы по умолчанию для кавычек и разделителей. Эти значения можно изменить в синтаксисе, прилагаемом к оператору привязки для каждого поля. Пример.

$(odso_ORIGIN){"quote": "|", "delimiter": ";"}

Затем эти новые значения используются для составления списка значений привязки, взятых из приложения выбора. Если, к примеру, выбранные значения представляют собой первые три месяца года, список будет иметь следующий вид:

|January|;|February|;|March|

Значения по умолчанию для кавычек и разделителей используются в большинстве стандартных баз данных SQL. Но они могут не работать для некоторых баз данных SQL, а также для многих источников динамических данных, таких как NoSQL и REST. Для таких источников необходимо добавить данное выражение привязки, чтобы изменить символы кавычек и разделителей.

Привязка данных, содержащих кавычки

Если данные в любом поле, используемом для содержимого, содержат одинарные или двойные кавычки, необходимо изменить поведение по умолчанию ВСТРОЕННОГО оператора LOAD, чтобы кавычки не были интерпретированы как разделители значений. Измените разделитель, используя формат, характерный для символа, который никогда не встречается в значениях связываемого поля, как показано на следующем примере с использованием символа '|':

OdagBinding:

LOAD * INLINE [

VAL

$(odso_ORIGIN){"quote": "", "delimiter": ""}

]

(ansi, txt, delimiter is '|', embedded labels);