Vinculando expressões em aplicativos modelo On-Demand

As vinculações de dados em um aplicativo modelo especificam quais dados de um aplicativo de seleção correspondente são usados para formular as consultas emitidas durante o carregamento de dados no aplicativo on-demand.

A forma básica de expressões de vinculação--$(od_FIELDNAME)--pode ser modificada para refinar seleções e garantir que o aplicativo modelo carregue os dados corretamente.

Aviso: Aplicativos modelo criados originalmente usando a extensão do Qlik Sense para On-demand App Generation devem ser alterados para usar a abordagem ilustrada abaixo para vincular um grande número de seleções de um campo.

Vinculando um grande número de seleções de um campo

O Qlik associative engine limita o número de valores que podem ser concatenados em um único comando LET. Para evitar a limitação, um comando INLINE LOAD pode ser usado para construir eficientemente uma lista de valores separados por vírgulas.

Em primeiro lugar, você deve criar uma sub-rotina de script para processar uma tabela 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;
Nota: Chamadas para a sub-rotina BuildValueList devem usar valores específicos para o parâmetro QuoteChrNum. Quando o campo processado pela sub-rotina é numérico, o parâmetro deve ser definido como 0. Para dados de caractere, o parâmetro deve ser definido como 39.

A vinculação, então, deve ser gravada usando uma tabela INLINE para criar uma estrutura para os valores de campo que serão carregados, independentemente do número de valores.

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

A expressão $(od_ORIGIN) {"quote": "", "delimiter": "") será substituída por uma lista de valores de campo ORIGIN do aplicativo de seleção, separados por quebras de linha. Se o campo ORIGIN contiver os três valores BOS, JFK, ORD, a tabela INLINE expandida será semelhante ao seguinte:

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

O valor da variável ORIGIN que segue a chamada para BuildValueList será:

'BOS','JFK’,'JFK'

Associando valores opcionais e excluídos

As vezes, é necessário criar uma condição de filtro na consulta do script do aplicativo modelo On-demand usando campos que não são diretamente selecionáveis no aplicativo de seleção. Por exemplo, registros de vendas podem usar um código de região como REGION_CODE enquanto o aplicativo de seleção usa um campo mais reconhecível REGION_NAME para fazer seleções de região. O aplicativo de seleção pode ter um modelo que usa uma tabela separada para associar REGION_CODE com REGION_NAME, de forma que os usuários possam selecionar valores de REGION_NAME para controlar o estado de seleção.

Embora a seleção de valores de REGION_NAME faça com que eles sejam colocados no estado selecionado, os valores de REGION_CODE estão apenas no estado opcional, ou seja, brancos em vez de verdes. Além disso, se o design das pastas do aplicativo de seleção excluir REGION_CODE de seu conjunto de painéis de filtro, não haverá maneira de fazer com que a expressão de associação $(od_REGION_CODE) no script do aplicativo On-demand se expanda para a lista de regiões selecionadas, pois os valores de REGION_CODE nunca serão realmente selecionados, ou seja, nunca ficarão verdes.

Para lidar com essa situação, há uma sintaxe adicional para controlar com mais precisão quais valores de estado de seleção são usados em cada associação de dados. O prefixo od_ na parte do nome do campo em cada expressão de associação On-demand pode incluir uma combinação de letras para indicar se os valores a serem utilizados na associação são aqueles obtidos do estado selecionado e do estado opcional. As combinações válidas, usando o exemplo REGION_CODE, são:

Combinações válidas, usando REGION_CODE
Padrão Expansão
$(ods_REGION_CODE) Valores selecionados (verdes) de REGION_CODE
$(odo_REGION_CODE) Valores opcionais (brancos) de REGION_CODE
$(odso_REGION_CODE) Valores selecionados ou opcionais de REGION_CODE
$(od_REGION_CODE) Mesmo que $(ods_REGION_CODE), apenas valores selecionados (verdes) de REGION_CODE

No caso do exemplo de aplicativo On-demand para dados de vendas, a seguinte expressão de associação de dados garante que os valores selecionados ou opcionais de REGION_CODE sejam incluídos na associação de REGION_CODE:

$(odso_REGION_CODE)

Associando valores numéricos

Quando os dados a serem vinculados ao aplicativo On-demand consistem em números em vez de cadeias de caracteres, é útil desativar o comportamento de delimitação entre aspas nos campos numéricos. Por exemplo, se os registros de vendas incluírem uma coluna numérica DAY_OF_WEEK, e você quiser que o usuário do aplicativo de seleção escolha combinações arbitrárias de DAY_OF_WEEK, será possível aumentar a consulta de agregação utilizada para carregar o aplicativo de seleção de forma a incluir DAY_OF_WEEK tanto na lista SELECT quanto na lista GROUP BY. Se aspas forem colocadas ao redor de valores DAY_OF_WEEK quando esses forem selecionados, um erro de consulta de tempo de execução poderá ocorrer caso o banco de dados não ofereça suporte à conversão automática de tipos de cadeia de caractere em tipos numéricos.

Para lidar com essa situação, há um sufixo de sintaxe que pode ser adicionado ao final da parte FIELDNAME da expressão de associação, para forçar a associação de campos a usar os valores numéricos do aplicativo de seleção em vez de valores de cadeia de caracteres. O sufixo é _n como na seguinte cláusula WHERE:

