Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa tarde,
Preciso saber se o paciente foi readmitido no hospital com o mesmo cod_cid no período de 30 dias.
O prontuário é sempre o mesmo, não importa quantas vezes o paciente foi readmitido.
O registro sempre se renova em cada readmissão.
Por gentileza, poderiam me ajudar?
Segue arquivo .qvw
Obrigada!
Atenciosamente, Marilda.
Olá. Quanto tempo em?
Você pode fazer dessa maneira:
/* Essa seria o seu QVD processado e armazenado ou sua consulta ao banco direto Necessário adaptar o nome dos campos */ Entradas: LOAD * INLINE [ prontuario, cod_cid, data_entrada 1 , A , 21/01/2019 1 , A , 06/03/2019 1 , B , 10/02/2019 2 , A , 02/02/2019 2 , A , 20/02/2019 3 , A , 01/01/2019 3 , C , 02/02/2019 ] ; /* Aqui nós criamos uma espécie de Rank de entrdad de forma decrescente agrupado por prontuario Não é necessário para a sua análise é apenas uma "firula" */ LEFT JOIN(Entradas) LOAD prontuario , data_entrada , AutoNumber(data_entrada, prontuario) as rank RESIDENT Entradas ORDER BY prontuario , data_entrada desc ; NOCONCATENATE /* Aqui utilizamos o recurso de LOAD Precente para não ter que ficar dando LOAD Resident para cada transformação A leitura é feita Bottom-Up, ou seja, debaixo para cima */ EntradasCid: LOAD * , IF(diasIntervalo <= 30, 'Sim', 'Não') as retornoRecente //E aqui sai o resultado esperado ; LOAD * , Interval(data_entrada - dataEntradaAnterior, 'd') as diasIntervalo //Aqui aproveitamos o campo gerado no bloco anterior para fazer o intevalo de dias entre uma entrada e outra , Interval(data_entrada - dataEntradaAnteriorProntuario, 'd') as diasIntervaloProntuario ; LOAD * , IF(rank = 1, 'Sim', 'Não') as ultimoRegistroEntrada , IF(prontuario = Previous(prontuario) and cod_cid = Previous(cod_cid), Previous(data_entrada)) as dataEntradaAnterior //A função Previous() verifica o valor de um campo na linha anterior a sua tabela. Nesse caso estamos verificando se a linha atual, nos campos prontuario e cod_cid são iguais a linha anterior. Se for, busca a data_entrada desse registro , IF(prontuario = Previous(prontuario), Previous(data_entrada)) as dataEntradaAnteriorProntuario RESIDENT Entradas ORDER BY prontuario , cod_cid , data_entrada ; DROP TABLE Entradas;
O que você pode fazer é uma agregação Max na data da entrada e verificar se Today() - Max(data) < 30.
Ela pode ser feita tanto na expressão quando no script.
Boa tarde Otavio,
Muito obrigada pela resposta, desculpa a demora para responder.
Não tenho muito conhecimento em desenvolvimento no qlikview, tentei implementar a expressão, porem não funcionou, acredito que estou fazendo algo errado, por gentileza, poderia exemplificar se possível?
Obrigada!
Atenciosamente,
Marilda.
Olá. Quanto tempo em?
Você pode fazer dessa maneira:
/* Essa seria o seu QVD processado e armazenado ou sua consulta ao banco direto Necessário adaptar o nome dos campos */ Entradas: LOAD * INLINE [ prontuario, cod_cid, data_entrada 1 , A , 21/01/2019 1 , A , 06/03/2019 1 , B , 10/02/2019 2 , A , 02/02/2019 2 , A , 20/02/2019 3 , A , 01/01/2019 3 , C , 02/02/2019 ] ; /* Aqui nós criamos uma espécie de Rank de entrdad de forma decrescente agrupado por prontuario Não é necessário para a sua análise é apenas uma "firula" */ LEFT JOIN(Entradas) LOAD prontuario , data_entrada , AutoNumber(data_entrada, prontuario) as rank RESIDENT Entradas ORDER BY prontuario , data_entrada desc ; NOCONCATENATE /* Aqui utilizamos o recurso de LOAD Precente para não ter que ficar dando LOAD Resident para cada transformação A leitura é feita Bottom-Up, ou seja, debaixo para cima */ EntradasCid: LOAD * , IF(diasIntervalo <= 30, 'Sim', 'Não') as retornoRecente //E aqui sai o resultado esperado ; LOAD * , Interval(data_entrada - dataEntradaAnterior, 'd') as diasIntervalo //Aqui aproveitamos o campo gerado no bloco anterior para fazer o intevalo de dias entre uma entrada e outra , Interval(data_entrada - dataEntradaAnteriorProntuario, 'd') as diasIntervaloProntuario ; LOAD * , IF(rank = 1, 'Sim', 'Não') as ultimoRegistroEntrada , IF(prontuario = Previous(prontuario) and cod_cid = Previous(cod_cid), Previous(data_entrada)) as dataEntradaAnterior //A função Previous() verifica o valor de um campo na linha anterior a sua tabela. Nesse caso estamos verificando se a linha atual, nos campos prontuario e cod_cid são iguais a linha anterior. Se for, busca a data_entrada desse registro , IF(prontuario = Previous(prontuario), Previous(data_entrada)) as dataEntradaAnteriorProntuario RESIDENT Entradas ORDER BY prontuario , cod_cid , data_entrada ; DROP TABLE Entradas;
Olá, verdade demorei muito para responder mesmo, desculpa.
Deu certo.
Muito obrigada pela solução e pela explicação.
Atenciosamente,
Marilda.