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

Calcular diferença entre linhas - QlikSense

Boa noite pessoal!

Estou com o seguinte problema ... preciso calcular a diferença de datas entre as linhas de uma tabela que tenho (estou com uma conexão ODBC de um banco SQLite) só que sempre tenho o mesmo resultado, campos em branco.

O exemplo esta abaixo:

print_qlik.png

Estou usando a função ABOVE() diretamente na tabela, mas ele não retorna nenhum valor. Os pontos desse calculo são de que essa coluna STATUS nem sempre vem em ordem e ele não retorna nenhum valor quando eu tento ordenar corretamente.

Não sei se a melhor alternativa é usar um script, ou até mesmo uma coluna calculada para este caso,

Agradeceria muito se pudessem me ajudar.

Muito obrigado.

Bruno Abdante

Labels (2)
1 Solution

Accepted Solutions
pablolabbe
Luminary Alumni
Luminary Alumni

Olá Bruno,

  A função ABOVE somente pode ser utilizada com uma função de agregação e deve ser incluída como medida. Você incluiu como Dimensão no gráfico.

  Como agregação eu usaria a função only(), que deve retornar o proprio valor supondo que não existe dado repetido com o mesmo valor para um processo.

  If ( only(ID_PROCESSO) =above (only(ID_PROCESSO)), Interval(above(only(PROCESSO.DATA_HOJE))-only(PROCESSO.DATA_HOJE)), null()) 


  O if na função é para calcular a diferença somente nos registros que são do processo, e ele vai colocar nulo no intervalo do primeiro status de cada processo.


Segue referencia sobre a função ONLY


  Importante lembrar que esta lógica só funciona quando você tem o ID_Processo e status como dimensão na tabela. Caso você queira fazer agregações baseado na diferença de tempo entre os status, então a dica do Thiago de calcular em script é a melhor saida. Exemplo: Mostrar "Tempo médio de cada status" considerando todos os processos.

https://help.qlik.com/pt-BR/sense/February2018/Subsystems/Hub/Content/ChartFunctions/BasicAggregatio...

Abraço,

Pablo


View solution in original post

9 Replies
Thiago_Justen_

Bruno,

Eu faria isso no script:

Load

*,

If (ID_PROCESSO=Previous (ID_PROCESSO), Interval(Previous(PROCESSO.DATA_HOJE)-PROCESSO.DATA_HOJE),Time (0)) AS INTERVALO

Resident Sua_Tabela Order By ID_PROCESSO;


O order by aqui se faz necessário pra usarmos o interval corretamente.

Thiago Justen Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago
pablolabbe
Luminary Alumni
Luminary Alumni

Olá Bruno,

  A função ABOVE somente pode ser utilizada com uma função de agregação e deve ser incluída como medida. Você incluiu como Dimensão no gráfico.

  Como agregação eu usaria a função only(), que deve retornar o proprio valor supondo que não existe dado repetido com o mesmo valor para um processo.

  If ( only(ID_PROCESSO) =above (only(ID_PROCESSO)), Interval(above(only(PROCESSO.DATA_HOJE))-only(PROCESSO.DATA_HOJE)), null()) 


  O if na função é para calcular a diferença somente nos registros que são do processo, e ele vai colocar nulo no intervalo do primeiro status de cada processo.


Segue referencia sobre a função ONLY


  Importante lembrar que esta lógica só funciona quando você tem o ID_Processo e status como dimensão na tabela. Caso você queira fazer agregações baseado na diferença de tempo entre os status, então a dica do Thiago de calcular em script é a melhor saida. Exemplo: Mostrar "Tempo médio de cada status" considerando todos os processos.

https://help.qlik.com/pt-BR/sense/February2018/Subsystems/Hub/Content/ChartFunctions/BasicAggregatio...

Abraço,

Pablo


Anonymous
Not applicable

Bom dia Bruno,

Fiz um teste bem simples da mesma forma que o seu exemplo e no meu caso funcionou perfeitamente como pode ser visto abaixo:

Capturar.PNG

será que o problema que está ocorrendo com você pode estar relacionado ao tipo de dado?

pablolabbe
Luminary Alumni
Luminary Alumni

Oi Anderson,

  Ele adicionou a coluna como Dimensão e você como medida, por isso que no seu caso funcionou.

Anonymous
Not applicable

Bom dia Pablo,

Até havia percebido isso tb, mas a coluna data necessariamente nem precisa estar na tabela para o cálculo funcionar corretamente, adicionei ela apenas para exemplificar mesmo, por isso acho que pode existir algum problema com o tipo de dado que sense está interpletando.

Capturar.PNG

brunoabdante
Contributor II
Contributor II
Author

Olá Thiago!

Sensacional, consegui aplicar o script e deu certo. Eu até tinha visto alguns scripts em alguns foruns, mas sempre ao gerar apresentava algum tipo de erro, este que você fez serviu perfeitamente!

Muito obrigado!

brunoabdante
Contributor II
Contributor II
Author

Olá Pablo!

Ótimo, vou tentar aplicar esta função que mencionou. A pinicipio para atender o que eu preciso usei o script que o Thiago mencionou, mas em contra-partida vou testar também a função que mencionou, até mesmo para ter mais possibilidades de uso.

Muito obrigado pelas dicas!

brunoabdante
Contributor II
Contributor II
Author

Olá Anderson e Pablo!

Então, vi que mencionaram que eu coloquei como Dimensão, mas eu coloquei sim como Medida (até tentei colocar como dimensão, mas apresentava erro), portanto também acredito ser um problema do dado carregado.

Anderson, até tentei fazer um exemplo bem simples, e nada aconteceu rs. Acredito que deve realmente ser um problema na carga de dados, ou tipo de dado importado.

De qualquer forma, consegui aplicar o script informado pelo Thiago e vou tentar em paralelo as funções que mencionaram e dou um retorno para vocês.

Muito obrigado a todos pela ajuda!

Obs.: Surpreendido pela rapidez e pela pró-atividade dos participantes, excelente!

leojacquier_123
Contributor
Contributor

Bom dia. Como ficaria o codigo para acumular as linhas?

Obrigado