Leveranse

Styrings-BI for økonomi og drift

Analyseavdelingen hadde fire medarbeidere da vi fikk et bredt oppdrag: å bygge et styrings-BI fra bunnen av for økonomi, aktivitet, bemanning og sykefravær. Jeg utformet nesten hele modellen bak rapportene. Kolleger ledet innhold og visuell utforming. Jeg var eier fra om lag august 2025 til avviklingen rundt februar 2026, med ansvar for månedlige oppdateringer og forbedringer etter brukertester.

Min rolle

#
Mitt arbeid
Jeg utformet nesten hele den semantiske modellen, altså modellen bak rapportene, og utviklet mesteparten av datatransformasjonene i Power Query og om lag 80 til 90 prosent av DAX-beregningene. Jeg valgte stjerneskjema etter å ha vurdert alternativer, og hadde hovedansvaret for teknisk feilsøking.
Samarbeidet
Kolleger ledet innholdsutvalg, visuell utforming og presentasjon, og bygde deler av rapporten etter teknisk veiledning fra meg. Jeg bidro til navigasjon, verktøytips og rapportstruktur.

Brukt i drift til rundt februar 2026, da nye rapporter dekket behovet.

Mer om status
Bruk
Brukt i drift i om lag halvannet år. Dashbordet var aldri ment å være permanent, fordi BI er en annen avdelings ansvar. Høsten 2025 hjalp jeg den avdelingen med Power BI. Da de nye rapportene deres dekket behovet, ble dashbordet tatt ned for å beholde én felles kilde for tallene.

Fire fagområder med ulike datagrunnlag

#

Fagområdene måler forskjellige ting. Et regnskapsbeløp, et aktivitetsmål, et bemanningsvolum og en fraværsprosent kan dele organisasjon og tid uten å ha samme datakorn, altså hva én rad står for, eller samme beregningsregel. Modellen måtte bevare disse forskjellene.

Kildene og oppdateringsveiene gjorde den månedlige driften krevende. Et tall måtte knyttes til perioden det faktisk beskrev. Jeg arbeidet med kalenderlogikk, organisasjonshierarkier og sammenstilling av historiske og gjeldende strukturer, slik at et felles utvalg ikke ga inntrykk av at alle områdene var like ferske.

Oppdraget var bredt og lite spesifisert. Det måtte bli en modell kollegene kunne bygge rapporter på og ledere kunne bruke. Modellstørrelse, vedlikehold og nye ønsker konkurrerte om det samme utviklingsrommet. Da modellens grenser ga leveranserisiko, skilte jeg en større modernisering av modellen fra løpende utvidelser.

Organisasjon og tid

Felles utvalg med tydelige nøkler og perioder.

Økonomi

Avvik og akkumulerte verdier.

Aktivitet og DRG

DRG-prestasjon.

Bemanning

Eget datakorn og egne beregninger.

Sykefravær

Teller og tilhørende grunnlag.

Forenklet prinsipp for modellen. Ikke originalmodellen.

Modell, beregninger og brukerbehov

#

Dele dimensjoner, bevare datakorn

#

De fire fagområdene skulle svare på de samme organisatoriske utvalgene, mens hver beregning måtte beholde sin egen definisjon.

Jeg utformet modellen med felles dimensjoner for organisasjon og tid og egne faktatabeller per fagområde. Etter å ha vurdert snøflakmønstre valgte jeg stjerneskjema som hovedmønster, fordi det passer Power BI og er lettere å vedlikeholde. Jeg pekte også ut overflødige beskrivende felt i faktatabellene og strammet inn skillet mellom fakta og dimensjoner.

Et tydelig skille mellom fakta og dimensjoner gjør det mulig å dele organisasjon og tid uten å blande måleenheter eller radnivåer. Et snøflakskjema ville lagt flere oppslag mellom dimensjonene og flyttet kompleksitet til relasjoner og filterveier.

Hvert fagområde trengte fortsatt egne beregninger og kontroller.

Definere grunnlaget før prosenten

#

Sykefravær skulle kunne sammenlignes mellom utvalg av ulik størrelse. Et gjennomsnitt av enhetsprosenter gir små og store enheter lik vekt.

Jeg arbeidet med eksplisitt nevnerlogikk, altså hvilket grunnlag prosenten regnes av, og konsekvente avgrensninger for prosentmålene i DAX.

