Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Função Exists()

Olá a todos!

Preciso de um auxílio quanto a função "exists()" do QlikView. Tenho uma base de projetos (tipo histórico) com algumas informações como ID do projeto, código da fase, data de início da fase, data de fim da fase e resultado da ação. Nada mais é do que um log de um sistema de gestão de projetos do tipo workflow.

A base assemelha-se a isto:

ID do ProjetoCod_FaseInicio FaseFim FaseResultado
302131027/jun/0903/set/09Enviar
302172027/jun/0920/jul/09Não Aprovar
302602027/jun/0901/out/09Aprovar
302872027/jun/0930/jun/09Aprovar
302902027/jun/0902/jul/09Aprovar
302912027/jun/0902/jul/09Aprovar
302922027/jun/0902/jul/09Aprovar
302982027/jun/0907/jul/09Aprovar
303034027/jun/0930/jun/09Aprovar
303154027/jun/0913/jul/09Aprovar
303214027/jun/0902/jul/09Aprovar
303964028/jun/0928/jun/09Aprovar
303964028/jun/0902/jul/09Aprovar
303974028/jun/0902/jul/09Aprovar
303984028/jun/0902/jul/09Aprovar
3043210028/jun/0913/jul/09Devolver

No script, preciso criar uma tabela que traga apenas os ID de projeto que já tenham passado pela fase "700" e tenham em, algum momento, o resultado da ação igual a "Cancelar".

Para isso, escrevi o comando Load carregando apenas o campo ID do Projeto com a condição "Where Exists(Cod_Fase,'700'). Fiz essa primeira seleção antes de prosseguir com o campo Resultado. Mas, para minha surpresa, não houve efeito da função. A tabela resultante simplesmente ignorou a função e trouxe, inclusive, projetos que nem a fase "700" tinham.

Alguém poderia me auxiliar?

Obrigada,

Vanessa

1 Solution

Accepted Solutions
Not applicable
Author

Olá Vanessa,

Tente usar a condição " Where Match(trim(Cod_Fase),'700') ".

View solution in original post

6 Replies
branderbwcs
Contributor III
Contributor III

Oi Vanessa, tudo bem!

Fiz agora a pouco a carga dos seus dados e tenho a seguinte proposta. Como só interessa os registros cuja a fase seja igual a 700 é mais fácil inserir a condição igual mesmo. Veja o exemplo abaixo:

LOAD [ID do Projeto],

     Cod_Fase,

     [Inicio Fase],

     [Fim Fase],

     Resultado

FROM

(ooxml, embedded labels, table is Plan1)

WHERE Cod_Fase = 700;

No exemplo somente a fase 700 será exibida, fiz o teste alterando a sua planilha e modificando apenas um registro para a condição. Estou pesquisando como seria a utilização do EXISTS.

Not applicable
Author

Olá Vanessa,

Tente usar a condição " Where Match(trim(Cod_Fase),'700') ".

Not applicable
Author

Brander,

Primeiramente, obrigada pelo auxílio!

Infelizmente eu não posso "travar" o resultado da expressão nos registros com a fase igual a 700. Isto porque a próxima etapa exige que eu tenha a fase mais atual de cada projeto que muito provavelmente não será a fase 700, mas que poderá ser qualquer fase na qual o projeto foi cancelado.


Por isso é que eu preciso saber que projetos passaram pela fase 700, mas que não necessariamente estão nesta fase.

Obrigada,

Vanessa

Not applicable
Author

Permirio,

Sua sugestão funcionou! Agora preciso selecionar, dentre este universo de registros, aqueles que tiveram o resultado "Cancelar".

Parte II:

Além disso, precisarei saber em qual fase o projeto foi cancelado (a útima fase deste projeto na base) e a data de fim da respectiva fase.

Obrigada!

Vanessa

Not applicable
Author

Olá,

Que bom que funcionou...

Agora veja se é isso que você está precisando:

MapTabela:

Mapping

LOAD [ID do Projeto],

  1 as flg

FROM

(ooxml, embedded labels, table is Plan1)

where Match(trim(Cod_Fase),700);

Tabela:

LOAD [ID do Projeto],

     Cod_Fase,

     [Inicio Fase],

     [Fim Fase],

     Resultado

FROM

(ooxml, embedded labels, table is Plan1)

where ApplyMap('MapTabela',[ID do Projeto])=1 and Match(trim(Cod_Fase),XXX);   // XXX é o código correspondente a Cancelar

Not applicable
Author

Permirio,

Com alguns ajustes cheguei ao resultado que esperava. Fiz a primeira parte com as funções "Mapping Load" "ApplyMap" para identificar os projetos que passaram pela fase 700.

Como a identificação foi feita pelo ID do projeto, qualquer que fosse a fase registrada no histórico, o projeto era marcado com o identificador. Era justamente isso o que eu precisava, pois ele não omitia as demais fases dos projetos. Assim, bastou filtrar os projetos com o identificador do Applymap (que passaram pela fase 700) e, em seguida, aplicar um segundo filtro reduzindo o resultado da seleção anerior para somente aqueles que tinham como resultado "cancelar" (o que poderia ocorrer em qualquer fase e não só na 700). Essa segunda parte fiz diretamente no painel e não no script.

Tentei fazer da forma como você sugeriu, mas a consulta não trouxe o resultado acima.

Obrigada pelo auxílio!

Vanessa