11 Grupos de Diagnósticos Homogéneos (GDH´s) 11.1 Enquadramento
Figura 57 – Tabela intermédia de carregamento da dimensão paciente
11.4.5.7 Carregamento das Dimensões Distrito, Freguesia e Concelho
As dimensões distrito, freguesia e concelho encontram‐se definidas como um ramo do modelo do DW, ou seja, estas dimensões estão representadas no modo de “snow‐flake” em que a hierarquia mais elevada é o distrito, depois o concelho e o último nível (nível folha) é a freguesia. A estrutura das tabelas é a seguinte (Figura 69):
Figura 69 – Estrutura das dimensões distrito, concelho e freguesia.
Visto que as três dimensões estão dependentes da mesma fonte de dados (ficheiro Excel “SRC_FREGS_CONCELHO_DISTR.xlsx”), criou‐se um “package” designado por “GDH_LOAD_DIM_RESIDE.dtsx” para o carregamento destas dimensões. Os dados no ficheiro fonte encontravam‐se não normalizados o que obrigou a uma transformação específica para construir uma hierarquia. Optou‐se por construir uma hierarquia de forma a que os dados estejam mais organizados/normalizados (minimizando a replicação de dados) e acima de tudo que facilite a navegação (“drill”) ao utilizador final. Desta forma, os utilizadores podem navegar da freguesia do paciente até ao seu distrito e vice‐versa, o que em termos de BI, traduz‐se nas operações de “drill‐down” e “drill‐up”. Esta flexibilidade permite aos utilizadores analisarem os dados sob diferentes perspectivas de granularidade.
Para compreender o processo de ETL que alimenta estas dimensões, é necessário observar um excerto de como é que os dados se encontram no ficheiro fonte (Figura 70).
Figura 70 – Estrutura das dimensões Distrito, Concelho e Freguesia.
Como se pode observar na figura acima, a chave operacional do distrito é unívoca, a do concelho é uma chave composta em que os dois primeiros dígitos pertencem ao distrito. A chave da freguesia, também ela composta, tem nos quatro primeiros dígitos os códigos do distrito (dois dígitos) e do concelho (dois dígitos).
Após a compreensão da estrutura do ficheiro fonte, definiu‐se o fluxo de controlo do processo de ETL (Figura 71).
Figura 71 – Controlo de fluxo do processo de ETL para carregamento das três dimensões.
O primeiro passo (“TRUNCATE RAW DATA”) consiste em apagar todos os registos de uma tabela intermédia (“TBL_RAW_DATA_RESIDE”) que foi criada na Staging Area para importar os dados directamente da fonte para se ter independência do sistema fonte. O próximo passo (“LOAD SA TBL”) consistiu no carregamento do ficheiro Excel para a tabela da Staging Area. Após este passo, a tarefa de fluxo de dados (“data flow task”) renomeada para “LOAD DIM DISTRITO” consiste em carregar a dimensão distrito segundo o fluxo de dados (Figura 72):
Figura 72 – Fluxo de dados para carregamento da dimensão distrito.
Em que a “query” fonte à tabela de Staging Area consiste apenas nos códigos e descritivos distintos do distrito, removendo‐se o cabeçalho da coluna, visto que na fonte existem repetições (Figura 73).
select distinct DT,DISTRITO from dbo.TBL_RAW_DATA_RESIDE where DISTRITO not in ('DISTRITO/ILHA')
and DISTRITO is not null order by DT
Figura 73 – “Query” de extracção para carregamento da dimensão distrito.
A tarefa de “slowly chaging dimension” permite identificar se já existe o distrito, o seu descritivo é actualizado (tarefa “UPD DATA”) caso tenha sido alterado na fonte, se o distrito ainda não existe na dimensão é inserido (tarefa “INS DATA”).
Regressando ao fluxo de controlo, o passo seguinte consiste em inserir um registo (caso ainda não exista) do distrito não definido em que a SK assume o valor “‐1”.
Para o carregamento dos concelhos teve‐se em conta a dimensão distrito, visto que um distrito pode ter “n” concelhos. Partindo deste pressuposto, o carregamento da dimensão concelho é idêntico ao distrito ao nível de “slowly changing dimension”, tirando apenas o cruzamento da tabela de Staging Area com a dimensão distrito de forma a que exista a chave estrangeira (SK_DISTRITO) na dimensão de concelho. Só desta forma é que será possível construir a hierarquia. A “query” de extracção para a dimensão concelho é a seguinte (Figura 74):
SELECT ID_CONCELHO=ISNULL(A.DTCC,'9999'),
CONCELHO=ISNULL(A.CONCELHO,'NÃO DEFINIDO'),
SK_DISTRITO=ISNULL(DIM.SK_DISTRITO,‐1)
FROM (select distinct DTCC,CONCELHO from dbo.TBL_RAW_DATA_RESIDE where CONCELHO not in ('CONCELHO') and DTCC is not null) A
left join DW_GDH.dbo.Dim_Distrito DIM on LEFT(A.DTCC,2)=DIM.ID_DISTRITO
Figura 74 – “Query” de extracção para carregamento da dimensão concelho.
No caso de o concelho ser nulo é atribuído o valor 9999, ou seja, não definido. Caso o descritivo do concelho seja igual à palavra “concelho” que no sistema fonte é o cabeçalho do ficheiro Excel que se repete algumas vezes pelo ficheiro e tem de ser eliminado visto que não representa nenhum concelho, mas sim uma repetição do cabeçalho. O cruzamento da
informação entre a tabela de SA que tem todos os dados e a dimensão distrito é efectuado através de um “left join” visto que se pretende carregar todos os concelhos tendo ou não distrito associado.
Como para a dimensão distrito, efectuou‐se a mesma tarefa para a dimensão concelho que consistiu em inserir um registo (caso ainda não exista) do concelho não definido em que a SK assume o valor “‐1”.
Por último surge a dimensão freguesia que é idêntica à dimensão concelho. A única diferença consiste na “query” de extracção (Figura 75) que vai buscar ao SK do concelho (chave estrangeira) à dimensão concelho.
SELECT ID_FREGUESIA=ISNULL(A.DTCCFR,'999999'),
FREGUESIA=ISNULL(A.FREGUESIA,'NÃO DEFINIDO'),
SK_CONCELHO=ISNULL(DIM.SK_CONCELHO,‐1)
FROM (select distinct DTCCFR,FREGUESIA from dbo.TBL_RAW_DATA_RESIDE where FREGUESIA not in ('FREGUESIA') and DTCCFR is not null) A
left join DW_GDH.dbo.Dim_Concelho DIM on LEFT(A.DTCCFR,4)=DIM.ID_CONCELHO
Figura 75 – “Query” de extracção para carregamento da dimensão freguesia. De notar que o cruzamento é efectuado pelos quatro primeiros dígitos da chave operacional da freguesia que corresponde ao código do concelho. Através deste encadeamento entre as SK das dimensões foi possível construir a hierarquia das localidades onde os pacientes residem.
11.4.5.8 Carregamento da Dimensão Destino Após Alta
O processo de carregamento da dimensão destino após alta é efectuado de forma diferente em comparação com os processos anteriores.
Começou‐se por criar uma tabela de dimensão destino após alta com a seguinte estrutura (Figura 76):
Figura 76 – Estrutura da tabela de dimensão destino após alta.
Seguidamente usou‐se a chave operacional como SK, visto que a volumetria desta dimensão é bastante reduzida (apenas contém 7 registos). A fonte de dados é o ficheiro Excel “SRC_DSP_DESTINO_APOS_ALTA.xlsx” e o processo de ETL (“package”) que efectua o carregamento da dimensão destino após alta, designa‐se por “GDH_LOAD_DIM_DSP.dtsx”. A sua estrutura ao nível do controlo de fluxo (Figura 77) consiste em apagar por completo a tabela de dimensão e efectuar um carregamento completo dos dados provenientes da fonte através da tarefa de fluxo de dados “LOAD DIM DATA” (Figura 78).
Figura 77 – Componente controlo de fluxo do package “GDH_LOAD_DIM_DSP.dtsx”.
Neste caso, não existe uma tarefa de inserção do registo “não definido” visto que o ficheiro Excel já contém esse registo.