Quantcast
Channel: Guru-vinkki – HExcelligent.fi
Viewing all 20 articles
Browse latest View live

VBA ja kooltaan muuttuvat Excel-taulukot

$
0
0

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:

Range(”B2:B80”).Font.Bold = True
Range(”C2:C80”).Copy

Ongelmaa on voitu pyrkiä ratkaisemaan esimerkiksi suorittamalla operaatioita ylisuurille alueille (mutta entä jos sarakkeet siirtyvät):

Range(”B2:B100000”).Font.Bold = True
Range(”C2:C100000”).Copy

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):

Range(”Tammi”).Font.Bold = True
Range(”Helmi”).Copy

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.

esimerkkitaulukko

 

Taulukko täytetään päivittäin ja jokaisen päivän päätteeksi makro kopioi tiedot kahteen eri luetteloon:

  1. Rivit kopioidaan Lukemahistoria -nimisen taulukon jatkeeksi.Lukemahistoria
  2. Summarivin arvot kopioidaan Päiväsummat -nimisen luettelon jatkeeksi.Päiväsummat

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 Lukemahistoria-taulun Koodi-otsikkoon 
Application.Goto reference:=”Lukemahistoria[[#Headers],[Koodi]]

’ 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

’ Tyhjennetään Lukemat-taulukon tietorivit
Application.Goto reference:=”Lukemat[#Data]
Selection.ClearContents

’ 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 Range(”Lukemat[[#All],[Lukema A]:[Lukema C]]”).Select
Lukemat-taulukon Totals-rivin Lukema A – Lukema C –sarakkeiden valitseminen Range(”Lukemat[[#Totals],[Lukema A]:[Lukema C]]”).Select

Löydät lisätietoja jäsennetyistä viittauksista Microsoftin ohjeartikkelista: Kaavojen käyttäminen Excel-taulukoissa



Uudistettu näppärä Excel-lomakalenteri

$
0
0

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.

jaksot

Lomajaksot vievät näytöllä paljon tilaa, joten saat ne piiloon Excel-taulukon yllä olevalla miinus-painikkeella ja vastaavasti esiin plussalla.

jaksojen piilotus

 

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ää.

yhteenveto

Lataa uusi versio:

Kommentoithan, jos huomaat bugeja.

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: :)

Löydät muita HExcelligent-työkaluja täältä.


Kohdealueen kuvaaminen Excelissä (Offset)

$
0
0

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)

offsetalue

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.


Dynaamisen Excel-kaavion luonti

$
0
0

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).

kaavion luonti

Jos olet muodostanut kaavan, joka laskee halutun alueen luvut yhteen, kopioi kaavasta talteen OFFSET-funktio. Tulet tarvitsemaan funktiota hetken kuluttua.

kopioi offset-funktio

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.

määritä nimi

(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).

select data

Valitse vielä Edit (Muokkaa).muokkaa arvosarjaa

 

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ä.

määritä aluenimi kaavion taustalle

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.


Uusi funktio Excelissä: kaava tekstiksi

$
0
0

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ä:

formulatext

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):

=ISNUMBER(FIND(”[”;FORMULATEXT(A1)))
=ONLUKU(ETSI(”[”;KAAVA.TEKSTI(A1)))

use formula to

Dokumentointi

Funktiota voisi hyödyntää hankalien kaavojen dokumentoinnissa.

dokumentointi

 

Hmmm … olikohan tämänkertainen juttuni turha? A) Eihän kukaan lue ohjeita, vaikka joku niitä kirjoittaisi. B) Kukaan ei taatusti dokumentoi.

Muita ideoita?


Yksilöllisten arvojen määrä (osa 2: Power Pivot)

$
0
0

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.

alkuperäinen data

Taulun linkitys Power Pivotiin

Jotta pivot-taulukossa voi käyttää distinct count yhteenvetofunktiota, taulukko pitää ensin linkittää Power Pivotin puolelle.

  1. Valitse yksi solu taulukon sisältä.
  2. Valitse PowerPivot > Add to Data Model (Lisää tietomalliin). Excel 2010 –versiossa käytetään komentoa Create Linked Table (Luo linkitetty taulukko).add to data model
  3. 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).pivotin luonti
  4. 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ä.pivotti eka
  5. Vaihda yhteenvetofunktioksi Distinct Count:distinct

Ja homma on hoidettu! Kannatusjäseniä on kahdesta eri postitoimipaikasta, Espoosta ja Helsingistä.

valmis

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.

luo pivot-taulukko


Osittajan valinnat Excelin soluihin

$
0
0

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:

=CUBERANKEDMEMBER(”yhteyden_nimi”;  osittajan_nimi;  n)

Kaava antaa tulokseksi virheilmoituksen, jos n on suurempi kuin valintojen määrä. Virheen voi estää käyttämällä IFERROR (JOSVIRHE) -funktiota:

=IFERROR(CUBERANKEDMEMBER(”yhteyden_nimi”;  osittajan_nimi;  n); ””)

Kun kirjoitat funktiota, Excel avustaa näyttämällä yhteyden (connection) nimen, kun olet kirjoittanut ensimmäisen lainausmerkin:

avuste1

Vastaavasti saat esiin työkirjasi osittajien nimet, kun kirjoitat toisen argumentin alkuun sl-kirjaimet (suomenkielisessä os):

avuste2

 

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.

=IFERROR(CUBERANKEDMEMBER(”ThisWorkbookDataModel”;  Slicer_ProductName;  ROW(A1)); ””)

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.

kaava

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

  1. Siirry VBA-Editorin puolelle Alt+F11 -näppäinyhdistelmällä.
  2. Lisää makromoduuli valitsemalla komento Insert > Module.
  3. Kopioi edellä mainitulta nettisivulta The UDF -otsikon alta löytyvä koodi lisäämääsi koodimoduuliin.
  4. 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.

funktio

Tarkistat osittajan nimen pikavalikosta komennolla Slicer Settings (Osittajan asetukset).

osittajan nimi

Kopioin http://www.jkp-ads.com/Articles/slicers05.asp -sivulta koodin alle, jos kyseinen sivu ei ole käytettävissä:

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 ja MATCH ne yhteen soppii

$
0
0

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?

VLOOKUP perinteisesti

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:

=VLOOKUP(B1; Data; MATCH(A2; Data[#Headers]; 0); FALSE)

… ja huomenna viedään pussauskoppii … match made in heaven.



Kotimaan ja ulkomaan päivärahat Excelissä

$
0
0

Twitterissä heitettiin kysymys:

Vastaukseni:

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.

Lataa omaksesi, kokeile ja tutki: Kotimaan ja ulkomaan päivärahat.xlsx

Työkirjan Perustiedot-taulukossa ylläpidetään laskentaan vaikuttavia parametreja sekä ulkomaan päivärahataulukkoa.

perustiedot

Perustiedot vaikuttavat päivärahalaskelmiin. Ulkomaan päivärahalaskelmaan voi esimerkiksi valita vain niitä maita ja alueita, jotka on lueteltu perustietovälilehdellä.

ulkomaan

 

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öydät muita HExcelligent-työkaluja täältä.


Puolueet pikajuoksuradalla Excelissä

$
0
0

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:

  1. Tein palkkikaavion, jossa oli kaksi arvosarjaa (täyspitkä sarja kuvaamaan juoksurataa ja kannatusprosenttia kuvaava sarja).lähtötilanne
  2. Määritin, että palkit peittävät toisensa 100 prosenttisesti (overlap) ja muotoilin prosenttiarvoa kuvaavan sarjan näkymättömäksi.
    vaihe2
  3. 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.vaihe3
  4. 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”).muotoilu
  5. 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.


20151126 päivämääräksi Excelissä

$
0
0

Mikä avuksi, kun aineiston päiväykset ovat ”vvvvkkpp” tai ”ppkkvvvv” -muodossa ja ne pitäisi saada muunnettua Excelissä päivämääriksi?

Ohje:

  1. Valitse alue, jonka haluat muuntaa (kuvassa A2:A5).
  2. Anna komento Data > Text to Columns (Tiedot > Teksti sarakkeisiin) ja siirry ohjauksen kolmanteen vaiheeseen (Step 3 of 3).
  3. Kerro missä muodossa päivämäärät ovat (kuvassa YMD) ja määritä kohdesolu (kuvassa B2) ja valitse Finish (Valmis)

pvm
Suorastaa raivostuttavan simppeli vinkki, vai mitä? ;)


Epäsuora viittaus Excelissä

$
0
0

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.

EPÄSUORA

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.


Merkin tai merkkijonon esiintymien lukumäärä Excelin solussa

$
0
0

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

pilkkujen lkm

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

merkkijonon lukumäärä

Suomenkielisessä versiossa kaava on:

=( PITUUS( A4 ) – PITUUS( VAIHDA( A4; B1;  ”” ) ) ) / PITUUS( B1 )

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ä.


Monitasoinen numeroitu luettelo Excelissä

$
0
0

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ä.

otsikoiden syöttö

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.

=IF( ISTEXT(D2);  A2;  IF( ISTEXT(E2); A2 & ”.” & B2; ”” ) )
=JOS( ONTEKSTI(D2);  A2;  JOS( ONTEKSTI(E2); A2 & ”.” & B2; ”” ) )

Esimerkkitiedosto

Lataa tiedosto: Monitasoinen luetteloesimerkki.xlsx

Esimerkkitiedoston C-sarakkeessa on ehdollinen muotoilu (conditional formatting), joka lihavoi numeeriset solut eli 1-tason aiheiden numerot. D-sarake on lihavoitu tavallisen muotoilun avulla.


Power BI && Excel Self-Service BI -blogeja

$
0
0

Kokosin linkkilistan hyödyllisistä Power BI ja Excel Self-Service BI -aiheisista blogeista. Toivottavasti kommentoit, jos tiedät muita maininnan arvoisia blogeja tai sivustoja.

Power BI

Microsoft Power BI blog

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.

power bi team blog

Power BI Community blog

Microsoft Power BI yhteisöön rekisteröityneet jäsenet kirjoittavat blogijuttuja tähän yhteisöblogiin. Blogissa jaetaan myös tietoja ilmaisista webinaareista.

power bi community blog

Power BI Tips and Tricks

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.

blogilinkki

Power BI && Excel Self-Service BI

powerpivot(pro)

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

powerpivotpro

The Ken Puls (Excelguru) Blog

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.

ken puls

Excelerator BI

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.

excelerator

Erik Svensen

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.

erik svensen

Office blogs – Excel-blogit

Microsoftin virallinen Office-blogi, jossa on viimeaikoina ollut Excelin osalta lähinnä vain ja ainoastaan Self-Service BI -aihepiiriin liittyviä artikkeleita.

office blogs

BI && Power BI && Excel Self-Service BI

Kasper de Jonge Microsoft BI Blog

Kasper de Jonge työskentelee Microsoftilla Analysis Services tiimissä ja koittaa myös runsaasti Power BI:stä sekä esimerkiksi DAX-kielestä.

kasper de jonge

Chris Webb’s BI Blog

Chris Webb kirjoittaa muiden teknisten BI-aiheiden lisäksi runsaasti Power Queryn ja Power BI Desktopin kyselyeditorin M-kielestä.

chris webb

SQL Chick

Melissa Coates kirjoittaa pääasiassa teknisiä blogeja aiheista: Microsoft BI, tietovarastot, dataintegraatiot, datan analysointi sekä visualisointi.

sql chick

Gerhard Brueckl’s BI Blog

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.

gerhard

SQLBI Articles

Marco Russon ja Alberto Ferrarin yrityksen blogi, jossa he kirjoittavat erilaisten teknisten BI-aiheiden lisäksi Power BI:stä.

sqlbi

SQLBlog.com

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/

sql blog

business intelligist

Nimettömänä pysyttelevän henkilön tai henkilöiden tekninen BI blogi.

business intelligist

DAX

DAX Patterns

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.

dax patterns

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.

BlueGranite

BlueGranite kirjoittaa aktiivisesti artikkeleita myös Power BI -aihepiiristä erilaisten big data, SQL Server, etc. artikkeleiden lisäksi.

blue granite

 

 



VLOOKUP vai INDEX ja MATCH?

$
0
0

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:

=VLOOKUP( Etsittävä tieto;  Hakutaulu;  Sarakenumero;  Hakutyyppi  )

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.

kunnat

VLOOKUP:in ongelmat

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. VLOOKUP on hidas, jos dataa on runsaasti ja hakuja tehdään paljon.
  6. Kun haluat poimia vaakasuuntaiselta alueelta, joudut käyttämään eri funktiota eli HLOOKUP (VHAKU) -funktiota.
  7. 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 poimitaanRivinumero )

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:

=INDEX( Kunnat[Väkiluku]; MATCH( ”010”;  Kunnat[Kuntanro];  0 ) )

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!

kunnat-funktioineen

INDEX ja MATCH -yhdistelmän edut

  1. 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.
  2. Kaava ei voi poimia väärästä sarakkeesta, sillä haku perustuu sarakkeen otsikkoon. Jos sarake häviää datasta, kaava antaa virheilmoituksen.
  3. 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
  4. 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).
  5. 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
  6. Jos haluat poimia vaakasuuntaiselta alueelta, voit käyttää samaa INDEX ja MATCH -funktoiden yhdistelmää eli funktioille annettavat alueet voivat olla myös rivejä.
  7. 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ä.

matriisikaava


SUM, SUBTOTAL vai AGGREGATE?

$
0
0

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.

summa-piilotettuja

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)

subtotal-funktion-koodit

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.

piilotettuja-riveja

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)

aggregate-koodit

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.

mita-jatetaan-huomiotta

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).

