Guia Rápido de Funções Comuns

De Qknow
Ir para: navegação, pesquisa


Introdução

No comando Load podem ser utilizadas funções de diversos tipos com intuito de tratar os dados carregados, formatar valores (por exemplo, datas), unir textos (strings), encontrar valores, agrupar, desagrupar, entre outras necessidades. As funções descritas nesta seção referem-se as operações realizadas durante a execução do script e nem sempre se aplicam as instruções SQL, estas últimas variando de acordo com o fabricante, já que SQLs são interpretados pelo driver do banco de dados em uso. Ainda assim, se for necessário é possível utilizar as funções originárias de cada plataforma de banco na própria instrução Select, sob pena de perda de portabilidade do script QlikView para outros SGBDs.


Funções de Script

LEN

Len ( string )

Retorna o comprimento (tamanho) da string passada no argumento, em forma de um número inteiro. O parâmetro pode ser uma variável texto, string fixa ou campo textual na operação Load. Útil para determinar o tamanho do conteúdo do campo em número de caracteres preenchidos. Pode ser combinado com outras funções para realizar operações mais complexas. Por exemplo, a seguir a função LEN é combinada para que o novo campo da tabela2 possa descartar os últimos dígitos após o último ponto.

Tabela1:
LOAD * INLINE [
CAMPO
30.20205.26.122.0807.4101.0023.2010.1
30.20205.26.122.0807.4101.0023.2010.12
];

Tabela2:
LOAD LEFT(CAMPO, LEN(CAMPO) - 1 - LEN(SubField(CAMPO, '.', 9))) Resident Tabela1;


LEFT ou RIGHT

Left ( string , num )
Right( string , num )

Retorna parte da string a partir da esquerda ou direita, respectivamente. O parâmetro num especifica a quantidade de caracteres a ser retornada. Ambos os parâmetros são obrigatórios. No exemplo a seguir as funções são usadas para obter uma lista dos dias e dos anos, respectivamente, a partir da tabela INLINE.

Tabela3:
LOAD * INLINE [
AnyDate
01/01/2000
20/08/2000
09/04/2001
27/11/2001
17/07/2002
06/03/2003
24/10/2003
12/06/2004
30/01/2005
19/09/2005
09/05/2006
27/12/2006
16/08/2007
04/04/2008
22/11/2008
12/07/2009];

Tabela4: 
LOAD LEFT(AnyDate, 2) As AnyDay, RIGHT(AnyDate, 4) As AnyYear Resident Tabela3;


MID

Mid ( string , num1, [num2] )
Retorna parte da string a partir da posição num1 até a posição num2. Se num2 for omitido, retornará até o final do texto (da esquerda para a direita). No exemplo a seguir, utilizando a carga de dados acima, apresenta como retornar apenas o conteúdo a partir da 4ª posição até 2 digitos a frente (duas posições). Ou seja, monta uma lista dos meses.

Tabela5: 
LOAD MID(AnyDate, 4, 2) As AnyMonth Resident Tabela3;


INDEX

Index ( string_original , string_to_search)

LeftMidRightIndex1.PNG

Retorna um valor numérico representando a posição de um caractere dentro do texto passado como argumento no primeiro parâmetro. Considere que haja um campo que contém uma parte de caracteres indesejados que devem ser retirados durante o procedimento de leitura do script para que não sejam exibidos nos dashboards. No exemplo a seguir, os números de contrato são precedidos por uma codificação entre parênteses indesejada e, por isso, deve ser removido. Combinando algumas das funções acima, é possível informar ao QlikView® para retirar a parte indesejada do conteúdo do campo ContractNumber deixando apenas o conteúdo mais representativo ao dashboard. O uso da função Right indica que um certo número de caracteres deve ser obtido da direita para a esquerda do campo Contrato. Porém, como o conteúdo tem o tamanho variado, é necessário indicar o ponto em que a função Right irá recortar os dados. Por isso, a função Len é utilizada retornando o número total de caracteres que existem na linha que estiver sendo processada e, por último, a função Index indica o ponto em que o símbolo de fecha parêntese é encontrado.

SampleData:
Load * Inline [
Seq, ContractNumber
1, (21) 493-33
2, (58) 438-1
3, (31) 223-345
4, (93) 2884-2
5, (34) 12-231];

Contratos:
Load Right(ContractNumber, Len(ContractNumber) - Index(ContractNumber, ')')) As NewContractNum Resident SampleData;
LeftMidRightIndex2.PNG

O resultado do processo da primeira linha da tabela é algo como:

