Ryhmittele BI-tieto dimensioihin

Jos tieto on järjestyksessä, löytää helposti etsimänsä. Kun menen kirjastoon etsimään uusia kiinnostavia talouskirjoja, kävelen liiketalouden hyllylle 69. Minun ei tarvitse tutkia kaikkia hyllyjä, koska kirjaston luokitusjärjestelmän takia samankaltainen tieto on ryhmitelty samaan paikkaan. Mielestäni yritysten tulisi pyrkiä kirjaston kaltaiseen kurinalaisuuteen tiedonjärjestelyssä. Kirjastojen YKL-järjestelmän sijaan tarvitsemme toisenlaisen yritysdatalle sopivan järjestelmän, joista esittelen Ralph Kimballin dimensiomallinnuksen.

Miltä dimensio näyttää?

Kirjaston hyllyjen ja luokkien sijaan tietovaraston ylläpitäjä ryhmittelee datan dimensioihin, joissa on yhden aihepiirin tietoa. Esimerkiksi asiakastieto kerätään asiakasdimensioon, johon on listattu kaikki perustiedot asiakkaasta.

AsiakasavainAsiakastunnisteAsiakasnimiOsoiteAsiakasluokka
1101AOsmo OstajaOstokuja 3A
2103FPauli PihiSaitakatu 1C
3104ATaru TarkkamarkkaTilitie 2B

Tietovaraston tiedonsiirto-ohjelma hakee päivittäin myyntijärjestelmästä uudet asiakastiedot ja siirtää ne asiakasdimensioon. Sarake asiakastunniste on myyntijärjestelmän luoma yksilöivä tunniste asiakkaalle ja asiakasluokka on myyntitiimin ideoima luokittelu, joka kertoo asiakkaan ostokäyttäytymisestä.

Asiakasavain on poikkeuksellinen sarake, sillä tietovaraston ylläpitäjä on luonut sen pelkästään raportoinnin tarkoituksiin. Pohjimmiltaan sillä on sama tarkoitus kuin asiakastunnisteella, mutta se tarjoaa muutaman edun verrattuna myyntijärjestelmän tunnisteeseen, jotka esitän myöhemmin. Avain on yhdistävä tekijä, jolla asiakastiedon saa linkitettyä esimerkiksi laskutustietoihin. Kun laskutustietoja sisältävässä faktataulussa viitataan asiakkaaseen avainarvolla 1, tiedämme heti, että kyse on Osmo Ostajasta ja asiakasluokasta A, ilman että joudumme kirjoittamaan kaikkia asiakastiedon sarakkeita faktataulun riville.

Miten dimensioviittaus käytännössä toimii?

Ilman dimensiomallinnusta ja -viittausta keräisimme kaiken mahdollisen tiedon yhteen tauluun. Jos tutkisimme laskutustietoa, meillä olisi yksi rivi jokaista laskua kohden ja sarakkeista näkisimme, kuka on ostoksen tehnyt ja millä hinnalla.

LaskunumeroAsiakastunnisteAsiakasnimiOsoiteAsiakasluokkaSumma
1001101AOsmo OstajaOstokatu 3A150
1002101AOsmo OstajaOstokatu 3A120
1003101AOsmo OstajaOstokatu 3A190
1004103FPauli PihiSaitakatu 1C50
1005103FPauli PihiSaitakatu 1C40

Yllä oleva datataulukko on Excel-taulukointiohjelman taitajalle helppo ymmärtää ja muokata. Meillä on kaikki tarvittava tieto yhdessä paikassa. Vaikka malli vaikuttaa ensisilmäyksellä hyvältä, on siinä puutteita, jotka hankaloittavat BI-raportointia:

  • kun sarakkeita on paljon, taulukosta tulee iso ja raporteista hitaita
  • kun asiakastieto muuttuu, pitää muutos korjata useille laskuriveille
  • kun aloitamme uuden BI-projektin, joudumme aloittamaan tyhjästä

