Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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:
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
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.
Abraço,
Pablo
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.
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.
Abraço,
Pablo
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:
será que o problema que está ocorrendo com você pode estar relacionado ao tipo de dado?
Oi Anderson,
Ele adicionou a coluna como Dimensão e você como medida, por isso que no seu caso funcionou.
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.
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!
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!
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!
Bom dia. Como ficaria o codigo para acumular as linhas?
Obrigado