Index((21) 493-33, ')') retorna o valor 4, indicando a posição onde o caractere fecha parênteses foi encontrado.
Len((21) 493-33) retorna o tamanho total do conteúdo da linha, neste caso 11 caracteres incluindo espaços existentes.
Right((21) 493-33, 11-4) retorna os caracteres da direita para a esquerda a partir do resultado da operação 11 menos 4. Ou seja, são retornados os 7 caracteres da direita.


IF

If ( condição, then, [else] )
Realiza uma verificação da condição, executando a parte correspondente ao then se verdadeiro e a parte correspondente ao else se falso. A parte else é opcional e se não especificada poderá gerar valores nulos caso a condição seja negativa. O exemplo em questão testa se o dia atual recuperado pela função Today() é sábado e, se afirmativo, retorna o texto Saturday. Qualquer outro dia da semana é considerado um dia de trabalho retornando o texto Workday.

IfSample:
LOAD IF(WeekDay(Today()) = 'sáb', 'Saturday', 'WorkDay') As WorkDayFlag AutoGenerate(1);


NUM

Num ( expressão [ , código de formato])
A função formata a expressão ou campo numericamente, de acordo com o caractere apresentado como código de formato. Cada # representa uma posição numérica que será preenchida com o número correspondente a posição informada na formatação. Caso não esteja preenchida a referida posição, nenhum valor será apresentado. Também é possível utilizar-se de zeros (0) onde na posição será preenchido com o número correspondente ou será preenchido com zero caso não haja disponibilidade de valor.

FormatSample:
LOAD * INLINE [
DataSample
1234.12
431324.11
1231.12];

DataFormated:
LOAD Num(DataSample, '#.##0') As NumFormat, Num(DataSample, '#.##0,00') As SalesValue Resident FormatSample;


MONEY

MoneyFunction1.PNG

Money ( expressão [ , código de formato], [separador decimal], [separador de milhar] )
Formata uma expressão numericamente com a formatação de moeda definida pelo sistema operacional ou com o formato definido no parâmetro opcional código de formato. Quando o parâmetro código de formato não é fornecido o padrão definido na variável de script MoneyFormat ou o padrão do sistema operacional é utilizado.

SalesTable:
LOAD * INLINE [
Price
1234.12
31324.11
1231.12];

LOAD Money(Price), Money(Price, '$#,##0', '.', ',')  Resident SalesTable;


ROWNUM

RowNo()
Útil para numerar os registros obtidos de uma determinada fonte de dados ou tabela em memória do QlikView. Quando obtendo registros de tabelas já previamente carregadas no Qlik, a numeração seguirá sequencial mesmo se uma cláusula Where for utilizada.

RowNumber:
LOAD RowNo(), Now() AutoGenerate (4)


HASH128

hash128( expression [ , expression] )

Hash128 2.PNG

Cria uma string a partir dos dados fornecidos nos parâmetros expression, sendo que ao menos uma coluna de dados ou valor deve ser informado no primeiro parâmetro. Múltiplas colunas podem ser utilizadas como entrada de dados para a função Hash128, bastando separá-las com vírgula. Este recurso é especialmente útil para mascaras dados em ambientes com dados sensíveis, tal como CPF e RG. Porém, esta função resulta no mesmo hash de saída quando o valor do registro está presente em múltiplas tabelas, por isso pode ser utilizada para descaracterizar os dados de múltiplas fontes mantendo a integridade associativa quando estes campos são chaves de ligação. No exemplo a seguir o campo CompanyName será usado como entrada para a função Hash128 resultando em uma string que descaracteriza os dados. Se esta função for utilizada em outras tabelas que façam ligação com o campo CompanyName o conteúdo do hash será o mesmo.

TmpSales:
LOAD * INLINE [
CompanyName, TotalSales
Belgium Black Jeans, 1234
Big Foot Shoes, 1254
Bobby Socks, 3123
Boleros, 4123
Bond Ltd, 3433
Boombastic, 7343
Casual Clothing, 1211
Champes, 1542]; 

TotalSales:
LOAD Hash128(CompanyName) As Hashfield1, CompanyName, TotalSales Resident TmpSales;


PURGECHAR

PurgeChar ( string_1, string_2 )

PurgeChar1.PNG

Remove caracteres indesejáveis informados no parâmetro string_2 a partir do campo (ou texto) fornecido na string_1. Facilita a limpeza de dados que precisam ser retirados de conteúdos nem sempre limpos. Não importa em qual posição do campo os caracteres informados na string_2 estejam, nem tão pouco quantas vezes aparecem. Qualquer conteúdo informado neste parâmetro será removido do campo informado na string_1. Por exemplo, digamos que o conteúdo abaixo precisa obter do campo BadData apenas os valores numéricos sem os caracteres identificados como idensejáveis.