Dimensioiden avulla pystymme välttämään yllä mainitut ongelmat. Sen sijaan, että kirjoittaisimme kaikki asiakastiedot jokaiselle laskuriville, viittaamme asiakkaaseen pelkällä avaimella. Laskuriviltä näemme silloin, että lasku liittyy asiakasavaimeen 1, ja asiakasdimensiosta näemme, että asiakasavain 1 liittyy asiakkaaseen Osmo Ostaja.

LaskunumeroAsiakasavainSumma
10011150
10021120
10031190
1004250
1005240

Eikö ole vaivalloista selvittää, mihin asiakkaaseen avain viittaa? Olisi, jos yhdistely olisi ihmisen vastuulla. Onneksi tietokannat ovat erinomaisia tämän tyylisissä yhdistelytöissä, eikä yhdistelyvaihetta näytetä raportin luojille tai käyttäjille. Jos Power BI -työkalun käyttäjä haluaa asiakkaan nimen näkyviin, riittää että hän raahaa asiakasnimikentän raportille. Tietokanta tekee yhdistelyn, eli tietokantaliitoksen, kulissien takana, jolloin käyttäjä saa dimensiomallinnuksen hyödyt mutta ei haittoja.

Tyyppi 1: Mitä jos asiakkaan sukunimi muuttuu?

Asiakkaamme Osmo Ostaja on mennyt naimisiin ja vaihtanut sukunimensä Tuhlariksi. Jos käytössämme olisi yhden taulun malli, joutuisimme etsimään kaikki laskurivit, jotka liittyvät Osmoon, ja muuttaisimme niissä sukunimen. Tämä ei ole iso työ, jos laskutustaulu on pieni, mutta laskutustaulu voi olla miljoonien rivien kokoinen. Voimme joutua korjaamaan tuhansia rivejä yhden nimimuutoksen takia.

Jos taas hallinnoimme asiakastietoa asiakasdimensiossa, riittää että korjaamme tiedon yhteen paikkaan. Etsimme asiakasdimensiosta oikean rivin ja muutamme asiakasnimeksi Osmo Tuhlari. Meidän ei tarvitse koskea laskuriveille ollenkaan, sillä avaimet viittaavat asiakasdimensioon, joka on jo ajan tasalla.

Dimensiomallinnuksen termein kyse on tyypin 1 muutoksesta, eli ylikirjoitamme vanhan arvon uudella. Tyypin 1 muutos on yleisin käytetty dimensiomallinnuksen muutos.

Tyyppi 2: Mitä jos asiakas muuttaa uuteen osoitteeseen?

Pauli Pihi on muuttanut uuteen edulliseen asuntoon Itaratielle. Asiakastieto on muuttunut, mutta mihin tieto tulisi korjata? Emme halua muuttaa vanhoilla laskuilla olevia osoitteita, sillä ne olivat myyntihetkellä oikeita toimitusosoitteita. Uuden osoitteen tulisi näkyä vain uusilla laskuilla.

LaskunumeroAsiakastunnisteAsiakasnimiOsoiteAsiakasluokkaSumma
1004103FPauli PihiSaitakatu 1C50
1005103FPauli PihiSaitakatu 1C40
1006103FPauli PihiItaratie 2C30

Yllä olevassa yhden taulun mallissa muutos onnistuu helposti. Tilanne monimutkaistuu, kun käytämme asiakasdimensioita. Jos korvaisimme asiakasdimensiossa olevan vanhan osoitteen uudella, laskurivit viittaisivat edelleen oikeaan asiakkaaseen, mutta meillä ei olisi enää tietoa vanhasta osoitteesta. Silloin näyttäisi siltä, että vanhatkin toimitukset ovat menneet uuteen osoitteeseen.

Jotta asiakasdimensiossa olisi tieto sekä uudesta ja vanhasta osoitteesta, joudumme käyttämään toisenlaista muutostapaa eli tyyppiä 2. Sen sijaan, että korvaisimme vanhan tiedon uudelle, lisäämmekin kokonaan uuden asiakasrivin ja voimassaolon ajanjaksot.

