Skip to main content
Announcements
NEW Customer Portal: Initial launch will improve how you submit Support Cases. FIND OUT MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
MarildaSantos
Contributor
Contributor

Readmissão período de 30 dias

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.

1 Solution

Accepted Solutions
marco_almeida
Creator II
Creator II

Olá. Quanto tempo em? Smiley Very Happy

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;
Grupo Telegram Qlik Brasil: https://t.me/joinchat/AeRmnUmcxQ02L00g3x-HtQ

View solution in original post

4 Replies
marco_almeida
Creator II
Creator II

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.

Grupo Telegram Qlik Brasil: https://t.me/joinchat/AeRmnUmcxQ02L00g3x-HtQ
MarildaSantos
Contributor
Contributor
Author

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.

marco_almeida
Creator II
Creator II

Olá. Quanto tempo em? Smiley Very Happy

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;
Grupo Telegram Qlik Brasil: https://t.me/joinchat/AeRmnUmcxQ02L00g3x-HtQ
MarildaSantos
Contributor
Contributor
Author

Olá, verdade demorei muito para responder mesmo, desculpa. Smiley Embarassed

Deu certo.

Muito obrigada pela solução e pela explicação.

Atenciosamente,
Marilda.