DirtyData:
LOAD * INLINE [
BadData
R$ 102#12#
R$ 2@1941
R$ 1131%1
R$ 4*2119 ];

GoodData:
LOAD PurgeChar(BadData, 'R$#@%*') Resident DirtyData;


KEEPCHAR

Keepchar ( string1, string2 )
Retorna os caracteres em string1 que estejam contidos na string2. Especialmente útil para obter os caracteres válidos de um determinado conteúdo. Por exemplo, assuma que no conteúdo a seguir deseja-se obter apenas os valores numéricos de cada linha. Ou seja, todo o conteúdo não numérico deve ser removido e apenas o conteúdo com números entre 0 e 9 deve ser deixado no campo.

LOAD * INLINE [
BadData1
'AAAYH_07#3F4K!%<V73VR'
'AZ,T`UCQ[62N2N[J*OG?D'
'BDT;9W@Q&6E)<,ZH%6&0#'
'D Q\++23$H%W_-I?OPG#'
'J)3HH23T!0->U?4MA:[W#0'
'L[4A_4CI=+B@7AM1_<>!'
'MB<O0R!$J$NBQ!D"UJ.?U('
'P\"54),,=$63XNFT1U7F7.'];

KeepCharTable:
LOAD KeepChar(BadData1, '0123456789') Resident BadDataSample;


TRIM

Trim( string )
A função TRIM remove espaços em branco no início e final da string informada como parâmetro. É importante lembrar que todo caractere possui uma referência na tabela ASC, de maneira que a função TRIM atua na remoção de caracteres em branco a partir do código 32 que representa o espaço inserido pela barra de espaços do teclado. No entanto, há ainda caracteres em branco gerados por códigos ASC diferentes, como 160, chamados de hard blanks. Estes caracteres não são removidos via instrução TRIM e por isso podem causar uma impressão de mal funcionamento da função. Para estes e outros caracteres brancos da tabela ASC não correspondentes ao código 32 deve-se utilizar a função REPLACE ou PURGUECHAR.

LOAD * INLINE [
FieldWithBlanks
'Franco Galati   '
'  Geilson Júnior'
'  Nilton Barcelos  '
' Fernando Tonial     ' ];

LOAD Trim(FieldWithBlanks) As FieldNoBlanks Resident BlankData;

A função TRIM possui as variações LTRIM e RTRIM que removem os espaços do início e término da string informada como parâmetro, respectivamente. Estas funções atuam sempre sobre o código ASC 32 e não estão habilitadas a remover caracteres brancos conhecidos como hard blanks, incluindo ASC 160 ou 09, este último tabulação.


REPLACE

Replace( string_original, string_de , string_para)
Substitui todas as ocorrências da string_de informada no parãmetro pelo conteúdo da string_para no campo ou texto informado no parâmetro string_original. A função não é recursiva e trabalhará da esquerda para a direita. Pode ser útil para remover caracteres brancos conhecidos como hard blanks que não podem ser retirados pela função TRIM. Neste caso será necessário utilizar também a função CHR. No exemplo a seguir deseja-se substituir o texto 'BR' encontrado no campo PhoneNumber pelo código de ligação do País (55).

ReplaceFunction:
LOAD * INLINE [
PhoneNumber
BR 61 - 9328-2313
BR 62 - 9184-1131 ];

LOAD REPLACE(PhoneNumber, 'BR', 55) Resident ReplaceFunction;


UPPER e LOWER

LowerUpperCap1.PNG

lower( textexpression )
upper( textexpression )

Converte todos os caracteres do parâmetro textexpression para minúsculo ou mauúsculo, respectivamente as funções lower e upper. Quando dois conteúdos estão escritos de maneira diferente em um determinado campo, o QlikView o interpretará como textos diferentes. Portanto, Joao e JOAO são conteúdos diferentes que podem ser interpretados como iguais se a grafia estiver equivalente. Para isso, basta utilizar uma das funções mencionadas. Há ainda a função Capitalize que converte o texto para todas as letras em minúsculas com exceção da primeira, que ficará em maiúscula em cada palavra encontrada no texto.

UpperLowerTable:
LOAD * INLINE [
Country
Brazil
braZil
BRAzil
BrAzIl];

LOAD Upper(Country), Lower(Country), Capitalize(Country) Resident UpperLowerTable;


Assuntos Relacionados



Índice de Artigos | Página Principal