AvainTunnisteAsiakasnimiOsoiteLuokkaAlkaaPäättyy
1101AOsmo OstajaOstokuja 3A2010-01-019999-12-31
2103FPauli PihiSaitakatu 1C2010-01-012019-08-31
3104ATaru TarkkamarkkaTilitie 2B2010-01-019999-12-31
4103FPauli PihiItaratie 2C2019-09-019999-12-31

Nyt meillä on kaksi riviä Paulille, joista ensimmäinen on voimassa aikavälillä 1.1.2010 - 31.8.2019 ja toinen 1.9.2019 - 31.12.9999. Vuosi 9999 on keinotekoinen päiväys, jolla kerromme, että rivi on voimassa toistaiseksi. Jos Pauli muuttaisi joulukuussa uudelleen, lisäisimme uuden rivin ja muuttaisimme rivin 4 päättymispäiväksi 31.12.2019.

Laskutustaulussa viittaisimme Pauliin kahdella eri avaimella. Avain 2 viittaisi vanhaan osoitteeseen ja avain 4 uuteen.

LaskunumeroAsiakasavainSumma
1004250
1005240
1006430

Vaikka loimme samalle asiakkaalle kaksi eri riviä, meillä ei ole raporteilla kuitenkaan kahta eri Paulia. Jos Power BI:n käyttäjä raahaa asiakasnimen raporttitauluun, hän näkee edelleen yhden asiakasnimen. Jos hän olisi raahannut osoitteen, näkyisi raporttitaulussa uusi ja vanha osoite.

Dimensioiden muutosten hallinta

Esittelin yllä kaksi yleistä tapaa, joilla dimensioiden muutoksia hallitaan. Jos BI-kehittäjä ymmärtää nämä kaksi muutostyyppiä, selviää hän kehitystyössä todella pitkälle. Voisin esittää asian myös rajummin, eli jos näitä kahta muutostyyppiä ei hallitse, ei pysty hoitamaan business intelligence -asiantuntijan tehtäviä kunniallisesti.

Muutostyyppejä on muitakin ja tarkka määrä vaihtelee vastaajan mukaan. Dimensiomallinnuksen johtohahmo Ralph Kimball listaa dimensiomallinnusta käsittelevässä kirjassaan1 kahdeksan erilaista muutostyyppiä:

TyyppiSäilytettävä arvoToteutus
0Vain alkuperäinen arvoEi muutosta
1Nykyinen arvoYlikirjoita dimension kenttä
2Historiallinen arvoLisää dimensioon uusi rivi
3Nykyinen ja edeltävä arvoLisää dimensioon uusi sarake
4Historiallinen arvoViittaa faktataulussa minidimensioon
5Historiallinen ja uusin arvoViittaa faktataulussa ja dimensiossa minidimensioon
6Historiallinen ja uusin arvoLisää dimensioon uusi rivi ja sarake
7Historiallinen ja uusin arvoViittaa faktataulussa historialliseen ja nykyiseen dimensioon

Käytännössä tyypit 0–3 ovat riittäviä lähes kaikkiin BI-projekteihin, sillä niiden avulla mallintaja selviää tyypillisistä muutosongelmista. Tyyppi 4 auttaa tilanteissa, joissa dimension arvo muuttuu jatkuvasti ja tyypin 2 muutos synnyttäisi liikaa uusia rivejä. Tyypit 5–7 ovat hybridimalleja eli yhdistelmiä aiemmista muutostyypeistä.

Suosittelen Kimballin teoksia kaikille dimensiomallinnuksesta kiinnostuneille, sillä hitaasti muuttuvat dimensiot on taiteenala, johon BI-kehittäjien täytyy syventyä.


  1. Kimball & Ross (2013) The Data Warehouse Toolkit - The Definitive Guide to Dimensional Modeling. Wiley. ↩︎

Avatar
Mikko Harhanen
Business Intelligence Specialist

Kauppatieteiden maisteri, liiketoiminnan analyytikko.

Liittyy