Teller og grunnlag må gjelde samme utvalg. Da følger vektingen grunnlaget bak tallene, og prosenten kan forklares helt ned til beregningen. Et enkelt gjennomsnitt av enhetsprosenter svarer på et annet spørsmål: hvordan enhetene gjør det i snitt, ikke hvor stort fraværet er i hele utvalget.

Nevneren blir en faglig definisjon som må forvaltes sammen med målet.

Forbedre det brukerne faktisk møtte

#

Jeg gjennomførte veiledede tester med faktiske brukere, observerte hvor de ble usikre og samlet tilbakemeldinger.

Tilbakemeldingene styrte de målrettede forbedringsrundene, som jeg kjørte i tillegg til de månedlige oppdateringene.

Kilder og grenser

#

Modellen, DAX-koden og rapportene er ikke publisert.

  • Diagrammet og regneeksemplet er laget for denne siden. Tallene er fiktive og sier ingenting om sykehusets økonomi eller fravær.

Teknisk grunnlag

#
Hva en felles filterkontekst må bevare

Datakorn beskriver hva én rad står for. Før en relasjon brukes, må både nøkkelen og radnivået være forstått. Hvis en organisatorisk enhet kobles til flere historiske versjoner uten en entydig tidsregel, kan et tilsynelatende enkelt utvalg gi feil summer.

En semantisk modell gir tabeller og beregninger en felles faglig betydning. Her var organisasjon, perioder og avgrensninger sentrale. Jeg utviklet og feilsøkte logikken for avvik, forholdstall, akkumulerte verdier, hittil i år og DRG-prestasjon på tvers av fagområdene.

Den inspiserte modellen har 21 tabeller, 20 relasjoner og 204 DAX-mål med innhold. Tallene beskriver omfanget av modellen, ikke kvalitet eller effekt.

Vektet prosent og manglende grunnlag

I en samlet prosent summeres teller og grunnlag før divisjonen. Et enkelt gjennomsnitt av enhetsprosenter gir enhetene lik vekt, selv om grunnlagene deres er forskjellige. Begge regnemåtene kan være meningsfulle, men de beskriver ulike størrelser.

I det fiktive eksemplet må hver rad ha et kjent, ikke-negativt grunnlag og en kjent teller innenfor dette grunnlaget. Manglende verdier kan ikke erstattes med null. Når samlet grunnlag er null, finnes det ingen prosent å vise.

Nyskrevet eksempel. Viser mønsteret, ikke originalkoden.

function samletAndel(rader) {
  let teller = 0;
  let grunnlag = 0;
  for (const rad of rader) {
    if (!Number.isFinite(rad.teller) || !Number.isFinite(rad.grunnlag)) {
      throw new Error("Teller eller grunnlag mangler.");
    }
    if (rad.grunnlag < 0 || rad.teller < 0 || rad.teller > rad.grunnlag) {
      throw new Error("Verdiene beskriver ikke et gyldig grunnlag.");
    }
    teller += rad.teller;
    grunnlag += rad.grunnlag;
  }
  return grunnlag === 0 ? null : teller / grunnlag;
}

Periode og beregningsgrunnlag

Dette viser avvik, bemanning og vektet sykefravær i et fiktivt datasett med to enheter og ulik oppdateringstid.

Syntetisk illustrasjon. Kjører ikke originalsystemet.

Uten fungerende JavaScript vises det faste eksemplet. Valg i lenken beregnes ikke.

Økonomiavvik

Valgt periode: 2025-01 til 2025-12. Siste tilgjengelige måned: 2025-12. Avvik i perioden: 48 000 kr.

Manglende tall vises som «Mangler». Avvik er budsjett minus faktisk. Et positivt avvik betyr at faktisk beløp er lavere enn budsjettert.

Økonomiavvik
MånedFaktiskBudsjettAvvik
2025-01190 000 kr198 000 kr8 000 kr
2025-02202 000 kr198 000 kr−4 000 kr
2025-03186 000 kr198 000 kr12 000 kr
2025-04198 000 kr198 000 kr0 kr
2025-05190 000 kr198 000 kr8 000 kr
2025-06202 000 kr198 000 kr−4 000 kr
2025-07186 000 kr198 000 kr12 000 kr
2025-08198 000 kr198 000 kr0 kr
2025-09190 000 kr198 000 kr8 000 kr
2025-10202 000 kr198 000 kr−4 000 kr
2025-11186 000 kr198 000 kr12 000 kr
2025-12198 000 kr198 000 kr0 kr

Spørsmål

#

Finn

Velg tema