WHERE DAY_OF_WEEK IN ( $(od_DAY_OF_WEEK_n) );

Isso seria expandido para:

WHERE DAY_OF_WEEK IN ( 1,2 );

Exigindo um certo número de seleções

Em algumas situações, pode ser necessário exigir que a consulta do aplicativo On-demand contenha um número específico ou um intervalo de valores para um campo específico. Por exemplo, se a consulta do aplicativo On-demand contiver uma cláusula BETWEEN para obter todas as vendas entre uma data de início e uma data de término, a expressão de associação para o campo YEARQUARTER poderá ter uma sintaxe de sufixo de [2] que exigirá exatamente que dois valores sejam selecionados para YEARQUARTER, como em:

$(od_YEARQUARTER)[2]

O ponto de navegação do aplicativo on-demand no aplicativo de seleção permanecerá desativado enquanto não houver exatamente dois valores de YEARQUARTER selecionados. Uma mensagem será exibida para indicar que exatamente dois valores de YEARQUARTER devem ser selecionados.

Restrições de quantidade de seleção criam uma vinculação de pré-requisito entre o aplicativo de seleção e o aplicativo on-demand. Isso é diferente de expressões de associação que não usam restrições de quantidade. Por exemplo, quando o script do aplicativo modelo contém uma expressão de associação sem uma restrição de quantidade, como em:

$(od_MYFIELD)[1+]

não há exigência de que o aplicativo de seleção contenha um campo denominado MYFIELD ou de que existam valores selecionados desse campo se ele existir. Se o aplicativo de seleção não contiver um campo denominado MYFIELD ou se o usuário simplesmente deixar de fazer seleções a partir dele, o ponto de navegação do aplicativo on-demand ainda poderá ser habilitado quando outras seleções forem feitas para atender à condição de valor de limite de registros.

Por outro lado, se a expressão de associação for:

$(od_MYFIELD)[1+]

haverá agora duas exigências impostas ao aplicativo de seleção:

  • O aplicativo de seleção deve conter um campo denominado MYFIELD.
  • O usuário deve selecionar pelo menos um valor para MYFIELD.

Esse tipo de expressão de associação deve ser usado com cautela, pois limita quais aplicativos de seleção podem ser usados com o aplicativo modelo. Você não deve usar essa restrição de quantidade nas associações de um aplicativo modelo, a menos que esteja certo de que deseja impor esse requisito de quantidade de seleção em todos os aplicativos de seleção que se liguem a esse aplicativo modelo.

Para executar o processo de vinculação de dados, o serviço de aplicativo On-demand usa uma abordagem de substituição de string que não é sensível aos comentários no script. Isso significa que você não deve usar expressões de vinculação em comentários, a menos que queira que esses comentários contenham a lista de valores vinculados após a geração do aplicativo.

Outras restrições de quantidade são possíveis. A tabela a seguir resume as diferentes combinações de restrições de quantidade de seleção.

Diferentes combinações de restrições de quantidade de seleção
Padrão de restrição Exigência de seleção
$(od_YEARQUARTER)[2] Exatamente 2 valores de YEARQUARTER devem ser selecionados.
$(od_YEARQUARTER)[2-4] Entre 2 e 4 valores de YEARQUARTER devem ser selecionados.
$(od_YEARQUARTER)[2+] Pelo menos 2 valores de YEARQUARTER devem ser selecionados.
$(od_YEARQUARTER)[2-] No máximo 2 valores de YEARQUARTER podem ser selecionados.
Nota: A verificação para determinar se todas as restrições de quantidade no aplicativo modelo foram atendidas é realizada durante o processo de geração do aplicativo. Se uma restrição de quantidade for violada, a solicitação para gerar o aplicativo será rejeitada e uma mensagem de erro será exibida.

Alterando os caracteres de aspa e delimitadores de valores

Quando uma lista de valores de um campo selecionado em um aplicativo de seleção On-demand é inserida no script de um aplicativo de modelo, os valores são delimitados por aspas simples e separados por vírgulas. Esses são os caracteres padrão para aspas e delimitadores. Esses valores podem ser alterados na sintaxe anexada ao comando de vinculação de cada campo. Por exemplo:

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

Esses novos valores são, então, usados ao formular a lista de valores de vinculação extraídos do aplicativo de seleção. Se, por exemplo, os valores selecionados fossem os três primeiros meses do ano, a lista seria construída como:

|Janeiro|;|Fevereiro|;|Março|

Os valores padrão para os caracteres de aspa e delimitador funcionam na maioria dos bancos de dados SQL padrão. Mas eles podem não funcionar para alguns bancos de dados SQL e não funcionam para muitas fontes de dados dinâmicas, como NoSQL e REST. Para essas fontes, você precisa anexar essa expressão de vinculação para alterar os caracteres de aspa e delimitador.

Vincular dados contendo aspas

Se os dados em qualquer um dos campos usados para variáveis de ligação contiverem aspas simples ou duplas, será necessário alterar o comportamento padrão da instrução de LOAD INLINE para não interpretar aspas como delimitadores de valores. Altere o delimitador usando a especificação de formato para um caractere que nunca ocorre nos valores do campo sendo vinculado, como é mostrado com o caractere '|' no seguinte exemplo:

OdagBinding:

LOAD * INLINE [

VAL

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

]

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