Pular para o conteúdo
Fynx
Business Intelligence13 min de leitura

Dashboard de ocupação de leitos no Power BI

Como construir um dashboard de ocupação de leitos no Power BI com KPIs reais, modelagem estrela, medidas DAX e atualização a partir do HIS.

F
Fynx

O leito parado custa caro e ninguém enxerga em tempo real

Em quase todo hospital que a Fynx acompanha, a informação sobre ocupação existe, mas chega tarde. O coordenador de internação abre uma planilha atualizada manualmente pela manhã, a diretoria recebe um relatório consolidado no fim do mês e a enfermagem trabalha com quadros de acrílico na parede. Um dashboard de ocupação de leitos no Power BI resolve esse descompasso: transforma o censo que já está no sistema de gestão hospitalar em um painel que responde, agora, quantos leitos estão livres, ocupados, bloqueados e quanto tempo cada paciente está internado.

Este artigo é técnico e assume que você vai colocar a mão na massa. Vou tratar dos KPIs que realmente importam, da modelagem de dados por trás deles, das medidas DAX que os calculam, de como atualizar a partir do HIS e de onde o Power Platform entra para fechar o ciclo entre enxergar o problema e agir sobre ele.

Os KPIs de ocupação que sustentam a decisão

Um painel bonito com métricas erradas atrapalha. Antes de desenhar qualquer visual, defina o que cada indicador significa e em que granularidade ele faz sentido. Estes são os KPIs que compõem o núcleo de um dashboard de ocupação de leitos hospitalar.

KPIO que medeComo calcular (base)
Taxa de ocupaçãoPercentual de leitos operacionais em usoPacientes-dia / leitos-dia disponíveis
Giro de leitoQuantos pacientes passam por leito no períodoTotal de altas / leitos operacionais
Tempo médio de permanênciaDias médios que o paciente fica internadoPacientes-dia / número de saídas
Leitos bloqueadosLeitos indisponíveis por manutenção, isolamento ou reformaContagem de leitos com status de bloqueio
Censo diárioFoto do total de pacientes internados por diaContagem de internações ativas na data
Intervalo de substituiçãoTempo médio que o leito fica vago entre uma alta e a próxima admissão(Leitos-dia disponíveis menos pacientes-dia) / saídas

Três observações que separam um painel amador de um confiável.

A taxa de ocupação precisa usar leitos operacionais no denominador, não leitos instalados. Um leito bloqueado para manutenção não deveria inflar a base e mascarar a ocupação real. A diretoria toma decisões muito diferentes dependendo de qual número aparece.

O tempo médio de permanência só faz sentido segmentado. A média geral do hospital esconde tudo. Um paciente de UTI e um de day clinic no mesmo indicador não dizem nada. Segmente por clínica, especialidade e tipo de leito, sempre.

Os leitos bloqueados são o KPI mais negligenciado e o que mais devolve dinheiro rápido. Bloqueio que deveria durar duas horas e dura dois dias é receita perdida e é visível assim que o painel escancara o tempo em cada status.

A modelagem certa é um esquema estrela, não uma planilha achatada

O erro mais comum é jogar a exportação bruta do HIS em uma tabela única e gigante e sair criando visuais em cima dela. Isso funciona no protótipo e quebra na escala. O Power BI foi feito para modelo dimensional.

O motor por trás do Power BI é o VertiPaq, um mecanismo colunar que comprime cada coluna de acordo com a sua cardinalidade. Colunas com poucos valores distintos comprimem muito bem, colunas com alta cardinalidade ocupam muito espaço e degradam a performance. Uma tabela achatada com data, hora, identificador de paciente, texto de diagnóstico e status tudo junto tem cardinalidade péssima. Separar dimensões de fatos não é purismo acadêmico, é o que deixa o modelo leve.

Um desenho enxuto para ocupação de leitos costuma ter estas tabelas.

TabelaTipoPapel
fCensoDiarioFatoSnapshot diário de cada leito com seu status na data
fInternacoesFatoUm registro por internação, com admissão e alta
dCalendarioDimensãoCalendário contínuo marcado como tabela de datas
dLeitoDimensãoLeito, tipo, ala, andar, unidade
dPacienteDimensãoAtributos não sensíveis do paciente
dClinicaDimensãoEspecialidade, clínica, convênio

A escolha entre um fato de eventos (fInternacoes, um registro por internação) e um fato snapshot (fCensoDiario, uma foto por leito por dia) não é ou um ou outro. Você precisa dos dois. O snapshot diário é o que permite calcular taxa de ocupação histórica sem lógica de intervalos custosa em DAX, porque a granularidade leito-dia já está materializada. O fato de eventos é o que sustenta tempo de permanência e giro. Manter uma dCalendario marcada como tabela de datas é obrigatório para que as funções de time intelligence funcionem sem surpresa.

Se você quer se aprofundar na parte de modelagem, vale ler o guia de boas práticas de modelagem e DAX no Power BI, que trata em detalhe da relação entre cardinalidade, granularidade e performance.

As medidas DAX que dão vida ao painel

Com o modelo estrela pronto, as medidas ficam curtas e legíveis. Evite calcular ocupação varrendo intervalos de datas em DAX puro se você já tem o snapshot diário: é mais barato contar linhas do fato snapshot.

Assumindo o fCensoDiario com uma linha por leito por dia e uma coluna Status, o total de leitos-dia disponíveis exclui bloqueados:

Leitos-dia Disponíveis = CALCULATE ( COUNTROWS ( fCensoDiario ), fCensoDiario[Status] <> "Bloqueado" )

Os pacientes-dia contam apenas o status ocupado:

Pacientes-dia = CALCULATE ( COUNTROWS ( fCensoDiario ), fCensoDiario[Status] = "Ocupado" )

A taxa de ocupação vira uma divisão segura, usando DIVIDE para não estourar em divisão por zero:

Taxa de Ocupacao = DIVIDE ( [Pacientes-dia], [Leitos-dia Disponíveis] )

O tempo médio de permanência sai do fato de eventos, considerando internações com alta no período:

Tempo Medio Permanencia = DIVIDE ( SUMX ( fInternacoes, DATEDIFF ( fInternacoes[DataAdmissao], fInternacoes[DataAlta], DAY ) ), COUNTROWS ( fInternacoes ) )

O giro de leito relaciona altas com leitos operacionais no contexto filtrado:

Giro de Leito = DIVIDE ( COUNTROWS ( fInternacoes ), DISTINCTCOUNT ( dLeito[LeitoID] ) )

Duas recomendações de ofício. Sempre use DIVIDE no lugar do operador de barra, porque período sem movimento acontece e você não quer erro no visual. E deixe as medidas base (Pacientes-dia, Leitos-dia Disponíveis) explícitas para reaproveitar, em vez de repetir a mesma lógica dentro de cada indicador. Isso reduz erro e facilita manutenção quando a regra de negócio muda.

A atualização precisa vir do HIS, sem planilha no meio

Um dashboard de ocupação de leitos só entrega valor se os dados chegam frescos. Aqui a arquitetura importa mais que o visual.

Sistemas de gestão hospitalar, os HIS como MV, Tasy, Pixeon e similares, guardam os dados em banco relacional, tipicamente Oracle ou SQL Server. O caminho mais robusto é o Power BI consumir de uma camada intermediária, não direto das tabelas transacionais de produção. Consultar o banco operacional em horário de pico para alimentar um painel é pedir para brigar com o DBA, e ele tem razão.

O desenho que recomendo na prática.

  • Uma camada analítica separada, seja um data warehouse, um schema de leitura ou um lakehouse, alimentada por processo de extração agendado fora do pico.
  • O Power BI lendo dessa camada por Import quando a latência de algumas horas é aceitável, o que cobre a maioria dos indicadores gerenciais.
  • Modo DirectQuery ou um snapshot de alta frequência quando a operação exige censo quase em tempo real para gestão de leitos ativa.