piilotetut-ja-virheet

Hienoa, että sekä SUBTOTAL että AGGREGATE osaavat laskea tuloksia suodatuksen tulosluettelosta! Hyödyllisiä molemmat.


VLOOKUP vai CHOOSE?

$
0
0

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:

aputaulut
Seuraavassa on puolestaan CHOOSE (VALITSE.INDEKSI) -esimerkki, jossa erillisiä aputauluja ei tarvita:

choose

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.


Power Query -taikoja

$
0
0

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.

lahtodata

Tulokseksi halutaan siis jotakin alla olevan kaltaista:

vaihtoehtoiset-ratkaisust

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):

dataanimalgroupsApukyselyiden 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ä.

  1. 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
  2. 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.
  3. Valitse seuraavaksi yksi solu SourceData-aineiston sisältä ja aloita jälleen kyselyn luonti From Table -komennolla.
  4. 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!unpivot-other
  5. Tuloksen pitäisi näyttää tältä:unpivotin-tulos
  6. 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.

  1. Valitse Excelissä data-kyselyn päältä Merge.merge
  2. 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.
    merge-ikkuna
  3. Laajenna esiin Group -sarake. Poista rasti kohdasta Use original column name as prefix, jottei sarakkeen nimen eteen tule NewColumn-etuliitettä.
    expand-column
  4. Kun eläinryhmät (group) on yhdistetty data-aineistoon, tuloksen pitäisi näyttää tältä:
    expandin-jalkeenEdellä 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.
  5. Seuraavaksi valitaan komento Transform > Group By ja lasketaan summat ryhmien ja päivien perusteella. Group By -ikkunassa tehdään seuraavat valinnat:
    group-ikkuna
    Koska ryhmityksissä ei ole mukana Animal-saraketta, se tulee katoamaan tulosjoukosta:
    groupin-jalkeen
  6. 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.)
    pivot
  7. Lopputulos:
    valmis-lopputulos

Power BI Desktop – uusi DAX-kyselynäkymä

$
0
0

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]

Taulukko:
SalesPerson =
FILTER( Employee, Employee[IsSalesPerson] = ”Yes” )

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ä EVALUATE on 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.

näkymä

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.

define all measures in this table

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.

muokattu kaavaa

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.

uusi mittari

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.
      demifine and evaluate

    • Evaluate (Arvioi) luo kyselyn, joka näyttää mittarin tuloksen tulosjoukossa. Evaluate kirjoittaa koodin SUMMARIZECOLUMNS-funktiolla eikä käyttämällä {} -sulkeita.

      evaluate measure

      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ä.

pikakysely 100 ensimmäistä riviä

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 measures

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

info tables

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ä.

Kiitos lukemisesta!

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.

  •  

Viewing all 20 articles
Browse latest View live