Power BI decision-support dashboard for residential aged care
A reporting model that takes quality indicators, clinical incidents, SIRS notifications, consumer experience and workforce data across twelve residential aged care homes, and turns them into something a clinical governance team can act on: which homes warrant review, which indicators are moving, and whether a change is ordinary variation or worth investigating.
Synthetic demonstration data, generated by script and modelled on the structure of the national aged care quality indicator programme. No real resident, staff or provider data is used anywhere in this project.
A clinical governance team receives data from six or seven directions at once: mandatory quality indicators, incident registers, reportable incidents under SIRS, consumer experience surveys, workforce metrics and facility operations. Each arrives on its own cycle, in its own shape, usually in its own report.
Visualising those datasets is not the hard part. The hard part is that a portfolio-level view averages away exactly the variation a governance team needs to see, and a quarterly snapshot shows position without showing direction.
Where does the clinical governance team need to focus attention first?
The landing page carries the signals a governance meeting opens with: homes currently requiring escalation, severe-harm incident volume, Priority 1 SIRS notification timeliness and consumer experience. Below them sit the full indicator scorecard against national benchmarks, and a facility-by-indicator grid showing where performance sits relative to benchmark across the whole portfolio.
The page assigns escalation status rather than leaving a reader to interpret thirteen indicators against thirteen benchmarks by eye. Status is decision support for review and investigation, not a clinical judgement.
Quality measures do not all move in the same desirable direction. The model holds a direction attribute on the indicator dimension and normalises for it before assigning performance status, so a single measure reads correctly across the whole indicator set.
| Falls, pressure injuries, restraint, unplanned weight loss | lower is better |
| Consumer experience, quality of life | higher is better |
Without this, a variance measure colours half the scorecard backwards, and the homes performing well on experience appear to be the ones in trouble.
Is a facility showing ordinary variation, or has something meaningfully changed?
A facility can sit close to benchmark in any single reporting period while deteriorating steadily across two years. Benchmark comparison answers where a home is. It does not answer whether it is moving, or whether the movement is larger than that home's own normal variation.
This page lets a user select an indicator, hold a single facility, compare rates across the portfolio, and read the same measure as a control chart. Control limits are three-sigma, calculated from a fixed twelve-month baseline period and extended forward, so the monitoring window is assessed against established behaviour rather than against itself.
In this dataset, one home's pressure injury rate rises gradually across sixteen months. No individual month reads as exceptional and a quarterly snapshot against benchmark does not make the movement obvious. Monitored as a process against baseline limits, the change becomes visible from mid-period.
A control chart identifies variation that is unlikely to be routine. It does not establish cause, and it is not a clinical finding. It indicates where a governance team may want to look, and when.
What specifically needs investigation at this home?
Right-clicking any facility anywhere in the report opens a scorecard filtered to that home. It brings occupancy, care minutes, staff turnover, incident rate per 1,000 bed days, consumer experience and the full indicator set with escalation status onto one page, alongside the longitudinal incident trend.
The intent is to remove the step where someone exports three reports and joins them by hand before a governance meeting. The page supports investigation. It does not recommend clinical action.
The source data was written to behave like an operational extract rather than a clean export. The Power Query pipeline resolves each defect as a named, readable step rather than a silent type coercion.
That last one matters more than it looks. An ISR rating is a clinical severity code. Coercing an unreadable value to zero invents a severity level that does not exist and quietly skews every severity distribution downstream. A dashboard that renders correctly is still unsafe if the transformation underneath it is not.
Star schema with conformed date and facility dimensions. Quality indicators are stored as numerator and denominator rather than a pre-computed rate, so a 48-bed home and a 144-bed home weight correctly when results roll up to state or portfolio level. The benchmark table sits at quarter grain and is joined at query time rather than physically, keeping a mismatched grain out of the model.
Three points in the build where the answer was not obvious and the first attempt was wrong.
Quality measures do not all move in the same desirable direction, so a single variance measure cannot be applied across the indicator set without normalising first.
Direction is held as an attribute on the indicator dimension and resolved inside the measure, so adding a new indicator does not require new logic.
I began with a flat percentage-point gap to benchmark, then tested it across every indicator. Because it is an absolute rule, what counts as a breach depends entirely on how common the indicator is.
Escalation now triggers on absolute or relative deviation, so a large gap on a common indicator and a large proportional gap on a rare one are both caught.
Point-in-time benchmark comparison cannot reveal a sustained shift. SPC was added to monitor each indicator as a process rather than a position.
Calculating limits across the whole visible period initially found nothing: the change sits inside its own baseline, inflating the standard deviation and widening the limits past the point of detection. Limits are now derived from a fixed twelve-month baseline and extended forward.
Two further pages cover incident and SIRS reporting and consumer experience, with a report-page tooltip providing twelve-month context on hover throughout.
Translating quality, safety, experience and workforce datasets into governance-focused reporting.
Semantic modelling, DAX, Power Query, drill-through, row-level security and interactive reporting.
Reconciling inconsistent operational data before it reaches a decision-maker, and documenting how.
Combining benchmark comparison, longitudinal analysis and process monitoring rather than relying on snapshots.
Designing around escalation, prioritisation and investigation rather than dashboard aesthetics alone.
Presenting measures so a non-technical governance stakeholder can see why something has been flagged.
Stated plainly, because a reporting product that does not declare its own boundaries is harder to trust than one that does.
I work at Zipline.io, an AI-enabled compliance platform used by aged care providers, as the technical point of contact for six provider customers. Issues arrive through Intercom as customer-facing symptoms. I investigate the underlying problem, translate it into a technical finding, and escalate what is actionable to engineering.
I also configure, tune, test and validate AI document-analysis workflows across more than 1,000 aged care compliance documents, working with quality and compliance documentation in an audit-exposed environment.
That work gave me the domain, but it is upstream of reporting. This project was built to demonstrate the reporting layer itself: the modelling, the measures, the governance logic and the judgement about when a number deserves attention.