Para quem já está no Microsoft Fabric, anunciado pela Microsoft em 2023, o modo Direct Lake muda o jogo: o modelo lê os arquivos diretamente do OneLake sem a etapa de importação e sem a latência do DirectQuery tradicional, combinando frescor com performance de Import. É a opção que melhor equilibra atualização e velocidade para censo hospitalar em volume, quando a organização já tem capacidade Fabric provisionada. O consumo no Fabric é medido em Capacity Units, com SKUs que vão de F2 a F2048, e o dimensionamento deve ser feito com base na carga real de atualização e consulta.

Se a atualização e a arquitetura de dados são o gargalo do seu projeto, esse é exatamente o terreno de um trabalho de engenharia de dados bem feito, que constrói a camada analítica que sustenta o painel sem sufocar o transacional.

Governança e LGPD não são opcionais em dado hospitalar

Dado de internação é dado pessoal e, na maioria dos casos, dado sensível de saúde. A Lei nº 13.709/2018, a LGPD, trata dado referente à saúde como categoria especial, com exigência de base legal e cuidado reforçado. Isso tem consequência direta no desenho do painel.

Na prática, um dashboard de ocupação de leitos gerencial não precisa expor identidade de paciente. A diretoria quer taxa de ocupação por ala, giro por clínica e tempo de permanência por especialidade, não o nome de quem está no leito 214. Modele para o menor privilégio: mantenha os atributos identificáveis fora do modelo analítico sempre que o KPI não exigir, e onde a operação exigir rastreio individual, aplique segurança em nível de linha, a Row-Level Security do Power BI, para que cada perfil veja só o que lhe compete.

Tratei desse assunto com mais profundidade no artigo sobre governança de dados no Power BI e LGPD, que vale a leitura antes de publicar qualquer painel com dado de paciente. E a disciplina contínua de catálogo, papéis e auditoria é o que um serviço de governança de dados coloca de pé para que o painel não vire um vazamento esperando para acontecer.

Do painel à ação com Power Platform

Enxergar o leito bloqueado é metade do trabalho. A outra metade é fazer alguém desbloqueá-lo. É aqui que o Power Platform fecha o ciclo, e onde muito projeto de BI para na primeira metade.

Alguns usos concretos que fazem diferença na operação.

  • Um Power Automate que dispara alerta quando a taxa de ocupação de uma ala ultrapassa um limite crítico, notificando o plantão por Teams ou e-mail sem ninguém precisar estar olhando o painel.
  • Um Power App simples de baixo custo para a enfermagem registrar mudança de status de leito, de higienização para disponível, alimentando de volta a camada de dados e reduzindo o intervalo de substituição.
  • Fluxos que abrem chamado de manutenção automaticamente quando um leito entra em bloqueio, com o relógio correndo desde o primeiro minuto.

Esse casamento entre painel que mostra e aplicativo que age é o que transforma BI em operação de fato. Se quiser entender o ecossistema, o guia de Power Platform com Power Apps e Automate dá o panorama, e um projeto de Power Platform desenha essas automações sob medida para o fluxo do hospital.

Como começar sem transformar em projeto de dois anos

Um erro clássico é querer modelar o hospital inteiro antes de entregar o primeiro valor. Faça o inverso. Comece por uma unidade ou clínica, com o snapshot diário e os quatro KPIs de maior impacto: taxa de ocupação, tempo de permanência, leitos bloqueados e censo diário. Prove valor em semanas, não em trimestres, e expanda a partir do que a operação pedir.

