Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
taisregina
Contributor II
Contributor II

Existe limite comando IF no subfield ?

estou criando esta tabela abaixo mas não esta mais aceitando o comando IF ?

Labels (3)
1 Solution

Accepted Solutions
mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo, o From é simplesmente aonde vai buscar a tabela com os dados;

Exemplo:

Tab_teste:

Load

         Campo1

    ,    Campo2

    ,    ApplyMap('Map_Base1', SubField(BASE, '-', 1), ApplyMap('Map_Base2', SubField(BASE, '-', 2), 'Não definido')) As 'PRODUTO'

FROM (qvd); //endereço da tabela

Dependendo de como está o seu modelo, pode varia o método;

Outros exemplos:

Tab1:

LOAD * from 'c:\userfiles\data2.txt' (ansi, txt, delimiter is '\t', embedded labels);


Tab2:

SELECT A,B,C,D from transtable;


Tab3:

LOAD A,B,month(C),A*B+D as E resident Tab2;

Percebi que você editou a sua pergunta e removeu a sua amostra que tinha o nome dos campos (Recordo que tinha o campo BASE).

Mas a proposta inicial da pergunta antes da sua edição era de resolver a questão dos 100 IFs... E a proposta para o seu caso foi de utilizar Mapping.

Abraço.

Observe:

Load ‒ QlikView

Mapping ‒ QlikView

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti

View solution in original post

12 Replies
Clever_Anjos
Employee
Employee

Sim, existe.

Você não pode ter mais que 100 níveis de aninhamento de If´s

A solução de contorno para você é

Mapa:

mapping load * inline [

     De, Para

1025, RTB

1020, DTH

// cadastre todas as transformacoes

];

LOAD

     ApplyMap('Mapa',SubField(BASE, '-', 2)) as PRODUTO

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo,

Recomendo por conta de performance, manutenção e boa prática utilizar Mapping;

Exemplo:

Map_Base1:

Mapping Load *

Inine [

     De, Para

     23602,'RTB',

     30202,'RTB'

];

Map_Base2:

Mapping Load *

Inine [

     De, Para

     1020, 'DTH',

     1021, 'DG',

     1023, 'LPDADOS',

     1024, 'ADSL',

     1013, 'ESSE',

     1014, 'ESSE',

     1015, 'DTX'

];

Tab_Exemplo:

Load

     ApplyMap('Map_Base1', SubField(BASE, '-', 1), ApplyMap('Map_Base2', SubField(BASE, '-', 2), 'Não definido')) As 'PRODUTO',

     ...

From ...;

Abraço.

Fonte: Mapping ‒ QlikView

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
eduardo_dimperio
Specialist II
Specialist II

Concordo com o Cleaver e esse é sem duvida a maior quantidades de ifs que eu ja vi.

Não é possivel criar uma tabela de DePara e trocar tudo pra uma linha de comando?

mario_sergio_ti
Partner - Specialist
Partner - Specialist

cleveranjos, você posta muito rápido... Rsrs

Quando enviei a resposta, o seu apareceu logo encima rsrs

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
Clever_Anjos
Employee
Employee

Mas a sua resposta é bem melhor elaborada, colega!

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Rsrs, valeu cleveranjos

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo;

Opa, eu tinha escrito rápido, é Inline mesmo;

Referente ao erro, é porque você deve ajustar o meu exemplo,

Remova o "..." depois da linha do "ApplyMap" e substitua para os seus campos e a linha do "From ..." também deve ser substituído para a origem correta do seu modelo;

Eu apenas fiz um exemplo de como poderá utilizar o Mapping para substituir os Ifs...

Complete o exemplo da estrutura Map_Base1 e Map_Base2 com as demais condições, repare que deixei separado Map_Base1 para os campos pertinentes aos SubField(BASE, '-', 1) e Map_Base2 para os SubField(BASE, '-', 2) dos seus Ifs()...

Tab_Exemplo:

Load

    ApplyMap('Map_Base1', SubField(BASE, '-', 1), ApplyMap('Map_Base2', SubField(BASE, '-', 2), 'Não definido')) As 'PRODUTO',

    ...  <<<< Erro do script*

From ...;  <<<< Erro do script*


*deixei como exemplo


Abraço amigo.

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
taisregina
Contributor II
Contributor II
Author

Desculpa mas vc poderia me dar um exemplo com o FROM junto ? Como seria a linha de comando completa ?

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Amigo, o From é simplesmente aonde vai buscar a tabela com os dados;

Exemplo:

Tab_teste:

Load

         Campo1

    ,    Campo2

    ,    ApplyMap('Map_Base1', SubField(BASE, '-', 1), ApplyMap('Map_Base2', SubField(BASE, '-', 2), 'Não definido')) As 'PRODUTO'

FROM (qvd); //endereço da tabela

Dependendo de como está o seu modelo, pode varia o método;

Outros exemplos:

Tab1:

LOAD * from 'c:\userfiles\data2.txt' (ansi, txt, delimiter is '\t', embedded labels);


Tab2:

SELECT A,B,C,D from transtable;


Tab3:

LOAD A,B,month(C),A*B+D as E resident Tab2;

Percebi que você editou a sua pergunta e removeu a sua amostra que tinha o nome dos campos (Recordo que tinha o campo BASE).

Mas a proposta inicial da pergunta antes da sua edição era de resolver a questão dos 100 IFs... E a proposta para o seu caso foi de utilizar Mapping.

Abraço.

Observe:

Load ‒ QlikView

Mapping ‒ QlikView

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti