Artikkelista on sinulle hyötyä, jos nauhoitat tai koodaat Excel-makroja, joiden pitää pystyä käsittelemään kooltaan muuttuvia dynaamisia luetteloita. Jutussa oletetaan, että tunnet Excel-taulukoiden (tables) perusperiaatteet ja osaat nauhoittaa sekä muokata makroja Visual Basic Editorissa.
Jos kaipaat lisätietoja taulukoista (tables), tutustu aiempaan 5 syytä muuntaa taulukoksi -juttuuni. Jos puolestaan tarvitset makrojen nauhoitukseen ja VBA:kieleen liittyviä perusohjeita, löydät niitä esimerkiksi Aki Taanilan mainioilta Olennaiset Excel-taidot -blogin VBA-sivuilta.
Dynaamisten aineistojen ongelma
Jos olet nauhoittanut makroja, tunnistat varmasti ongelman joka liittyy tavallisiin alueviittauksiin. Mikäli koodissasi on käytetty alueita tai soluja (kuten B2:B7 tai H5), viittaukset eivät muutu vaikka laskentataulukko muuttuisi. Pahimmillaan saatat joutua muokkaamaan koodistasi kymmeniä lauseita, jos lisäät laskentataulukkoon yhden rivin tai siirrät lukuja toiseen sarakkeeseen. Lisäksi jokainen muutos voi aiheuttaa kirjoitusvirheitä, joten makrot pitää testata jokaisen muutosten jälkeen.
Nämä koodissa olevat alueet eivät muutu, vaikka laskentataulukko muuttuisi:
Tai antamalla alueille nimet ja käyttämällä niitä koodissa (mutta miten huomioidaan alueiden kasvaminen, jos tietoja lisätään esimerkiksi nimettyjen alueiden alapuolelle):
Tai erilaisilla melko haastavilla dynaamisilla tekniikoilla, joista monet vaativat erinomaista VBA-taitoa.
Ratkaisuna taulukot ja jäsennetyt alueviittaukset
Tämäkään tekniikka ei ratkaise kaikkia ongelmia, mutta helpottaa monien makrojen toteutusta ja ylläpitoa.
Oletetaan, että makrojesi pitää pystyä käsittelemään luetteloa, johon tulee lisää tai siitä poistuu rivejä tai joka kokonaisuudessaan päivittyy säännöllisesti. Excel 2007 -versiota vanhemmissa versioissa tällaisten makrojen nauhoittaminen ja koodaaminen vaati erityisosaamista ja usein melko haastavaakin VBA-koodia. Nykyversioissa voit muuntaa luettelon taulukoksi ja antaa taulukolle nimen, jonka jälkeen voit viitata taulukon taulukon erilaisiin alueisiin ns. jäsennettyjen viittausten avulla (structured references).
Käytän esimerkissäni hyvin yksinkertaista taulukkoa, jonka nimeksi on annettu Lukemat ja jossa on mm. Summa-rivi (Total Row). Esimerkissä ei sinänsä tehdä mitään mullistavaa, tarkoituksena on ainoastaan esitellä taulukkoviittaukset.
Taulukko täytetään päivittäin ja jokaisen päivän päätteeksi makro kopioi tiedot kahteen eri luetteloon:
Rivit kopioidaan Lukemahistoria -nimisen taulukon jatkeeksi.
Summarivin arvot kopioidaan Päiväsummat -nimisen luettelon jatkeeksi.
Lisäksi Lukemat-luettelosta tyhjennetään rivit seuraavan päivän tietojen syöttöä varten.
Esimerkkimakro
Esimerkkimakro toimii vaikka taulukot siirretään tai niiden rivimäärä vaihtelee. Jäsennetyt punaiselle merkityt viittaukset edellyttävät, että taulukoiden nimet ja otsikot säilyvät samoina. Osa esimerkkikoodin lauseista edellyttää myös, että sarakkeiden järjestys ei muutu.
Huomaa, että tässä makrossa ei ole mitään virheentarkistus- tai muita tarpeellisia rakenteita! Tarkoituksena on ainoastaan esitellä muutama esimerkki taulukkoviittauksista.
’ Kopioidaan Lukemat-taulun datarivit leikepöydälle (ei otsikko- ja summariviä)
Range(”Lukemat[#Data]”).Copy
’ Siirrytään Koodi-sarakkeessa aineiston alapuolelle ja liitettään kopioidut tiedot
ActiveCell.Offset(Range(”Lukemahistoria”).Rows.Count + 1, 0).Select
ActiveSheet.Paste ’ Valitaan Lukemahistoria-taulukosta lopulta Koodi-otsikkosolu
Range(”Lukemahistoria[[#Headers],[Koodi]]”).Select
’ Kopioidaan leikepöydälle Lukemat-taulun summarivin alue [Pvm]:[Lukema C]
Range(”Lukemat[[#Totals],[Pvm]:[Lukema C]]”).Copy
’ Siirrytään Päiväsummat-taulukon Pvm-sarakkeen alapuolelle ja liitetään kaavojen arvot
Application.Goto reference:=”Päiväsummat[[#Headers],[Pvm]]”
ActiveCell.Offset(Range(”Päiväsummat”).Rows.Count + 1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues ’ Valitaan Päiväsummat-taulukosta lopulta Pvm-otsikkosolu
Range(”Päiväsummat[[#Headers],[Pvm]]”).Select
’ Valitaan Koodi-otsikko ja muutetaan taulukon koko 2-riviseksi
Application.Goto reference:=”Lukemat[[#Headers],[Koodi]]”
ActiveSheet.ListObjects(”Lukemat”).Resize ActiveCell.Offset(0, 0).Range(”A1:F2”)
Lataa esimerkki oikean alakulman Excel-painikkeella:
Jäsennettyjä viittauksia selityksineen:
Koko Lukemat-taulukkoon viittaaminen
Range(”Lukemat[#All]”)
Taulukon dataan viittaaminen (ilman otsikoita tai summariviä)
Range(”Lukemat[#Data]”) taiRange(”Lukemat”)
Esimerkiksi lauseke
Range(”Lukemat[#Data]”).Rows.Count
palauttaa tuloksena Lukemat-taulukon datarivien lukumäärän
Otsikkoriviin viittaaminen
Range(”Lukemat[#Headers]”)
Pvm-otsikkoon viittaaminen
Range(”Lukemat[[#Headers],[Pvm]]”)
Summariviin viittaaminen
Range(”Lukemat[#Totals]”)
Pvm-sarakkeeseen viittaaminen
Range(”Lukemat[Pvm]”)
Lukemat-taulukon Lukema A – Lukema C –sarakkeiden valitseminen
Minulta pyydettiin Näppärästä Excel-lomakalenterista uutta versiota, johon loman voisi syöttää useampana jaksona samalle riville. Nyt oli sopiva hetki ja sain tehtyä kalenterista myös yksirivisen version. Uudistetussa lomakalenterissa poissaolon voi pilkkoa viiteen eri jaksoon.
Lomajaksot vievät näytöllä paljon tilaa, joten saat ne piiloon Excel-taulukon yllä olevalla miinus-painikkeella ja vastaavasti esiin plussalla.
Voit edelleenkin käyttää 2013 –versiossa osittajia ja suodattaa 2010 –versiossa kalenteriluetteloa suodatusnuolten avulla. Tässä versiossa ei ole kuukausittaisia pivot-yhteenvetotaulukoita, sillä lomapäivien lukumäärät voivat nyt muodostua useista eri jaksoista, jotka sijoittuvat useiden eri kuukausien ajalle, joten edellisen version kaltaisten kuukausittaisten yhteenvetojen tekeminen vaatisi pivot-taulukoiden lisäksi runsaasti erilaisia apukaavoja. Muutamia yhteenvetoja löydät edelleenkin Yhteenveto-taulukosta ja voit sekä muokata että tehdä niitä itse lisää.
Löydät muita HExcelligent-työkaluja Työkalut-sivulta.
PS. Kun tein kalenterin maaliskuussa, en lainkaan osannut kuvitella sen suosiota! Viidessä kuukaudessa kalenterijuttua ja käyttöohjetta on luettu jo yli 4300 kertaa ja lähes 1500 lukijaa on myös ladannut kalenterin itselleen. Eipä tullut tehtyä turhaan. Lomakalenteri poiki myös muutamia työkeikkoja ja olen toteuttanut kalenterista erilaisia makroilla höystettyjä variaatioita mm. projektien vaiheiden sekä markkinointitoimenpiteiden kuvaamiseen. Ota yhteyttä (heidi.enho(at)onsight.fi), niin annan työaika- ja hinta-arvion, jos kaipaat jotain vastaavaa.
PS PS. Aivan mainiota, kun kalenterille löytyy käyttöä. Ilahduttaa kovasti, joten twiitit saattava päätyä blogiin: :)
Luin yläasteella erittäin lyhyen saksan ja syystä että en päässyt sitä koskaan treenaamaan, opin ulkoa vain muutaman merkityksettömän virkkeen. Kuten reittiohjeen: ”Gehen Sie diese Straße entlang und die erste Querstraße rechts und dann links und Sie sind da.”
Vitsikästä sinänsä, että sain kerran jopa hyödyntää täsmäosaamistani, kun saksankielinen turistipariskunta kysyi Helsingissä Sokoksen nurkalta reittiä Kauppatorille. Kykenin sopivasti sijoittamaan rechtsin ja linksin oikeisiin kohtiin ja ersten lisäksi muistin zweiterin. Seuraavaan heidän kysymykseensä – jota en lainkaan ymmärtänyt – saatoin käyttää toista oppimaani virkettä: ”Ich kann kein Deutch.” Eivät siis menneet nekään saksan tunnit hukkaan: olin saanut hyödyntää lähes 100 % saksan taidoistani.
Määränpään eli alueen kuvaaminen Excelissä
Excelissä voi kuvata reitin haluttuun osoitteeseen/alueeseen OFFSET (SIIRTYMÄ) –funktion avulla ja tästä täsmätiedosta on ollut minulle huomattavasti useammin hyötyä. Pelkän reitin lisäksi funktiolla määritetään myös määränpään koko eli korkeus ja leveys. Funktio siis kuvaa halutun etäisyyden päässä olevan halutun kokoisen alueen. Funktiolla saa hienoja juttuja aikaan erityisesti erilaisiin hakufunktioihin ja kaavioihin yhdistettynä.
Funktiolle annetaan seuraavat argumentit:
=OFFSET(solu josta aloitetaan; siirtymärivien lkm; siirtymäsarakkeiden lkm; korkeus riveinä; leveys sarakkeina)
Seuraava esimerkkifunktio antaa tuloksena alueen, joka on A5-solusta lähtien kolme riviä alempana ja 1 sarake oikealla ja alue on 1 riviä korkea sekä 6 saraketta leveä.
=OFFSET(A5; 3; 1; 1; 6)
=SIIRTYMÄ(A5; 3; 1; 1; 6)
Jos funktiossa käytetään negatiivisia rivi- ja sarakesiirtymiä, suunta on ylös ja vasemmalle. Funktiosta ei sellaisenaan ole mitään iloa, ja se antaakin virheilmoituksen soluun kirjoitettuna. Kaava antaa tuloksena alueen, joten aluetta voi käyttää hyödyksi muiden funktioiden yhteydessä.
Esimerkiksi =SUM(OFFSET(A5; 3; 1; 1; 6)) [=SUMMA(SIIRTYMÄ(A5; 3; 1; 1; 6))] laskee alueen luvut yhteen. Noh, eipä kaavasta ole tässäkään muodossa mitään iloa, sillä luvuthan voi laskea yhteen yksinkertaisesti kaavalla =SUM(B8:G8).
Todennäköisesti oletkin jo tähän mennessä arvannut jujun. OFFSET-funktiota käytetään tilanteissa, joissa halutaan muodostaa dynaamisesti sijainniltaan ja/tai kooltaan muuttuvia alueita esimerkiksi sen perusteella, mitä käyttäjä on syöttänyt.
Seuraavassa esimerkkitaulukossa lasketaan summa soluun D3 solujen D1 (tuote) ja D2 (laskettavien kuukausien lukumäärä) perusteella.
Solussa D3 on kaava: =SUM(OFFSET(A5; F1; 1; 1; D2))
solussa F1 on apukaavana MATCH (VASTINE) -funktio, joka tutkii monennelta riviltä syötetty tuote löytyy, jotta OFFSET osaa siirtyä halutun määrän rivejä alas:
=MATCH(D1; A6:A15; 0)
Kokeile upotetussa taulukossa:
MATCH (VASTINE) -funktion voi mainiosti sijoittaa yhteenlaskukaavaan osoitteen F1 tilalle: =SUM(OFFSET(A5; MATCH(D1; A6:A15; 0); 1; 1; D2), jotta erillistä apukaavasolua ei tarvita.
Edellisessä Kohdealueen kuvaaminen Excelissä –jutussa kerroin miten voit määrittää alueen sijainnin ja koon dynaamisesti OFFSET (SIIRTYMÄ) -funktiolla. Entä jos laskemisen lisäksi kaavion lähdealueen pitäisi muuttua?
Kerron tässä jutussa miten saat aikaan kaavion, joka näyttää halutun tuotteen myyntikäyrän halutulta aikajaksolta. Tämä pitää tehdä kiertoteitse aluenimen avulla, sillä Excelissä ei voi käyttää kaavaa kaavion lähdealueena.
Kokeile ensin alla olevassa esimerkkitaulukossa tuotenimen ja kuukausien lukumäärän muuttamista:
Kaavion ja dynaamisen aluenimen luonti
Muodosta ensin mallikaavio esimerkiksi ensimmäisestä tuoterivistä (kuvan kaavio on luotu alueesta A13:G14).
Jos olet muodostanut kaavan, joka laskee halutun alueen luvut yhteen, kopioi kaavasta talteen OFFSET-funktio. Tulet tarvitsemaan funktiota hetken kuluttua.
Luo aluenimi, joka muodostuu kyseisen OFFSET-funktion avulla. Määrität aluenimen komennolla Formulas > Defined Names > Define Name > Define Name (Kaavat > Määritetyt nimet > Määritä nimi > Määritä nimi). Syötä alueelle nimi, jossa ei saa olla välilyöntejä ja kirjoita Refers to (Viittaus) –kenttään yhtäsuuruusmerkki ja liitä kopioimasi OFFSET-funktio kenttään. Muuta funktion kaikki soluviittaukset absoluuttisiksi, kuten $A$13. Kopioi aluenimi leikepöydälle, sillä tulet tarvitsemaan sitä hetken kuluttua. Hyväksy OK:lla.
(Tässä on hyvä paikka sellaiselle pikkuvinkille, että punaisella nuolisymbolilla varustetuissa Excel-kentissä nuolinäppäimillä siirtyminenhän aiheuttaa ikävästi soluosoitteiden ilmestymistä kenttään. Jos siis aiot siirtyä nuolinäppäimillä Refers to –kentän sisällä, paina ensin F2, jottei kentän sisältö mene sekaisin.)
Nimen kytkeminen kaavion arvosarjaan
Valitse arvosarjan eli viivan päältä pikavalikosta Select Data (Valitse tiedot).
Valitse vielä Edit (Muokkaa).
Määritä, että sarjan nimi tulee solusta, johon käyttäjä syöttää tuotteen ja että sarjan arvot määräytyvät juuri luomasi aluenimen (eli OFFSET-funktion) perusteella. Älä poista kummastakaan kentästä taulukon nimeä ja huutomerkkiä.
Kaavio toimii, jos funktio on kunnossa absoluuttisine viittauksineen. Jos syötät taulukkoon kuukausien lukumääräksi 0, saat virheilmoituksen, sillä alue ei voi olla 0 saraketta leveä. Vaikka syöttäisit uuden sallitun luvun, kaavio ei heti päivity, vaan sinun pitää painaa F9, joka suorittaa kaavojen uudelleenlaskennan. Jutun alussa olevaan esimerkkitaulukkoon on luotu kelpoisuustarkistus (validation), ja soluun voi syöttää vain arvoja välillä 1 – 6.
Ping kaikki Excel-kouluttajat ympäri Suomen maan. Excel 2013 -versiossa on uusi funktio, josta on hyötyä jokaiselle Excelistä koulutusmateriaaleja ja ohjeita tekevälle. Funktion avulla saat samaan kuvaruutukaappaukseen helposti sekä kaavojen tulokset että esimerkkikaavat.
FORMULATEXT (KAAVA.TEKSTI) -funktio palauttaa kaavan tekstinä:
Muita ideoita
Tiettyjen kaavojen korostaminen
Nyt kaavaa voi siis myös tutkia merkkijonona. Taulukosta voi esimerkiksi korostaa ehdollisella muotoilulla ne solut, jotka sisältävät [ -merkin, eli viittaavat johonkin toiseen taulukkoon. Muotoilun saa aikaan valitsemalla taulukosta A1-alkavan alueen ja komennolla Home > Conditional Formatting > New Rule > Use a formula to determine which cells to format (Aloitus > Ehdollinen muotoilu > Uusi sääntö > Määritä kaavan avulla mitkä solut muotoillaan):
Kirjoitin aiemmin jutun yksilöllisten arvojen laskemisesta Excelissä. Tässä jutussa kerron, miten lasket yksilölliset arvot pivot-taulukossa, jos käytössäsi on joko Excel 2010 tai 2013.
Ensin sinun pitää aktivoida käyttöön Power Pivot ja linkittää aineistosi ns. tietomalliin. Käytän tässä samaa esimerkkiaineistoa kuin edellisessä osassa ja haluan laskea jäsentyypeitäin eri postitoimipaikkojen lukumäärät: ”Miten monesta eri postitoimipaikasta meillä on kannatus- sekä muita jäseniä?”
Esimerkin luettelo on muunnettu taulukoksi (table) ja sille on annettu nimeksi jäsenet.
Taulun linkitys Power Pivotiin
Jotta pivot-taulukossa voi käyttää distinct count yhteenvetofunktiota, taulukko pitää ensin linkittää Power Pivotin puolelle.
Valitse yksi solu taulukon sisältä.
Valitse PowerPivot > Add to Data Model (Lisää tietomalliin). Excel 2010 –versiossa käytetään komentoa Create Linked Table (Luo linkitetty taulukko).
Taulukko linkittyy Power Pivotin tietomalliin ja Power Pivotissa näytetään Linked Table (Linkitetty taulukko) –välilehti, josta löydät linkityn taulun käsittelyyn liittyviä komentoja. Linkitetty taulu päivittyy oletusarvoisesti aina, kun siirryt Excelistä Power Pivotiin, mutta voit muuttaa asetusta. Aloitat Pivot-taulukon luonnin komennolla Home > PivotTable (Aloitus > Pivot-taulukko).
Sijoita jäsentyyppi riviotsikoksi ja postitoimipaikka laskettavaksi tiedoksi. Tässä vaiheessa pivot laskee vielä kaikkien postitoimipaikkojen lukumäärän, ei siis yksilöllisten postitoimipaikkojen määrää. Esimerkiksi Espoo on useita kertoja kannatus-jäsenten lukumäärässä.
Vaihda yhteenvetofunktioksi Distinct Count:
Ja homma on hoidettu! Kannatusjäseniä on kahdesta eri postitoimipaikasta, Espoosta ja Helsingistä.
Siirryt Power Pivotin puolelle PowerPivot-välilehden ensimmäisen painikkeen avulla.
Yllätys, yllätys
Jos käytät Excel 2013 -versiota, voit linkittää taulukon tietomalliin myös Pivot-taulukon luonti-ikkunassa ilman Power Pivot -apuohjelman aktivointia! Excel 2013 -versiossahan tietomalli on sisäänrakennettuna joka tapauksessa. Yleensä tietomallia tosin muokataan ja käsitellään mieluusti Power Pivot -apuohjelman avulla.
Osittajat eli slicerit ovat näppäriä pivot-taulukoiden ja -kaavioiden suodatusvälineitä. Mutta miten osittajasta valitut vaihtoehdot saa Excelin soluihin, jos niitä tarvitaan muissa Excel-kaavoissa tai ne halutaan tulostaa luettelona?
Tässä jutussa on ohje listan muodostamiseen sekä Power Pivotissa että tavallisessa Excelissä.
Kun pivotti on muodostettu Power Pivotin tietomallista
Power Pivotin tietomalli on rakenteeltaan kuutio, joten voit noutaa osittajasta valitut arvot CUBERANKEDMEMBER (KUUTIONLUOKITELTUJÄSEN) -funktiolla.
Alla oleva kaava noutaa osittajasta valitun n:nnen arvon:
Kun kirjoitat funktiota, Excel avustaa näyttämällä yhteyden (connection) nimen, kun olet kirjoittanut ensimmäisen lainausmerkin:
Vastaavasti saat esiin työkirjasi osittajien nimet, kun kirjoitat toisen argumentin alkuun sl-kirjaimet (suomenkielisessä os):
Entä miten saat n:n paikalle juoksevan numeroinnin ja luot riittävän määrän kaavoja arvojen noutamiseen? Voit käyttää hyödyksi ROW (RIVI)-funktiota, joka kertoo soluosoitteen rivin numeron. Esimerkiksi =ROW(A1) antaa tuloksena luvun 1 ja ROW(A2) antaa tulokseksi luvun 2.
Luomalla seuraavan kaavan ja kopioimalla sitä riittävästi alas, saat muodostettua luettelon valituista arvoista.
ROW-funktiota käytetään vain numeroinnin toteutuksessa. Solun A1 arvolla ei ole mitään tekemistä tämän kaavan toiminnan kannalta, joten solu saa sisältää mitä tahansa.
Huomaa: jos lisäät rivin 1 yläpuolelle uusia rivejä, kaavassa oleva osoite A1-osoite muuttuu A2:ksi, joten joudut korjaamaan kaavan rivin lisäämisen jälkeen.
Kun pivotti on muodostettu tavallisesta Excel-luettelosta
Jos pivot-taulukko on tehty tavallisesta Excel-luettelosta tai muusta tietolähteestä, joka ei ole kuutio, valintojen noutamiseen ei ole olemassa valmista funktiota.
Sinun pitää luoda VBA-kielellä funktio ja käyttää kyseistä funktiota valintojen näyttämiseen. Löydät funktion valmiin esimerkkikoodin esimerkiksi täältä: http://www.jkp-ads.com/Articles/slicers05.asp
Ohje funktion lisäämiseen
Siirry VBA-Editorin puolelle Alt+F11 -näppäinyhdistelmällä.
Lisää makromoduuli valitsemalla komento Insert > Module.
Kopioi edellä mainitulta nettisivulta The UDF -otsikon alta löytyvä koodi lisäämääsi koodimoduuliin.
Sulje VBA-Editori ja tallenna työkirja. Huomaa, että tallennuksen yhteydessä pitää valita tallennusmuodoksi .xlsm, jotta koodi tallentuu työkirjaan.
Tämän jälkeen voit käyttää kopioimaasi GetSelectedSlicerItems-funktiota Excelin solussa antamalla funktiolle argumentiksi osittajan nimen (huomaa, että nimi on eri asia kuin osittajan otsikko). Funktio muodostaa pilkulla erotetun listan valituista arvoista.
Tarkistat osittajan nimen pikavalikosta komennolla Slicer Settings (Osittajan asetukset).
Public Function GetSelectedSlicerItems(SlicerName As String) As String
Dim oSc As SlicerCache
Dim oSi As SlicerItem
Dim lCt As Long
On Error Resume Next
Application.Volatile
Set oSc = ThisWorkbook.SlicerCaches(SlicerName)
If Not oSc Is Nothing Then
For Each oSi In oSc.SlicerItems
If oSi.Selected Then
GetSelectedSlicerItems = GetSelectedSlicerItems & oSi.Name & ", "
lCt = lCt + 1
ElseIf oSi.HasData = False Then
lCt = lCt + 1
End If
Next
If Len(GetSelectedSlicerItems) > 0 Then
If lCt = oSc.SlicerItems.Count Then
GetSelectedSlicerItems = "All Items"
Else
GetSelectedSlicerItems = Left(GetSelectedSlicerItems, Len(GetSelectedSlicerItems) - 2)
End If
Else
GetSelectedSlicerItems = "No items selected"
End If
Else
GetSelectedSlicerItems = "No slicer with name '" & SlicerName & "' was found"
End If
End Function
VLOOKUP (PHAKU) on yksi Excelin tunnetuimmista funktioista, mutta silti se kirjoitetaan usein muodossa, joka edellyttää kaavan toistuvaa muokkaamista tai voi johtaa vääriin tuloksiin.
Seuraava funktio hakee solussa B1 olevaa koodia A4:D8-alueelta ja poimii yksikköhinnan alueen neljännestä sarakkeesta antaen tulokseksi luvun 12. Funktiohan antaa täysin oikean tuloksen, joten onko siinä jotain vikaa?
Yllä oleva kaava on tosiaankin täysin oikein, ja se sopii mainiosti tilanteisiin, joissa luetteloon ei tule uusia sarakkeita eikä niitä poisteta.
Mutta entäpä aineistot, joiden rakenteeseen tulee säännöllisesti muutoksia? Mikäli funktion sarakenumeroa ei muuteta, VLOOKUP noutaa tietoja väärästä sarakkeesta. Tällaista virhettä on joskus vaikea havaita, jos numeerisia sarakkeita on kymmenittäin ja VLOOKUP-funktioita on runsaasti.
Sarakenumeron sijaan voi käyttää MATCH (VASTINE) -funktiota, joka kertoo otsikon eli sarakkeen sijainnin. Seuraava kaava etsii alueelta A4:D4 merkkijonoa ”yksikköhinta” ja antaa tuloksena sijainnin. Kolmas argumentti (koodi 0) määrittää, että funktio hakee täsmälleen samaa merkkijonoa.
=MATCH(”yksikköhinta”; A4:D4; 0)
Kun MATCH sijoitetaan VLOOKUP-funktioon sarakenumeron tilalle, VLOOKUP hakee oikean tiedon vaikka Yksikköhinta-sarake siirtyisi kunhan se sijaitsee koodi-sarakkeen oikealla puolella.
=VLOOKUP(B1; A4:D8; MATCH(”yksikköhinta”; A4:D4; 0); FALSE) tai
=VLOOKUP(B1; A4:D8; MATCH(A2; A4:D4; 0); FALSE)
Tämä funktio antaa myös tarkoituksenmukaisesti virheilmoituksen, jos kyseistä sarakeotsikkoa ei löydy.
Jos aineisto on muutettu Data-nimikseksi taulukoksi, funktion voisi kirjoittaa muodossa:
Excelillä saa kyllä laskettua ”yksinkertaisesti” päivämäärien ja kellonaikojen välisiä jaksoja, mutta päivärahojen määräytymiskriteerit vaativat melko monimutkaisia IF-päättelyitä.
Siispä laadin Excel-työkirjan, joka laskee sekä kotimaanpäivärahat että ulkomaanpäivärahat.
Työkirjan Perustiedot-taulukossa ylläpidetään laskentaan vaikuttavia parametreja sekä ulkomaan päivärahataulukkoa.
Perustiedot vaikuttavat päivärahalaskelmiin. Ulkomaan päivärahalaskelmaan voi esimerkiksi valita vain niitä maita ja alueita, jotka on lueteltu perustietovälilehdellä.
Testasin työkirjaa erilaisilla kotimaan- ja ulkomaanmatkoilla, mutta minulta saattoi jäädä huomaamatta jokin poikkeustapaus. Ilmoitathan kommentissa, jos huomaat logiikassa virheitä tai puutteita.
Kiitos Jani kysymyksestä! Nyt tuli viimein tehtyä se, mitä olen tähän asti pyrkinyt/pystynyt välttämään.
Löysin tänään Twitterin avustamana mainion visualisoinnin puolueiden vaalikonevastauksista ja sen innoittamana halusin testata saisiko Excelillä aikaan edes yksinkertaista pikajuoksurata-tyyppistä palkkikaaviota.
Pystysuuntaiseen pylväskaavioonhan onnistuisi helposti yhdistämään viivan. Pylväs olisi juoksurata ja viiva näyttäisi sijainnin juoksuradalla. Kun viivaan valitsisi sopivan symbolin merkiksi ja muotoilisi viivan näkymättömäksi, lopputuloksena olisi juoksurata. Tai pikemminkin pystysuuntainen kiipeilyrata. Käytin aikoinaan Ehdollisessa pylväskaaviossa vastaavaa ideaa kuvaamaan tavoitearvoa.
Mutta vaakasuuntainen palkkikaavio ei ole lainkaan yhtä helppo juttu, sillä palkkikaavioon ei voi yhdistää viivakaaviota. Askartelin siis tämän kaavion kanssa tovin.
Kaavion toteutusidea pääpiirteittäin:
Tein palkkikaavion, jossa oli kaksi arvosarjaa (täyspitkä sarja kuvaamaan juoksurataa ja kannatusprosenttia kuvaava sarja).
Määritin, että palkit peittävät toisensa 100 prosenttisesti (overlap) ja muotoilin prosenttiarvoa kuvaavan sarjan näkymättömäksi.
Toin prosenttiarvosarjaan näkyviin arvopisteiden arvot (data labels), sillä se on ainoa keino saada jonkinlainen merkki siihen kohtaan mihin palkki päättyy. Harmikseni sain todeta, että arvopisteen arvoa ei saa täsmälleen palkin päätepisteeseen, vaan se on aina hieman päätepistettä ennen tai sen jälkeen. Valitsin arvopisteen arvon näkymään palkin päätepisteen jälkeen. Tästä syystä minun piti hieman huijata asteikkoa ja viivoitusta, jotta kaavion ainokainen viiva näyttäisi olevan 50 % kohdalla (tosiasiassa se on 55 kohdalla ja lopulta vaaka-akseli on poistettu, jotta sitä ei huomaa). Valitettavasti asteikkoa pitää hieman säätää aina, kun kaavion tai piirtoalueen kokoa muuttaa. Jouduin käyttämään täyspitkän palkin arvona lukua 105, jotta 100:n kohdalle tarkoitettu merkki näkyisi kaaviossa.
Jotta sain arvopisteiden arvojen tilalle pallot, huijasin muotoilun avulla arvojen tilalle merkin ”l” (pieni ällä) ja muotoilin sen vielä Wingdings-fontilla, jolloin se näyttää pallolta. Käytin mukautettua lukumuotoilukoodia, joka näyttää kyseisen merkin sekä positiiviselle, nollalle, että negatiiviselle luvulle (”l”;”l”;”l”).
Tämän jälkeen tein loput muotoilut, kuten siirsin pystyakselin otsikot oikealle, muotoilin palkit eri väreillä, jne.
No entä oliko tässä ähräämisessä ja säätämisessä mitään järkeä? Enpä tiedä. Tuli ainakin selväksi, että hankalaa on. Tällainen kaavio on mielestäni havainnollinen ja toivottavasti juoksurata-kaavio tulisi Exceliin tai vähintään se mahdollisuus, että palkkikaavioon voisi fiksusti yhdistää viivakaavion.
Vit ladata työkirjan itsellesi ja tutkia kaaviota. Voit myös päivittää tiedot, jotka on noudettu Power QuerylläTaloustutkimuksen sivuilta.
Sain sähköpostitse kysymyksen, jonka ratkaisu saattaa kiinnostaa muitakin excelöitsijöitä:
”Minulla on monivälilehtinen tiedosto ja sen ensimmäisellä lehdellä on kooste, johon haetaan tietoa muilta välilehdiltä. Esimerkissä haettu ”TAMMIKUU” ja ”HELMIKUU” lehdiltä tieto kahdesta solusta. Haluaisin helpottaa monimutkaisten kaavarimpsujen tekemistä niin että rivin edessä (esimerkissä solussa A3 ja A4 olisi välilehtien nimet ja kaava hakisi sen tästä solusta. Kun rivejä on kymmeniä niin rivit saisi aikaan yksinkertaisesti kopioimalla. Eli solun B2 kaavassa ”TAMMIKUU!” korvattaisiin jollakin niin että välilehden nimi löytyykin solusta A3.”
Ratkaisu
Excelissä voi viitata epäsuorasti soluun muodostamalla soluviittausta muistuttavan merkkijonon ja käyttämällä INDIRECT (EPÄSUORA) -funktiota.
Yllä olevassa ensimmäisessä kaavassa muodostetaan solussa A3 olevasta tekstistä ja merkkijonosta ”!A1” yhtenäinen merkkijono & -operaattorin avulla. Tuloksena siis merkkijono ”TAMMIKUU!A1”, joka muistuttaa Excelin viittausta, joten INDIRECT osaa hakea kyseisen solun sisällön.
Huom! Jos lisäät rivejä kuukausi-taulukoihin, muista muokata lainausmerkkien sisällä olevat osoitteet.
Moni Excel-käyttäjä tuntee hyvin COUNTIF (LASKE.JOS) -funktion, jonka avulla lasketaan sellaisten solujen lukumäärä, joiden sisältönä on tietty teksti. Mutta entäpä jos pitää selvittää miten moneen kertaan jokin merkki tai merkkijono esiintyy yhdessä solussa?
Solussa olevan merkin tai merkkijonon esiintymien lukumäärän saa selville hyödyntämällä LEN (PITUUS) ja SUBSTITUTE (VAIHDA) -funktioita.
Tietyn merkin esiintyminen lukumäärä Excelin solussa
Suomenkielisessä versiossa kaava on:
=PITUUS( A2 ) – PITUUS( VAIHDA( A2; ”,”; ”” ) )
Kaava perustuu ideaan, jossa ensin lasketaan koko merkkijonon pituus ja siitä vähennetään sen merkkijonon pituus, josta kyseinen merkki on poistettu korvaamalla merkki tyhjällä merkillä.
Tietyn merkkijonon esiintyminen lukumäärä Excelin solussa
Kaava perustuu ideaan, jossa ensin lasketaan koko merkkijonon pituus ja siitä vähennetään sen merkkijonon pituus, josta kyseinen merkkijono on poistettu korvaamalla merkkijono tyhjällä merkillä. Näin saatu tulos jaetaan merkkijonon merkkien lukumäärällä ja tulokseksi saadaan merkkijonon esiintymien lukumäärä.
Oletko joskus kaivannut monitasoista numeroitua luetteloa Excelissä?
Voit ladata itsellesi tämän jutun lopusta tiedoston, johon on toteutettu monitasoisen luettelon esimerkkikaavat.
Idea
Aiheet syötetään D ja E -sarakkeisiin. Soluihin A2, B2 ja C2 luodut kaavat on kopioitu alas ja niiden perusteella muodostetaan numerointi sellaisille riveille, joille on syötetty aiheita. A- ja B-sarakkeet on tarkoitus piilottaa näkyviltä.
Solun A2 kaava
A-sarakkeeseen lasketaan miten monta otsikkoa D-sarakkeeseen on syötetty kyseiselle riville asti.
=COUNTA( $D$2:D2 )
=LASKE.A( $D$2:D2 )
Solun B2 kaava
B-sarakkeessa on laskuri, joka aloittaa numeroinnin aina nollasta (0), kun aiheluetteloon on syötetty uusi aihe.
=IF( A2<>A1; 0; B1+1 )
=JOS( A2<>A1; 0; B1+1 )
Solun C2 kaava
Jos D-sarakkeessa on tekstiä, soluun sijoitetaan A-sarakkeessa oleva numero. Jos E-sarakkeessa on tekstiä, muodostetaan numero sekä A- että B-sarakkeiden avulla. Jos kummassakaan sarakkeessa ei ole tekstiä, jätetään solu tyhjäksi.
Esimerkkitiedoston C-sarakkeessa on ehdollinen muotoilu (conditional formatting), joka lihavoi numeeriset solut eli 1-tason aiheiden numerot. D-sarake on lihavoitu tavallisen muotoilun avulla.
Kokosin linkkilistan hyödyllisistä Power BI ja Excel Self-Service BI -aiheisista blogeista. Toivottavasti kommentoit, jos tiedät muita maininnan arvoisia blogeja tai sivustoja.
Microsoft Power BI blog on virallinen Power BI -tiimin blogi, jossa he tiedottavat mm. uusista ominaisuuksista sekä jakavat runsaasti erilaisia Power BI -ohjeita ja webinaaritiedotteita.
Microsoft Power BI yhteisöön rekisteröityneet jäsenet kirjoittavat blogijuttuja tähän yhteisöblogiin. Blogissa jaetaan myös tietoja ilmaisista webinaareista.
Tuore Power BI -vinkkisivusto, jossa Mike Carlo jakaa erilaisia Power BI -vinkkejä. Joukossa näyttää olevan myös useita R- ja Power BI -integraatioon liittyviä juttuja.
Powerpivotpro on koulutus- ja konsultointiyritys, jonka kotisivujen keskipisteessä on Power Pivot ja Power BI -aiheiset blogiartikkelit. Kirjoittajista monet ovat työskennelleet aiemmin Microsoftilla Power Pivotin tai Power BI:n kehitystiimeissä. Rob Collie & Avichal Singh ovat myös kirjoittaneet aiheesta kirjan, joka soveltuu mainiosti Excel-taustaiselle käyttäjälle: Power Pivot and Power BI – The Excel User’s guide to DAX, Power Query, Power BI & Power Pivot in Excel 2010-2016
Ken Puls bloggaa sekä Excel- että Power BI -aiheista ja on erikoistunut Power Queryyn sekä Power Queryn M-kieleen. Hän on kirjoittanut yhden harvoista Power Query -kirjoista: M is for Data Monkey.
Matt Allington kirjoittaa blogissaan sekä Excel- että Power BI -aiheista ja on erikoistunut DAX-kieleen. Sivustolta löytyy myös hyödyllinen Knowledge Base aloittelevalle tiedon mallintajalle, missä aiheina mm. kalenteritaulu (Calendar Tables), useat faktataulut (multiple data tables), useat taulujen väliset yhteydet (multiple relationships between tables) sekä ohjeita milloin on syytä käyttää laskettuja sarakkeita ja milloin mittareita (Columns vs Measures). Matt Allington on kirjoittanut myös DAX-oppaan: Learn to Write DAX.
Erik Svensen kirjoittaa ja jakaa esimerkkejä Excelistä, Power Pivotista ja Power BI:stä sekä OLAP-kuutioista. Hänen blogistaan löytyy myös useita esimerkkejä, joissa on käytetty tanskalaista avointa dataa.
Microsoftin virallinen Office-blogi, jossa on viimeaikoina ollut Excelin osalta lähinnä vain ja ainoastaan Self-Service BI -aihepiiriin liittyviä artikkeleita.
Gerhard Brueckl kirjoittaa teknisiä blogeja erilaisista ohjelmointikielistä, tilastollisista menetelmistä sekä vaihtelevasti eri BI-aiheista, kuten SQL Server Analysis Services. Joukossa on runsaasti myös Power BI ja Excel Self-Service BI -aiheisia artikkeleita.
SQLBlog.comissa on useita kirjoittajia ja aihepiiri pääasiassa teknistä. Esimerkiksi Marco Russo kirjoittaa blogiin myös Power BI -aiheista ja DAX-kielestä. Linkki Marcon SQLBlog.com -artikkeleihin: http://sqlblog.com/blogs/marco_russo/
Marco Russon ja Alberto Ferrarin ylläpitämä sivusto, jossa he jakavat monipuolisesti erilaisia DAX-kaavaesimerkkejä. He ovat koonneet sivuston sisällöstä myös kirjan höystettynä DAX-kielen johdannolla ja kielioppiohjeilla.
Yritysblogeja, joissa aiheina myös Power BI
Monet aiemmista blogeista ovat myös yritysten ylläpitämiä, mutta niissä korostuu erityisesti artikkelit yritystiedon sijaan. Tälle yritysblogilistalle kerään sellaisia yritysblogeja, joissa blogiartikkeleiden merkitys on aiempia vähäisempi, mutta joiden joukosta löytyy myös sisällöllisesti kiinnostavia artikkeleita.
VLOOKUP (PHAKU) on yksi Excelin käytetyimmistä hakufunktioista, vaikka siihen liittyy lukuisia rajoituksia ja puutteita. Funktion suosio perustuu siihen, että sen avulla oppii helposti hakufunktioiden idean. Monille käyttäjille se on kuitenkin jäänyt ainoaksi hakuvälineeksi, vaikkei se olekaan työkirjojen ylläpidon ja hakunopeuden kannalta se fiksuin vaihtoehto.
Jos käytät runsaasti VLOOKUP:ia, lue miksi se on syytä korvata INDEX (INDEKSI) ja MATCH (VASTINE) -funktioiden yhdistelmällä, jotta pystyt jatkossa muuttamaan lähdedataa helpommin joutumatta muokkaamaan kaikkia kaavojasi.
VLOOKUP:in kielioppi
Kerrataanpa pikaisesti VLOOKUP:in kielioppi ennen kuin perehdytään sen pulmiin ja niiden ratkomiseen. VLOOKUP-funktion syntaksi on seuraava:
Esimerkiksi kaava =VLOOKUP( ”010”; Kunnat; 6; FALSE ) etsii Kunnat-nimisen taulukon (table) ensimmäisestä sarakkeesta merkkijonoa ”010” ja poimii tuloksen kuudennesta (6) sarakkeesta (kuvassa Väkiluku). Viimeinen hakutyyppi-argumentti FALSE (EPÄTOSI) huolehtii siitä, että funktio hakee täsmälleen tietoa ”010” ja antaa tuloksena virheilmoituksen, jos tietoa ei löydy. Mikäli funktion viimeisenä argumenttina olisi TRUE (TOSI) ja etsittävää merkkijonoa ei löytyisi, funktio poimisi arvon ”pienemmän” tiedon kohdalta (kuvassa 009) edellyttäen että aineisto olisi lajiteltu suuruusjärjestykseen ensimmäisen sarakkeen perusteella.
VLOOKUP:in ongelmat
Yksi merkittävimmistä VLOOKUP:in ongelmista on kolmantena argumenttina funktiolle välitettävä sarakenumero, mikä voi aiheuttaa aineistojen muutosten yhteydessä valtavasti ylimääräistä työtä. Kuvittele tilanne, jossa sinulla on työkirjassasi kymmenittäin erilaisia VLOOKUP:peja ja lähdedataan tulee uusia sarakkeita. Joudut muokkaamaan jokaisen VLOOKUP-kaavan eli käytännössä käymään läpi ja korjaamaan kaavoissa olevat sarakenumerot.
Toinenkin ongelma liittyy sarakenumeroon, sillä runsaasti numeerista dataa sisältävissä aineistoissa et edes välttämättä huomaa, jos jokin kaava poimii arvon väärästä sarakkeesta. Kun aineisto muuttuu ja VLOOKUP jää korjaamatta, se voi hakea luvun edelleen sarakkeesta 7, vaikka tieto on siirtynyt sarakkeeseen 8.
VLOOKUP edellyttää aina, että etsittävä tieto on hakutaulun ensimmäisessä sarakkeessa eli poimittavan tiedon vasemmalla puolella. Tämän rajoituksen johdosta joudut ehkä muokkaamaan aineistojasi VLOOKUP-hakuihin soveltuviksi.
Kun määrität neljänneksi argumentiksi arvon TRUE, voit poimia pienemmän arvon kohdalta tiedon, mutta se ei osaa poimia etsittävää tietoa suurempaa tietoa.
VLOOKUP on hidas, jos dataa on runsaasti ja hakuja tehdään paljon.
Kun haluat poimia vaakasuuntaiselta alueelta, joudut käyttämään eri funktiota eli HLOOKUP (VHAKU) -funktiota.
Jos haluat noutaa VLOOKUP:illa kahden tai useamman kriteerin perusteella, sinun pitää lisätä lähtödataan ylimääräinen sarake, johon yhdistät sarakkeet esimerkiksi & tai CONCATENATE-funktion avulla.
INDEX ja MATCH yhdessä
Tutkitaanpa mitä INDEX ja MATCH tekevät sekä erikseen että yhdessä.
INDEX (INDEKSI)
INDEX (INDEKSI) -funktio poimii halutusta sarakkeesta halutulta riviltä arvon:
=INDEX( Sarake josta poimitaan; Rivinumero )
Esimerkiksi =INDEX( Kunnat[Väkiluku]; 3) poimii Kunnat-taulukon Väkiluku-sarakkeesta kolmannelta riviltä arvon.
MATCH (VASTINE)
Lopullisessa kaavassa ei suinkaan käytetä vakioarvoa 3, vaan se korvataan MATCH (VASTINE) -funktiolla:
=MATCH( Etsittävä tieto; Sarake; 0 ), missä 0 (nolla) tarkoittaa että etsitään täsmälleen etsittävää tietoa eikä pienempää tai suurempaa arvoa. Jos poimittaisiin pienempi, argumentiksi annettaisiin 1 ja suuremman poimimisessa käytettäisiin argumenttia -1. MATCH-funktio palauttaa tuloksenaan löytämänsä tiedon sijainnin, kuten numeron 3.
Esimerkiksi =MATCH( ”010”; Kunnat[Kuntanro]; 0 ) kertoo monennella rivillä tunnus ”010” sijaitsee Kuntanro-sarakkeessa. Jos tunnusta ei löydy, kaava antaa tulokseksi virheilmoituksen.
MOLEMMAT
Lopputuloksena seuraava kaava suorittaa molemmat ja palauttaa kuntanumeron ”010” väkiluvun:
Seuraavan kuvan esimerkkikaavoissa poimitaan Kuntanro, Väkiluku ja Maakunta soluun B2 valitun kunnan nimen perusteella. Huomaa, että myös kuntanumero voidaan poimia, vaikka etsittävä tieto eli kunnan nimi on sen oikealla puolella!
INDEX ja MATCH -yhdistelmän edut
Funktiossa ei kuvata poimittavan sarakkeen sijaintia numerona, vaan viitataan sarakealueeseen (esim. Kunnat[Väkiluku]), joten kaava ei edellytä muokkausta, vaikka aineistoon tulisi uusia sarakkeita. Kaava toimii kunhan sarakkeen otsikko pysyy samana. Mikäli otsikko muuttuu, se on helppo korvata kaikista kaavoista Replace (Korvaa) -komennolla.
Kaava ei voi poimia väärästä sarakkeesta, sillä haku perustuu sarakkeen otsikkoon. Jos sarake häviää datasta, kaava antaa virheilmoituksen.
Sarakkeiden järjestyksellä ei ole merkitystä! Etsittävän tiedon ei tarvitse olla poimittavan tiedon vasemmalla puolella. Etsittävä tieto (esim. Kunnat[Kuntanro]) voi olla vaikka aineiston viimeinen sarake ja haku toimii. Voit myös huoletta muuttaa
INDEX ja MATCH -yhdistelmä osaa hakea myös suuremman arvon kohdalta, kun MATCH-funktiolle annetaan kolmanneksi argumentiksi -1. VLOOKUP kykenee hakemaan vain täsmälleen samaa (FALSE) tai pienempää (TRUE).
INDEX ja MATCH on VLOOKUP-funktiota nopeampi hakumenetelmä, sillä funktioissa prosessoidaan vain kahta saraketta, kun VLOOKUP-funktiolle välitetään argumenttina isompi alue. Nykyisissä Excel-versioissa nopeusero ei tosin enää ole välttämättä niin suuri kuin esim. 1990 tai 2000 -luvun Exceleissä. INDEX ja MATCH -funktioiden tehokkuudesta löytyy runsaasti artikkeleita, kuten Why INDEX MATCH is better than VLOOKUP tai Excel’s Fastest Lookup Methods: The Tested Results
Jos haluat poimia vaakasuuntaiselta alueelta, voit käyttää samaa INDEX ja MATCH -funktoiden yhdistelmää eli funktioille annettavat alueet voivat olla myös rivejä.
Jos haluat poimia kahden tai useamman eri kriteerin perusteella, lähdedataan ei tarvitse lisätä ylimääräistä saraketta vaan voit syöttää INDEX ja MATCH -funktioiden yhdistelmän matriisikaavana. Huomaa, että matriisikaavat pitää hyväksyä Ctrl + Shift + Enter -näppäinyhdistelmällä.
Lasketko Excelissä summia, lukumääriä tai vaikkapa keskiarvoja? Entä suodatatko luetteloita? Jos vastasit myöntävästi, tarvitset myös SUBTOTAL ja AGGREGATE-funktioita.
Tavalliset funktiot
Tavalliset matemaattiset ja tilastolliset funktiot kuten SUM (SUMMA), COUNT (LASKE) tai esimerkiksi AVERAGE (KESKIARVO) laskevat tuloksiin mukaan kaikki alueella olevat luvut. Mukana ovat siis myös kaikki piilotetut tai aineistosta poissuodatetut tiedot, kuten esimerkkikuvan luvut 3 ja 6 riveillä 3 ja 6.
SUBTOTAL (VÄLISUMMA)
SUBTOTAL (VÄLISUMMA) funktio laskee halutun tilastollisen tuloksen ja huomioi joko suodatuksen tai myös piilotuksen. Funktiolle annetaan ensimmäisenä argumenttina laskettavan funktion numerokoodi ja toisena alue, josta lasketaan. Funktion numerosarjoja on 2 erilaista: 1-11 ja 101-11.
=SUBTOTAL(funktion numero; alue)
Seuraavassa esimerkissä rivit 3 ja 6 (eli luvut 3 ja 6) on piilotettu piilota (hide) -komennolla, joten numerokoodilla 9 SUBTOTAL laskee ne mukaan, mutta numerokoodilla 109 jättää ne huomiotta.
Vinkki! Funktiot kannattaa yleensä sijoittaa aineiston otsikoiden yläpuolelle, jotta esimerkiksi suodatuksen yhteydessä näet heti tulokset eikä niitä tarvitse vierittää esiin aineiston alapuolelta.
AGGREGATE (KOOSTE)
AGGREGATE (KOOSTE) hallitsee useampia tilastollisia tuloksia kuin SUBTOTAL. Funktion numeron lisäksi sille annetaan koodina myös tieto, mitä sen tulee jättää huomiotta. Kolmantena argumenttina määritellään laskettava alue. Lisäksi osa funktioista edellyttää vielä neljännen argumentin, joka määrittää tarkemmin miten funktio halutaan suorittaa.
=AGGREGATE(funktion numero; koodi joka kuvaa mitkä luvut huomoidaan; alue; valinnainen neljäs lisätietoargumentti)
Toinen argumentti kuvaa mitä lukuja funktion halutaan jättää huomiotta. Jos kaavan halutaan jättävän huomiotta alueella olevien SUBTOTAL ja AGGREGATE -funktioiden tulokset sekä piilotetut tiedot, toisena argumenttina annettaisiin koodi 3. Jos funktion halutaan jättävän huomiotta vain piilotetut rivit (joko suodatus tai piilotus), koodiksi annettaisiin 5.
Seuraavan esimerkin ensimmäinen kaava laskee summan (koodi 9) eikä piittaa virheilmoituksesta eikä huomioi piilotettuja tai suodatettuja rivejä (koodi 7). Jälkimmäinen kaava etsii toiseksi suurimman luvun (koodi 14 ja viimeinen valinnainen argumentti 2) piittaamatta piilotetuista riveistä (koodi 5).
Hienoa, että sekä SUBTOTAL että AGGREGATE osaavat laskea tuloksia suodatuksen tulosluettelosta! Hyödyllisiä molemmat.
Tuntuuko joskus turhalta muodostaa erillisiä apuhakutauluja tietojen luokittelua ja VLOOKUP (PHAKU) -funktiota varten? Tiesitkö, että voit korvata VLOOKUP-funktion CHOOSE (VALITSE.INDEKSI) -funktiolla, kun sinun pitää määrittää vastineita kokonaisluvuille, kuten kuukausille (1-12) tai vaikkapa viikonpäiville (1-7).
Alla olevaan esimerkkiin on luotu kaksi aputaulua, joista noudetaan kuukauden ja päivän nimet VLOOKUP-funktiolla:
Seuraavassa on puolestaan CHOOSE (VALITSE.INDEKSI) -esimerkki, jossa erillisiä aputauluja ei tarvita:
Huom! Pääsääntöisesti kaavoihin ei ole hyvä piilottaa vakioarvoja, vaan erilaiset kaavoihin ja laskentaan vaikuttavat muuttujat tulisi sijoittaa soluihin, joissa niitä on helppo muuttaa. Itse olen kuitenkin kokenut CHOOSE-funktion näppäräksi edellä kuvatun kaltaisissa tilanteissa, jos luokitteleviin teksteihin ei ole odotettavissa muutoksia.
Todellisista käytännön haasteista oppii aina eniten, joten jaan teille eräältä analyytikolta saapuneen kysymyksen sekä sen ratkaisun. Jälleen kerran Power Query hoiti hienosti homman.
Haaste oli seuraavanlainen:
Hei Heidi,
olit viime vuoden lopulla pitämässä meillä Power Query kurssia. Power Query on helpottanut ja nopeuttanut työtä huomattavasti, aivan kuten lupasit.
Nyt olen kuitenkin törmännyt ongelmaan, jota en ole kyennyt ratkaisemaan. Liitteenä yksinkertaistettu esimerkki ongelmasta.
Eli siis:
Pystyykö Power Queryssä lisäämään sarakkeen, johon laskettaisiin summa niistä sarakkeista, joiden otsikot löytyvät määritellystä listasta.
Minulla on kuukausittain saatava csv-tiedosto, jossa on joka kuukausi hieman eri määrä sarakkeita.
Kuvitellaan että tiedostossa on päiväkohtaista dataa eläimistäni. Csv-tiedostoon tulee mukaan ainoastaan ne eläimet, joihin liittyy tarkasteltavana kuukautena jotain dataa.
Jos eläin x:stä ei ole mitään dataa k.o. kuukautena, sitä ei tule mukaan csv-tiedostoon.
Minulla on kuitenkin lista kaikista eläimistäni jaoteltuna eri eläinryhmiin (esimerkissä nisäkkäät, linnut sekä kalat).
Tahtoisin tehdä kyselyn, joka summaisi minulle päiväkohtaiset summat eri eläinryhmille, jotka minulla on listattuna.
Kysely lisäisi sarakkeet joka eläinryhmälle ja summaisi ne eläimet, jotka kuuluvat kyseiseen eläinryhmään.
Tulokseksi halutaan siis jotakin alla olevan kaltaista:
Ongelman ratkaisu
Lähdedatan rakenteessa esiintyy eräs hyvin tyypillinen ongelma: yksi datan ominaisuuksista (eläin) on käännetty (pivotoitu) csv-tiedostossa eri sarakkeisiin. Jotta dataa pystyisi fiksusti luokittelemaan ja jatkokäsittelemään, aineistossa tulisi olla kolme saraketta: Date, Animal ja Value.
Ratkaisu siis perustuu siihen, että ensimmäiseksi datan kaikki muut sarakkeet paitsi Date pitää kääntää kahdeksi sarakkeeksi (Animal ja Value) eli aineistolle suoritetaan ns. unpivot-operaatio. Tämän jälkeen aineistoon voi yhdistää Merge-toiminnolla kunkin eläimen eläinryhmä ja lopuksi laskea eläinryhmien summat. Summat voisi laskea datasta pivot-taulukon avulla, mutta kuvailen tässä esimerkissä ratkaisun, jossa kaikki tehdään loppuun asti Power Queryllä.
Esimerkkikyselyt löytyvät tästä tiedostosta. Käytin ratkaisussani .csv-tiedoston sijaan yhdessä Excel-tiedostossa olevia Excelin taulukoita (table), jotta sain koko ratkaisun yhteen tiedostoon.
Jätän näissä ohjeissa kaikki ylimääräiset hienosäätövaiheet tekemättä, kuten tietotyyppien määritykset päivämäärien osalta yms. Ratkaisussa keskitytään vain datan kääntämiseen ja yhdistämiseen. Huomio: Kaikissa kuvissa on väärät päivämäärät eli olin kadottanut etunollat jo lähdedatoja muodostaessani.
Lähdedatat
Tiedostossa on seuraavat lähdetaulukot (SourceData ja SourceAnimalGroups):
Apukyselyiden luonnit (Data ja AnimalGroups)
Ensin molemmista lähdedatoista muodostetaan kyselyt, jotka myöhemmin yhdistetään yhdeksi tulokseksi. Power Queryhän edellyttää, että kaikki yhdistettävät aineistot ovat kyselyitä. Pelkät taulukot eivät riitä.
Muodosta ensin esimerkki SourceAnimalGroups-taulukosta kysely valitsemalla yksi solu taulukon sisältä ja käyttämällä komentoa
Excel 2016: Data > Get & Transform > From Table
Excel 2010 tai 2013: Power Query > Excel Data > From Table
Eläinryhmädatalle ei tarvitse tehdä mitään eikä sitä edes tarvitse ladata tiedostoon. Anna kyselylle nimeksi esimerkiksi AnimalGroups ja avaa kyselyeditorissa Home-välilehdellä Close & Load -painikkeen valikko ja valitse Close & Load to … -ikkunasta vaihtoehto Only Create Connection.
Valitse seuraavaksi yksi solu SourceData-aineiston sisältä ja aloita jälleen kyselyn luonti From Table -komennolla.
Valitse Date-sarake ja käännä muut sarakkeet pikavalikosta Unpivot Other Columns -komennolla. Unpivot Other Columns on loistava komento, sillä Power Queryn käännösskriptiin tallentuu vain viittaus Date-sarakkeeseen eli kaikki eläimet kääntyvät olipa niitä datassa 5 tai 10. Älä siis valitse eläinsarakkeita ja Unpivot Columns -komentoa, joka edellyttäisi, että datassa on aina samat eläimet!
Tuloksen pitäisi näyttää tältä:
Anna kyselylle nimeksi Data ja sulje kyselyeditori jälleen lataamatta tulosta Exceliin (Only Creata Connection).
Apukyselyiden yhdistäminen
Sinulla on nyt kaksi kyselyä, joista toinen sisältää datan ja toinen eläinryhmät. Suoritetaan seuraavaksi kyselyiden yhdistäminen.
Valitse Excelissä data-kyselyn päältä Merge.
Valitse yhdistettäväksi kyselyksi AnimalGroups ja valitse myös molemmista Animal-sarakkeet, jotka toimivat tässä tapauksessa yhdistävinä kenttinä ja hyväksy OK:lla.
Laajenna esiin Group -sarake. Poista rasti kohdasta Use original column name as prefix, jottei sarakkeen nimen eteen tule NewColumn-etuliitettä.
Kun eläinryhmät (group) on yhdistetty data-aineistoon, tuloksen pitäisi näyttää tältä: Edellä olevan tuloksen voisi jo palauttaa Exceliin ja jatkaa eläinryhmien summaamista esimerkiksi pivot-taulukon avulla. Tässä esimerkissä haluan kuitenkin näyttää, että Power Queryllä pystyy myös laskemaan ryhmäsummia ja palauttamaan valmiin lopputuloksen summineen.
Seuraavaksi valitaan komento Transform > Group By ja lasketaan summat ryhmien ja päivien perusteella. Group By -ikkunassa tehdään seuraavat valinnat:
Koska ryhmityksissä ei ole mukana Animal-saraketta, se tulee katoamaan tulosjoukosta:
Tämän jälkeen aineiston voi vielä kääntää (pivotoida) siten, että Group-sarakkeesta muodostuu sarakeotsikot valitsemalla ensin Group-sarakkeen ja sen jälkeen Total-sarakkeen ja antamalla komennon Transform > Pivot column. (Huomaa, että pivotoitaessa on tärkeää valita ensin sarake, josta muodostuu sarakeotsikot ja sen jälkeen ctrl-näppäimellä sarake, joka sisältää sarakkeisiin muodostuvat luvut.)
Microsoft julkisti marraskuussa 2023 Power BI Desktopiin esiversion uudesta DAX-kyselynäkymästä (DAX Query View). Aiemmin DAX-kyselyiden suoritus on vaatinut lisätyökaluja, kuten esimerkiksi DAX Studion, Tabular Editorin tai SQL Server Management Studion.
Uusi näkymä on helppokäyttöinen ja riittävän yksinkertainen, jotta myös itsepalvelukäyttäjät voivat hyötyä DAX-kyselyistä. Teknisemmille kehittäjille mainitut lisätyökalut tarjoavat edelleen monipuolisempia toiminnallisuuksia, joskin uusi kyselynäkymä on näppärä apu myös heille.
Kyselynäkymä on esiversiovaiheessa, joten sitä kehitetään edelleen ja se pitää erikseen aktivoida käyttöön Power BI:n asetuksista.
Jatka lukemista, jos sinua kiinnostaa mitä DAX-kyselyt ovat ja miten voit hyötyä kyselynäkymästä, kun tarkastelet tietomallia ja kehität DAX-kaavalogiikkaa. Blogissa esitellään melko lyhyesti mistä on kyse, mutta löydät artikkelin lopusta linkkejä myös kattavampiin ohjeisiin sekä ohjevideoihin.
Katsaus DAX-kaavoihin ja DAX-kyselyihin
DAX-kaavat
Artikkelissa oletetaan, että ymmärrät DAX-kaavojen ja -funktioiden perusteita ja osaat laatia Power BI Desktopissa DAX-kielellä mittareita (measures) ja laskettuja sarakkeita (calculated columns). Olet saattanut luoda tietomalliin DAX-kielellä myös tauluja (table).
Kun tietomalliin luodaan kaavarivin avulla mittareita, kaavasarakkeita tai tauluja, Power BI Deskopin kaavariville kirjoitetaan kaavan nimi, yhtäsuuruusmerkki ja suoritettava lauseke.
Mittari: Total Sales = SUMX( Sales, Sales[Quantity] * Sales[UnitPrice] )
Kaavasarake: Delivery Delay in Days = Sales[Delivery Date] - Sales[Order Date]
DAX-kaavojen avulla tietomalliin lisätään laskentalogiikkaa sekä taulukoita. DAX-kaavat luovat tietomalliin uusia kohteita (items), jotka näkyvät raportointinäkymässä ja joita voi hyödyntää raporteissa.
DAX-kyselyt
DAX-kyselyt puolestaan muistuttavat SQL-kyselyitä, sillä niiden avulla tietomallista voidaan saada tarkasteltavaksi tulosnäkymiä.
DAX-kyselyt eivät luo tietomalliin kohteita, kuten fyysisiä taulukoita. Ne eivät myöskään näy raportointinäkymässä eikä niitä voi hyödyntää raporteissa.
Kysymys: Mitä hyötyä on kyselyistä, jos niiden tuloksia ei pysty hyödyntämään raporteissa?
Vastaus: Kyselyitä käytetään apuvälineinä tietomallin tarkastelussa ja dokumentoinnissa sekä kaavojen laatimisessa ja muokkaamisessa. Niistä on paljon apua tietomallin logiikan toteutukseen liittyvässä taustatyössä.
Alla on esimerkki yksinkertaisesta DAX-kyselystä, jossa on käytetty EVALUATE-komentoa. EVALUATE-komennon avulla voi suorittaa halutun lausekkeen ja saada näkyviin lausekkeen muodostaman tulostaulukon. Yleensä EVALUATEon tapana kirjoittaa omalle rivilleen ja suoritettava lauseke sen alle. Lauseke kirjoitetaan DAX-funktioiden avulla ja se voi olla pitkä erilaisista funktioista muodostuva koodi.
Alla oleva kysely suorittaa EVALUATE-komennon avulla FILTER-funktion ja näyttää tuloksen Results (Tulokset) -paneelissa. Tauluun on suodatettu ne Sales-taulun rivit, joissa yksikköhinta on suurempi kuin 1000.
Kun kysely suoritetaan (Run), tulos näytetään Results-paneelissa, mutta se ei muodostu fyysisenä taulukkona tietomalliin.
Kyselyistä on hyötyä, kun esimerkiksi kehittelet DAX-funktion argumentiksi sopivaa virtuaalista taulua. Voit ensin testata kyselyn avulla, osaatko kirjoittaa koodin oikein. DAX-kyselyistä on myös hyötyä, kun sinun pitää tarkastella ja muokata tiettyä mittaria sekä sitä edeltäviä mittareita.
DAX-kyselynäkymän aktivointi Power BI Desktopissa
Aktivoi esiversio-ominaisuus komennolla File > Options and Settings > Options > GLOBAL > Preview features > DAX query view (Tiedosto > Asetukset ja vaihtoehdot > Valinnat > YLEINEN > Esiversio-ominaisuudet > DAX-kyselynäkymä).
Kun olet aktivoinut DAX-kyselynäkymän käyttöön, sulje ja käynnistä Power BI Desktop, jonka jälkeen se ilmestyy muiden näkymien alapuolelle.
DAX-kyselynäkymän hyödyt
Seuraavassa on joitakin hyödyllisiä DAX-kyselynäkymän käyttötapauksia. Voit esimerkiksi
tarkastella tietomallin sisältöä
tarkastella tietomalliin liittyviä tilastoja
hyödyntää näkymää mittareiden luonnissa ja niiden muokkauksessa
tarkastella yhden mittarin sekä sitä edeltävien mittareiden koodeja yhdessä näkymässä
tarkastella ja validoida mittareiden tuloksia, ilman että sinun tarvitsee luoda sitä varten visualisointeja raporttisivuille
kehitellä koodeja, jotka muodostavat virtuaalisia tauluja muiden funktioiden sisällä käyttettäväksi
hyödyntää kyselynäkymän sivuja tietomallin mittareiden dokumentoinnissa
käyttää INFO-funktioita tietomallin sisällön tarkastelussa ja dokumentoinnissa
tarkastella Performance Analyzer -työkalun muodostamia kyselyitä ja tutkia mahdollisia ongelmia
jne.
Kyselyn suoritus
Yksinkertaisimmillaan kyselyssä on vain yksi EVALUATE-komento ja lauseke, joka halutaan suorittaa. Alla oleva kysely suorittaa Sales-taulun sisällön näyttämisen sellaisenaan. Kysely suoritetaan Run-painikkeella ja kyselyn tulostaulukko näytetään näkymän alaosassa.
Jos kyselyssä on useita EVALUATE-komentoja, kustakin muodostuu suorituksen yhteydessä oma tulostaulukkonsa.
Koska kyselyiden tulostaulukoista ei muodostu fyysisiä tauluja tietomalliin, ne eivät myöskään kasvata tietomallin kokoa. Kyselyiden tulostaulukot eivät näy raportointi-, taulukko- tai mallinnusnäkymissä. Ainoastaan kyselyn koodi tallentuu Power BI -tiedostoon ja sen voi suorittaa milloin tahansa uudelleen. Kun tallennat, suljet ja avaat Power BI -tiedoston, tulostaulukot ovat tyhjiä kunnes suoritat kyselyt.
Voit luoda kyselyitä eri välilehdille ja nimetä välilehtiä kaksoisnapsautamalla niitä. Jos välilehden kysely/kyselyt on suoritettu onnistuneesti, nimen edessä näkyy vihreä symboli. Punainen hälytysmerkki kertoo, että kyselyissä on ollut virheitä.
Huomaa, että EVALUATE-komennolle pitää antaa suoritettavaksi sellainen lauseke, jonka tuloksena on taulukko.
Tavallista mittaria (esim. [Total Sales]) ei voi evaluoida sellaisenaan, sillä mittarin tulos ei ole taulukko vaan yksittäinen arvo.
Jos haluat tarkastella mittarin tulosta kyselynäkymän avulla, luo lauseke, jonka tuloksena on taulukko. Taulukon muodostamisessa voi käyttää esimerkiksi { } -sulkumerkkejä, SUMMARIZECOLUMNS-funktiota tai jotain muuta funktiota, joka antaa tuloksenaan taulukon (table).
Tulostaulukon sarakkeet ovat vielä tällä hetkellä muotoilemattomia. Tähän tulee toivottavasti pian päivitys, sillä isoja lukuja on hankala tarkastella ilman tuhaterottimia.
EVALUATE-komennon lisäksi kyselyissä voi olla muita DAX-kyselykielen komentosanoja, kuten ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE ja COLUMN. Voit ryhtyä opiskelemaan DAX-kyselyitä sekä komentoja vaikkapa Microsoftin sivuilta:
Alla olevan koodin tulostaulukkona on Product-taulun sisältö lajiteltuna tuotteen nimen perusteella nousevaan järjestykseen (ASC).
Kyselynäkymän työkalut
Kyselynäkymässä on hyödyllisiä työkaluja, joiden avulla voit mm. muotoilla kyselyä, kommentoida koodilohkoja, poistaa kommentteja sekä etsiä ja korvata tekstiä.
Tavallinen Power BI Desktopin kaavarivi ei ole käytössä kyselynäkymässä. Sinun pitää siirtyä muihin Power BI Desktopin näkymiin, jos muokkaat tai luot mittareita tavallisella kaavarivillä.
Mittarin sekä sen edeltäjien tarkastelu pikakyselyn avulla
Jos avaat pikavalikon yksittäisen mittarin päältä (esim. Profit), saat esiin mittariin liittyviä pikakyselyitä (quick queries). Pikakyselyt kirjoittavat puolestasi kyselyitä, jotka suoritetaan heti.
Define with references and evaluate (Määritä käyttäen viittauksia ja arvioi) on pikakyselyistä hyödyllisin. Sen avulla saa muodostettua kyselyn, jossa näytetään sekä valittu mittari (esim. Profit) että kaikki sitä edeltävät viitatut mittarit (Total Sales ja Total Cost). Kyselystä on apua, kun pitää pystyä tarkastelemaan mittarin edeltäjiä eli kaikkia niitä mittareita, jotka vaikuttavat kyseiseen mittariin.
Jos kuljetat hiiren koodissa olevan mittariviittauksen päälle, saat näkyviin myös mittarin koodin.
Kun yllä oleva kysely suoritetaan Run-toiminnolla, kysely ei tee muutoksia tietomalliin. Kyselyssä olevat DEFINE MEASURE -komennot eivät luo eivätkä muokkaa tietomallissa olevia mittareita. Kaikki tapahtuu vain keskusmuistissa. Tästä on hyötyä, kun haluat testata erilaisia muutoksia DEFINE MEASURE -lauseissa, mutta et halua muuttaa varsinaisia mittareita ennen kuin olet varmistunut muutosten toimivuudesta.
Mittarin muokkaus ja luonti
Jos teet kyselynäkymässä muutoksia DEFINE-osiossa oleviin mittareihin, mittarin yläpuolelle ilmestyy linkki, jota napsauttamalla muutos toteutetaan myös varsinaiseen tietomallissa olevaan mittariin. Alla olevassa kuvassa Profit-mittariin on lisätty välilyöntejä miinusmerkin ympärille, jolloin Update model: Overwrite measure (Päivitä malli: korvaa mittayksikkö) -linkki on aktivoitunut.
Jos lisäät kyselynäkymässä uusia mittareita DEFINE-osioon MEASURE-komennon avulla, voit lisätä mittarin myös tietomalliin lisätyn koodin yläpuolelle ilmestyneen Update model: Add new measure (Päivitä malli: Lisää uusi mittari) -linkin avulla.
Muista että uusi näkymä on vielä esiversiovaiheessa. Omien testailuitteni perusteella Update model -linkki saattaa joskus jäädä näkyviin, vaikka sitä on jo painettu ja tietomallissa olevaa mittaria on jo muokattu. Yleensä linkki katoaa, kun vierailet toisessa näkymässä ja palaat takaisin kyselynäkymään. Bugi korjaantuu toivottavasti pian.
Muut mittarin pikakyselyt
Edellä kuvattiin yksi hyödyllisimmistä pikakyselyistä, sillä mittareiden välisten viittausten tarkastelu on ollut Power BI Desktopissa hankalaa pelkän kaavarivin avulla. Alla on lyhyesti kuvattu myös muut mittarin pikavalikosta löytyvät pikakyselyt.
Define and evaluate (Määritä ja arvioi) luo kyselyn, jossa on mittarin tuloksen lisäksi myös DEFINE-osio. Tässä näkymässä mittaria voi myös muokata ja päivittää sen jälkeen linkkiä napsauttamalla muutokset itse tietomalliin, kuten aiemmin kerrottiin.
Evaluate (Arvioi) luo kyselyn, joka näyttää mittarin tuloksen tulosjoukossa. Evaluate kirjoittaa koodin SUMMARIZECOLUMNS-funktiolla eikä käyttämällä {} -sulkeita.
Jos haluat myöhemmin saada näkyviin myös mittarin määritelmän (define) tai mittarin määritelmän sekä edeltävät mittarit (define with reference), napsauta mittarin nimeä (esim. Profit %) ja koodiriville ilmestyvää lamppua ja valitse mitä haluat lisätä kyselyyn.
Taulujen sisällön tarkastelu pikakyselyiden avulla
Myös taulun pikavalikosta löytyy pikakyselyitä.
Nyt joulukuussa 2023 pikakyselyitä on vain neljä:
Show top 100 rows (Näytä 100 ylintä riviä) luo ja suorittaa kyselyn, joka näyttää taulusta 100 ensimmäistä riviä sen perusteella miten TOPN funktiossa on määritelty taulun lajittelu. Tulostaulukossa voi olla enemmänkin kuin 100 riviä, jos 100 pienimmän joukkoon kuuluva lajitteluperuste esiintyy useammalla kuin 100 rivillä.
Show column statistics (Näytä saraketilastot) luo ja suorittaa kyselyn, jonka tulostaulukossa näytetään taulun eri sarakkeisiin liittyviä tilastoja, kuten Min, Max, Distinct Values, jne.
Define all measures in this table (Määritä kaikki tämän taulukon mittarit) luo kyselyn, joka määrittelee kaikki taulussa olevat mittarit ja muodostaa niiden tuloksista tulostaulukon.
Define all measures in this model (Määritä kaikki tämän mallin mittarit) luo kyselyn, joka määrittelee kaikki tietomallissa olevat mittarit ja muodostaa niiden tuloksista tulostaulukon.
Mittareiden tulosten tarkastelu eri näkökulmista
Mittareiden tuloksia voi tarkastella perinteisesti luomalla raporttinäkymään visualisointeja. Tuloksia voi tarkastella myös kyselynäkymässä. Korvaamalla rivillä 3 olevan kentän ja suorittamalla kyselyn uudelleen, voi tarkastella samoja lukuja eri näkökulmista.
INFO-funktioiden käyttäminen tietomallin tarkastelussa sekä dokumentoinnissa
Kyselynäkymään tuli ensimmäinen päivitys heti joulukuussa, kun Microsoft julkisti yli 50 erilaista DAX-funktiota, joiden avulla saat tietoja tietomallista.
Esimerkiksi INFO.MEASURES() listaa kaikki tietomallin mittarit sekä näyttää niihin liittyviä tietoja.
INFO.TABLES() listaa kaikki tietomallin taulut. Se näyttää myös kustakin tietomallin päivämäärä-sarakkeesta keskusmuistiin muodostuneet ja tilaa vievät piilotetut päivämäärätaulut. Löydät lisätietoja päivämäärien käyttäytymisestä tästä aiemmasta artikkelistani: Power BI ja päivämäärät
Hyödyllisiä linkkejä lisäopiskelun tueksi
Alla on muutamia hyödyllisiä artikkeli- ja videolinkkejä, joiden avulla voit jatkaa sekä DAX-kyselykielen opiskelua että uuteen kyselynäkymään perehtymistä.
Jos et ole aiemmin kirjoittanut DAX-kyselyitä, toivottavasti pääset alkuun tämän lyhyen ohjeen ja yllä olevien linkkien avulla.
DAX-kyselyiden ymmärtämisestä on hyötyä, sillä esimerkiksi DAX-gurut Marco Russo ja Alberto Ferrari käyttävät DAX-kyselyitä omilla sivustoillaan. Ks. esimerkiksi tämä FILTER-funktion ohje. Heidän sivustoilla esiintyy myös DAX.do -kyselytyökalu, jonka avulla sivuilla olevia esimerkkikyselyitä pystyy testailemaan.