Sobre licenciamento, para dar contexto sem prometer número: o Power BI se distribui principalmente por Power BI Pro e Power BI Premium por Usuário, a PPU, ambas licenças por usuário, além da capacidade dedicada via Fabric. Preços variam por contrato, região e canal, e devem ser confirmados na fonte oficial da Microsoft. Vale lembrar que a Microsoft é reconhecida como Líder no Quadrante Mágico do Gartner para plataformas de Analytics e BI, e a ampla penetração do ecossistema Microsoft no Brasil explica boa parte da adoção do Power BI no país. Um trabalho de Power BI bem conduzido escolhe a licença certa para o tamanho da operação, sem pagar por capacidade que você não vai usar.

Perguntas frequentes

Qual a diferença entre taxa de ocupação sobre leitos instalados e sobre leitos operacionais?

Leitos instalados é a capacidade física total, incluindo leitos bloqueados e desativados. Leitos operacionais são os que estão de fato disponíveis para internar. A taxa de ocupação relevante para gestão usa leitos operacionais no denominador, porque medir ocupação contra leitos que você não pode usar subestima o quanto o hospital está cheio e leva a decisões erradas de capacidade.

Preciso de dados em tempo real para um dashboard de ocupação de leitos?

Depende do uso. Para relatório gerencial e diretoria, uma atualização a cada poucas horas via Import atende com folga e é mais barata e estável. Para gestão ativa de leitos, onde a equipe realoca pacientes ao longo do dia, aí sim faz sentido DirectQuery, Direct Lake no Fabric ou um snapshot de alta frequência. Não pague o custo de tempo real onde a decisão é diária.

Posso conectar o Power BI direto no banco do HIS?

Tecnicamente sim, mas raramente é boa ideia consultar o banco transacional de produção em horário de pico. O caminho robusto é extrair para uma camada analítica separada, um data warehouse ou lakehouse, e o Power BI lê dessa camada. Isso protege a performance do sistema assistencial e dá a você liberdade para modelar sem mexer na base operacional.

Como calcular tempo médio de permanência corretamente em DAX?

Use o fato de eventos com uma linha por internação, calcule a diferença em dias entre admissão e alta com DATEDIFF dentro de um SUMX e divida pelo número de saídas com DIVIDE. O ponto crítico é decidir quais internações entram na conta, normalmente as que tiveram alta no período analisado, e segmentar por clínica ou tipo de leito, porque a média global não informa quase nada.

O dashboard de ocupação de leitos precisa se preocupar com LGPD?

Sim. Dado de internação é dado pessoal, e informação de saúde é tratada como dado sensível pela Lei nº 13.709/2018. Na maioria dos painéis gerenciais você não precisa expor identidade de paciente para calcular ocupação, giro e permanência. Modele com o mínimo de dado identificável, aplique segurança em nível de linha onde necessário e registre a base legal do tratamento.

Vale a pena usar Microsoft Fabric para esse tipo de painel?

Vale quando a organização já tem ou pretende ter capacidade Fabric e o volume de censo justifica. O modo Direct Lake lê direto do OneLake, entregando frescor sem a latência do DirectQuery e sem a etapa de importação, o que é ideal para dados hospitalares em volume. Para um projeto pequeno e pontual, Power BI Pro com Import resolve sem a complexidade e o custo de uma capacidade dedicada.

Conclusão

Um dashboard de ocupação de leitos que funciona não é o que tem mais visuais, é o que junta KPIs bem definidos, um modelo estrela leve, medidas DAX corretas, atualização confiável a partir do HIS e respeito à LGPD, com o Power Platform fechando o ciclo entre ver e agir. Comece pequeno, prove valor rápido e expanda com governança desde o primeiro dia.

Se você quer tirar esse painel do papel com quem já entregou mais de 2.000 soluções Microsoft, fale com a gente.

Quer aplicar isso na sua empresa?

A Fynx implementa BI, Power BI e Power Platform de ponta a ponta. Conte seu cenário e devolvemos um diagnóstico direto ao ponto.

Falar com um especialista

Vamos transformar seus dados em decisão?

Conte seu cenário. Devolvemos um diagnóstico e uma proposta com faixa de investimento em poucos dias úteis, sem folheto, direto ao ponto.