DAXin yleiskatsaus
DAX (Data Analysis Expressions) on kaavalausekekieli, jota käytetään Analysis Servicesissä, Power BI:ssä ja Excelin Power Pivotissa. DAX-kaavat sisältävät funktioita, operaattoreita ja arvoja, jotka suorittavat kehittyneitä laskutoimituksia ja kyselyitä tiedoille, jotka ovat niihin liittyvissä taulukkotietomallien taulukoissa ja sarakkeissa.
Tämä artikkeli sisältää vain perusesittelyn DAX-kielen tärkeimpiin käsitteisiin. Siinä kuvataan DAXia siksi, että se koskee kaikkia sitä käyttäviä tuotteita. Jotkin toiminnot eivät välttämättä koske tiettyjä tuotteita tai käyttötapauksia. Katso tuotteesi dokumentaatiosta, miten DAXia käytetään kyseisessä tuotteessa.
Laskutoimitukset
DAX-kaavoja käytetään mittareissa, lasketuissa sarakkeissa, lasketuissa taulukoissa ja rivitason suojauksessa.
Mittarit
Mittarit ovat dynaamisia laskentakaavoja, joissa tulokset muuttuvat kontekstista riippuen. Mittareita käytetään raportoinnissa, joka tukee mallitietojen yhdistämistä ja suodatusta useiden määritteiden, kuten Power BI -raportin tai Excelin pivot-taulukon tai -kaavion, avulla. Mittareita luodaan käyttämällä DAX-kaavariviä mallin suunnittelutoiminnossa.
Mittarin kaava voi käyttää vakiomuotoiset koostefunktiot, jotka on luotu automaattisesti käyttämällä Autosum-ominaisuutta, kuten COUNT tai SUM, tai voit määrittää oman kaavan DAX-kaavarivin avulla. Nimetyt mittarit voidaan välittää argumenttina muihin mittareihin.
Kun määrität kaavan mittarille kaavarivillä, Työkaluvihje-ominaisuus näyttää esikatselun siitä, mitä tulokset ovat nykyisessä kontekstissa, mutta muuten tulokset eivät näy heti missään. Laskutoimituksen (suodattuja) tuloksia ei voi tarkastella heti, koska mittarin tulosta ei voi määrittää ilman kontekstia. Mittarin laskeminen edellyttää raportointiasiakassovellusta, joka pystyy tarjoamaan kontekstin, jota tarvitaan kuhunkin soluun liittyvien tietojen noutamiseen ja sitten kunkin solun lausekkeen laskemiseen. Asiakas voi olla Excelin pivot-taulukko tai -kaavio, Power BI -raportti tai DAX-kyselyn taulukkolauseke SQL Server Management Studiossa (SSMS).
Asiakkaasta riippumatta tulosten kullekin solulle suoritetaan erillinen kysely. Toisin sanoen jokainen pivot-taulukon rivi- ja sarakeotsikoiden yhdistelmä tai Power BI -raportin osittajien ja suodattimien valikoima muodostaa erilaisen tietojen alijoukon, jolle mittari lasketaan. Käytetään esimerkiksi tätä hyvin yksinkertaista mittarikaavaa:
Total Sales = SUM([Sales Amount])
Kun käyttäjä sijoittaa TotalSales-mittarin raporttiin ja sijoittaa Product-taulukon Product Category -sarakkeen Filters-taulukkoon, myynnin summa lasketaan ja näytetään kullekin tuoteluokalle.
Lasketuista sarakkeista poiketen mittarin syntaksi sisältää mittarin nimen ennen kaavaa. Juuri annetun esimerkin nimi Total Sales näkyy ennen kaavaa. Kun olet luonut mittarin, nimi ja sen määritys näkyvät raportointiasiakassovelluksen Kentät-luettelossa, ja perpektiivistä ja rooleista riippuen ne ovat kaikkien mallin käyttäjien käytettävissä.
Lisätietoja on seuraavissa aiheissa:
Mittarit Power BI Desktopissa
Mittarit Analysis Servicesissä
Mittarit Power Pivotissa
Lasketut sarakkeet
Laskettu sarake on sarake, jonka lisäät aiemmin luotuun taulukkoon (mallin suunnitteluohjelmassa) ja joka luo sarakkeen arvot määrittävän DAX-kaavan. Kun laskettu sarake sisältää kelvollisen DAX-kaavan, arvot lasketaan kullekin riville heti, kun kaava on syötetty. Arvot tallennetaan sitten muistissa olevaa tietomallia varten. Esimerkiksi Päivämäärä-taulukossa, kun kaava syötetään kaavariville:
= [Calendar Year] & " Q" & [Calendar Quarter]
Taulukon kunkin rivin arvo lasketaan ottamalla arvot Kalenterivuosi-sarakkeesta (samasta päivämäärätaulukosta), lisäämällä välilyönti ja iso Q-kirjain ja lisäämällä sitten arvot Calendar Quarter -sarakkeeseen (samaan päivämäärätaulukkoon). Lasketun sarakkeen kunkin rivin tulos lasketaan heti, ja se näkyy esimerkiksi muodossa 2017 Q1. Sarakearvot lasketaan uudelleen vain, jos taulukko tai siihen liittyvä taulukko käsitellään (päivitetään) tai mallin lataus poistetaan muistista ja ladataan sitten uudelleen kuten silloin, kun Power BI Desktop -tiedosto suljettaan ja avataan uudelleen.
Lisätietoja on seuraavissa aiheissa:
Lasketut sarakkeet Power BI Desktopissa
Lasketut sarakkeet Analysis Servicesissä
Lasketut sarakkeet Power Pivotissa.
Lasketut taulukot
Laskettu taulukko on laskettu objekti, joka perustuu kaavalausekkeeseen, joka on johdettu saman mallin joistakin tai kaikista muista taulukoista. Sen sijaan, että kyselyt ja arvot ladaisiin uuden taulukkosi sarakkeisiin tietolähteestä, DAX-kaava määrittelee taulukon arvot.
Lasketuista taulukoista voi olla hyötyä rooliulottuvuudessa. Esimerkki on Päivämäärä-taulukko, kuten OrderDate, ShipDate tai DueDate viiteavainsuhteesta riippuen. Luomalla lasketun taulukon vain ShipDate-kohteelle saat erillisen taulukon, joka on käytettävissä kyselyille ja yhtä toimintakunnon kuin mikä tahansa muu taulukko. Lasketut taulukot ovat hyödyllisiä myös määritettäessä suodatettua rivijoukkoa tai muiden aiemmin luotujen taulukoiden sarakkeiden ali- tai yläjoukkoa. Näin voit säilyttää alkuperäisen taulukon ennallaan samalla, kun luot kyseisen taulukon muunnelmia, jotka tukevat tiettyjä tilanteita.
Lasketut taulukot tukevat suhteita muihin taulukoihin. Lasketun taulukon sarakkeilla on tietotyypit ja muotoiluja, ja ne voivat kuulua tietoluokkaan. Laskettuja taulukoita voidaan nimetä, ja ne voidaan näyttää tai piilottaa samalla tavalla kuin muutkin taulukot. Lasketut taulukot lasketaan uudelleen, jos mikään niitä taulukoista, joista laskettu taulukko saa tietonsa, ladataan uudelleen tai päivitetään.
Lisätietoja on seuraavissa aiheissa:
Lasketut taulukot Power BI Desktopissa
Lasketut taulukot Analysis Servicesissä.
Rivitason suojaus
Rivitason suojauksessa DAX-kaavan on arvioitava totuusarvo TOSI/EPÄTOSI, joka määrittää, mitkä rivit voidaan palauttaa tietyn roolin jäsenten tekemän kyselyn tuloksissa. Esimerkiksi Myynti-roolin jäsenille Customers-taulukko sisältää seuraavan DAX-kaavan:
= Customers[Country] = "USA"
Myyntiroolin jäsenet voivat tarkastella vain Yhdysvaltojen asiakkaiden tietoja, ja koosteet, kuten SUM palautetaan vain Yhdysvalloissa olevien asiakkaiden osalta. Rivitason suojaus ei ole käytettävissä Excelin Power Pivotissa.
Kun määrität rivi-tason suojausta käyttämällä DAX-kaavaa, luot sallitun rivijoukon. Tämä ei estä muiden rivien käyttöä. niitä ei yksinkertaisesti palauteta sallitun rivijoukon osana. Muut roolit voivat sallia DAX-kaavan pois jätetyille riveille pääsyn. Jos käyttäjä on toisen roolin jäsen ja tämän roolin rivitason suojaus sallii tietyn rivijoukon käyttämisen, käyttäjä voi tarkastella kyseisen rivin tietoja.
Rivitason suojauksen kaavat koskevat määritettyjä rivejä sekä liittyviä rivejä. Kun taulukolla on useita suhteita, suodattimet ottavat käyttöön aktiivisena olevan suhteen suojauksen. Rivitason suojauksen kaavat leikkaavat muita liittyviä taulukoita varten määritettyjä kaavoja.
Lisätietoja on seuraavissa aiheissa:
Rivitason suojaus (RLS) Power BI:ssä
Roolit Analysis Servicesissä
Kyselyt
DAX-kyselyitä voidaan luoda ja suorittaa SQL Server Management Studiossa (SSMS) ja avoimen lähdekoodin työkaluilla, kuten DAX Studiolla (daxstudio.org). Toisin kuin DAX-laskentakaavat, jotka voidaan luoda vain taulukkomuotoisissa tietomalleissa, DAX-kyselyt voidaan suorittaa myös Analysis Servicesin monidimensiomalleja vasten. DAX-kyselyt ovat usein helpompia kirjoittaa ja tehokkaampia kuin Multidimensional Data Expressions (MDX) -kyselyt.
DAX-kysely on lauseke, joka muistuttaa T-SQL:n SELECT-lauseketta. DAX-kyselyn perustyyppi on laske-lauseke. Esimerkiksi.
EVALUATE
( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC
Palauttaa Tuloksissa taulukon, jossa luetellaan vain ne tuotteet, joiden Lokero tyStockLevel on pienempi kuin 200, nousevassa järjestyksessä EnglishProductNamen mukaan.
Voit luoda mittareita osana kyselyä. Mittarit ovat olemassa vain kyselyn ajan. Lisätietoja on artikkelissa DAX-kyselyt.
Reseptit
DAX-kaavat ovat välttämättömiä laskettujen sarakkeiden ja mittareiden laskutoimitusten luonnille ja tietojen suojaamiselle rivitason suojauksen avulla. Voit luoda kaavoja lasketuille sarakkeille ja mittareille käyttämällä kaavariviä mallin suunnittelutoimintoikkunan yläreunassa tai DAX-editorissa. Jos haluat luoda rivitason suojauksen kaavoja, käytä Roolien hallinta- tai Roolien hallinta -valintaikkunaa. Tämän osion tietojen tarkoituksena on esitellä sinulle DAX-kaavojen perusteet.
Kaavan perusteet
DAX-kaavat voivat olla hyvin yksinkertaisia tai varsin monimutkaisia. Seuraavassa taulukossa on joitakin esimerkkejä yksinkertaisista kaavoista, joita voidaan käyttää lasketussa sarakkeessa.
Kaava | Määritelmä |
---|---|
= TODAY() |
Lisää tämän päivän päivämäärä lasketun sarakkeen jokaiselle riville. |
= 3 |
Lisää arvon 3 lasketun sarakkeen jokaiselle riville. |
= [Column1] + [Column2] |
Lisää arvot samalle riville sarakkeissa [Column1] ja [Column2] ja sijoittaa tulokset samalle riville laskettuun sarakkeeseen. |
Oli luomasi kaava sitten yksinkertainen vai monimutkainen, voit käyttää seuraavia vaiheita kaavaa luodessasi:
Kunkin kaavan on alettava yhtäläisyysmerkillä (=).
Voit joko kirjoittaa tai valita funktiolle nimen tai kirjoittaa lausekkeen.
Kirjoita haluamasi funktion tai nimen ensimmäiset kirjaimet, ja automaattinen täydennys näyttää luettelon käytettävissä olevista funktioista, taulukoista ja sarakkeista. Lisää kohde automaattisen täydennysluettelon kaavaan painamalla sarkainta.
Voit myös napsauttaa Fx-painiketta, jolloin näkyviin tulee luettelo käytettävissä olevista funktioista. Jos haluat valita funktion avattavasta luettelosta, korosta kohde nuolinäppäimillä ja valitse OK lisätäksesi funktion kaavaan.
Anna funktiolle argumentit valitsemalla ne mahdollisten taulukoiden ja sarakkeiden avattavasta luettelosta tai kirjoittamalla arvot.
Tarkista syntaksivirheet: varmista, että kaikki sulkeet on suljettu ja että sarakkeisiin, taulukoihin ja arvoihin on viitattu oikein.
Hyväksy kaava painamalla ENTER.
Muistiinpano
Lasketussa sarakkeessa arvot täytetään sarakkeeseen heti, kun olet syöttänyt kaavan ja kaava on vahvistettu. Mittarissa ENTER-näppäimen painaminen tallentaa mittarin määritykset taulukkoon. Jos kaava on virheellinen, näkyviin tulee virhe.
Tässä esimerkissä tarkastellaan kaavaa mittarissa, jonka nimi on Days in Current Quarter:
Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))
Tämän mittarin avulla luodaan vertailusuhde keskeneräisen jakson ja edellisen jakson välille. Kaavassa on otettava huomioon kuluneen jakson osuus ja verrattava sitä samaan suhteeseen edellisessä jaksossa. Tässä tapauksessa [Days Current Quarter to Date]/[Days in Current Quarter] antaa kuluvan kauden tähän mennessä kuluneen osuuden.
Tämä kaava sisältää seuraavat elementit:
Kaavan elementti | Kuvaus |
---|---|
Days in Current Quarter |
Mittarin nimi. |
= |
Yhtäläisyysmerkki (=) aloittaa kaavan. |
COUNTROWS |
COUNTROWS laskee päivämäärätaulukon rivien määrän |
() |
Avoin ja sulkevä sulje määrittää argumentit. |
DATESBETWEEN |
DATESBETWEEN-funktio palauttaa päivämäärätaulukon päivämääräsarakkeen kunkin arvon viimeisen päivämäärän väliset päivämäärät. |
'Date' |
Määrittää päivämäärätaulukon. Taulukot ovat heittomerkkeissä. |
[Date] |
Määrittää päivämäärätaulukon päivämääräsarakkeen. Sarakkeet ovat hakasulkeissa. |
, |
|
STARTOFQUARTER |
STARTOFQUARTER-funktio palauttaa vuosineljänneksen alkupäivämäärän. |
LASTDATE |
LASTDATE-funktio palauttaa vuosineljänneksen viimeisen päivämäärän. |
'Date' |
Määrittää päivämäärätaulukon. |
[Date] |
Määrittää päivämäärätaulukon päivämääräsarakkeen. |
, |
|
ENDOFQUARTER |
ENDOFQUARTER-funktio |
'Date' |
Määrittää päivämäärätaulukon. |
[Date] |
Määrittää päivämäärätaulukon päivämääräsarakkeen. |
Kaavan automaattisen täydennystoiminnon käyttäminen
Automaattinen täydennys auttaa antamaan kelvollisen kaavan syntaksin antamalla sinulle vaihtoehtoja kaavan kullekin osalle.
Voit käyttää kaavan automaattista täydennystä olemassa olevan kaavan keskellä sisäkkäisten funktioiden avulla. Heti lisäyskohtaa ennen olevaa tekstiä käytetään avattavan luettelon arvojen näyttämiseen, ja kaikki lisäyskohdan jälkeiset tekstit pysyvät muuttumattomina.
Automaattinen täydennys ei lisää funktioiden loppusulkeita tai lisää automaattisesti vastaavia sulkeita. Sinun on varmistettava, että kukin funktio on syntaktisesti oikein, tai et voi tallentaa tai käyttää kaavaa.
Useiden funktioiden käyttäminen kaavassa
Voit sijoittaa funktioita sisäkkäin, mikä tarkoittaa sitä, että käytät yhden funktion tuloksia toisen funktion argumenttina. Voit määrittää funktioille enintään 64 tasoa lasketuissa sarakkeissa. Sisäkkäinen luominen voi kuitenkin vaikeuttaa kaavojen luontia tai vianmääritystä. Monet funktiot on suunniteltu käytettäviksi ainoastaan sisäkkäisten funktioiden muodossa. Nämä funktiot palauttavat taulukon, jota ei voi suoraan tallentaa tuloksena. se on annettava taulukkofunktion syötteenä. Esimerkiksi funktiot SUMX, AVERAGEX ja MINX edellyttävät taulukkoa ensimmäisenä argumenttina.
Funktiot
Funktiolla on lausekkeessa nimetty kaava. Useimmilla funktioilla on syötteinä pakolliset ja valinnaiset argumentit, joita kutsutaan myös parametreiksi. Kun funktio suoritetaan, palautetaan arvo. DAX sisältää funktioita, joiden avulla voit suorittaa laskutoimituksia päivämäärien ja kellonaikojen avulla, luoda ehdollisia arvoja, käsitellä merkkijonoja, tehdä hakuja suhteiden perusteella ja suorittaa toistuvia laskutoimituksia taulukolle. Jos Excel-kaavat ovat sinulle tuttuja, monet näistä funktioista vaikuttavat hyvin samankaltaisilta. DAX-kaavat ovat kuitenkin erilaisia seuraavilla tärkeillä tavoilla:
DAX-funktio viittaa aina täydelliseen sarakkeeseen tai taulukkoon. Jos haluat käyttää vain tiettyjä arvoja taulukosta tai sarakkeesta, voit lisätä kaavaan suodattimia.
Jos laskutoimituksia on mukautettava rivikohtaisesti, voit suorittaa kontekstin mukaan vaihtelevia laskutoimituksia käyttämällä nykyistä rivin arvoa tai liittyvää arvoa eräänlaisena parametrina. Jos haluat tietää, miten nämä funktiot toimivat, lue tämän artikkelin Konteksti-osio .
DAX sisältää monia funktioita, jotka palauttavat arvon sijasta taulukon. Taulukkoa ei näytetä raportointiasiakkaassa, mutta sitä käytetään luomaan syötteitä muille funktioille. Voit esimerkiksi noutaa taulukon ja laskea sitten sen erilliset arvot tai laskea dynaamisia summia suodatettavissa taulukoissa tai sarakkeissa.
DAX-funktiot sisältävät erilaisia aikatietojen funktioita. Näiden funktioiden avulla voit määrittää tai valita päivämääräalueita ja suorittaa näihin päivämääriin tai aikaväliin perustuvia dynaamisia laskutoimituksia. Voit esimerkiksi verrata rinnakkaisten jaksojen summia.
Koostefunktiot
Koostamisfunktiot laskevat (skalaariarvon), kuten määrän, summan, keskiarvon, minimin tai suurimman arvon kaikille lausekkeen määrittämille sarakkeiden tai taulukon riveille. Lisätietoja on artikkelissa Koostefunktiot.
Päivämäärä ja aika -funktiot
DAXin päivämäärä ja aika -funktiot muistuttavat Microsoft Excelin päivämäärä ja aika -funktioita. DAX-funktiot perustuvat kuitenkin päivämäärä/aika-tietotyyppiin, joka alkaa 1.3.1900. Lisätietoja on kohdassa Päivämäärä ja aika -funktiot.
Suodatinfunktiot
DAXin suodatinfunktiot palauttavat tiettyjä tietotyyppejä, hakevat arvoja liittyvistä tyypeistä ja suodattavat liittyvien arvojen mukaan. Hakufunktiot toimivat käyttämällä taulukoita ja suhteita tietokannan tapaan. Suodatusfunktioiden avulla voit käsitellä tietokontekstia ja näin luoda dynaamisia laskutoimituksia. Lisätietoja on artikkelissa Suodatinfunktiot.
Talousfunktiot
DAXin talousfunktioita käytetään kaavoissa, jotka suorittavat taloudellisia laskelmia, kuten nykyisen nettoarvon ja korkokannan. Nämä funktiot muistuttavat Microsoft Excelin talousfunktioita. Lisätietoja on ohjeaiheessa Talousfunktiot.
Tietofunktiot
Tietofunktio tarkastelee argumentiksi määritettyä solua tai riviä ja kertoo, vastaako arvo odotettua tyyppiä. Esimerkiksi ISERROR-funktio palauttaa arvon TRUE, jos viitattava arvo sisältää virheen. Lisätietoja on ohjeaiheessa Tietofunktiot.
Loogiset toiminnot
Loogiset funktiot palauttavat tietoja lausekkeen arvoista. Esimerkiksi TRUE-funktio kertoo, palauttaako arvioitava lauseke arvon TRUE. Lisätietoja on ohjeaiheessa Loogiset funktiot.
Matemaattiset ja trigonometriset funktiot
DAXin matemaattiset ja trigonometriset funktiot muistuttavat hyvin paljon Excelin matemaattisia ja trigonometrisiä funktioita. DAX-funktioiden käyttämissä numeerisissa tietotyypeissä on joitakin pieniä eroja. Lisätietoja on ohjeaiheessa Matemaattiset funktiot.
Muut funktiot
Nämä funktiot suorittavat ainutlaatuisia toimintoja, joita ei voida määritellä millään luokalla, johon useimmat muut funktiot kuuluvat. Lisätietoja on ohjeaiheessa Muut funktiot.
Suhdefunktiot
DAXin suhdefunktioiden avulla voit palauttaa arvoja toisesta liittyvästä taulukosta, määrittää tietyn suhteen, jota käytetään lausekkeessa, ja määrittää ristiinsuodatuksen suunnan. Lisätietoja on artikkelissa Suhdefunktiot.
Tilastolliset funktiot
Tilastolliset funktiot laskevat tilastollisiin jakaumiin ja todennäköisyyteen liittyviä arvoja, kuten keskihajonnan ja permutaatioiden määrän. Lisätietoja on ohjeaiheessa Tilastofunktiot.
Tekstitoiminnot
DAXin tekstifunktiot muistuttavat hyvin paljon Excelin vastaavia. Voit palauttaa osan merkkijonosta, etsiä tekstiä merkkijonosta tai yhdistää merkkijonon arvot. DAXissa on myös funktiot päivämäärien, aikojen ja lukujen muotojen hallitsemiseen. Lisätietoja on ohjeaiheessa Tekstifunktiot.
Aikatietofunktiot
DAXin aikatietofunktioiden avulla voit luoda laskutoimituksia, jotka käyttävät sisäisiä tietoja kalentereista ja päivämääristä. Käyttämällä aika- ja päivämäärävälejä yhdessä koosteiden tai laskelmien kanssa voit luoda merkityksellisiä vertailuja vertailukelpoisille myynnin, varaston jne. ajanjaksoille. Lisätietoja on kohdassa Aikatietofunktiot (DAX).
Taulukonkäsittelyfunktiot
Nämä funktiot palauttavat taulukon tai käsittelevät olemassa olevia taulukoita. ADDCOLUMNS-funktiolla voit esimerkiksi lisätä laskettuja sarakkeita määritettyyn taulukkoon tai voit palauttaa yhteenvetotaulukon ryhmistä, joissa on SUMMARIZECOLUMNS-funktio. Lisätietoja on artikkelissa Taulukonkäsittelyfunktiot.
Muuttujat
Voit luoda muuttujia lausekkeessa käyttämällä VAR-funktiota. VAR ei ole tarkalleen ottaen funktio, se on avainsana, jonka avulla voit tallentaa lausekkeen tuloksen nimetyksi muuttujaksi. Tämä muuttuja voidaan sitten välittää argumenttina muihin mittarilausekkeisiin. Esimerkkejä:
VAR
TotalQty = SUM ( Sales[Quantity] )
Return
IF (
TotalQty > 1000,
TotalQty * 0.95,
TotalQty * 1.25
)
Tässä esimerkissä TotalQty voidaan välittää nimettynä muuttujana muihin lausekkeisiin. Muuttujat voivat olla mitä tahansa skalaaritietotyyppiä, mukaan lukien taulukot. Muuttujien käyttäminen DAX-kaavoissa voi olla todella tehokasta.
Tietotyypit
Voit tuoda tietoja malliin useista eri tietolähteistä, jotka saattavat tukea eri tietotyyppejä. Kun tuot tietoja malliin, tiedot muunnetaan yhdeksi taulukkomallin tietotyypeistä. Kun mallitietoja käytetään laskutoimituksessa, tiedot muunnetaan DAX-tietotyypiksi laskennan ajaksi ja tuloksen ajaksi. Kun luot DAX-kaavan, kaavassa käytetyt termit määrittävät automaattisesti palautetun arvon tietotyypin.
DAX tukee seuraavia tietotyyppejä:
Tietotyyppi mallissa | Tietotyyppi DAXissa | Kuvaus |
---|---|---|
Kokonaisluku | 64-bittinen (kahdeksantavuinen) kokonaislukuarvo 1, 2 | Luvut, joissa ei ole desimaaleja. Kokonaisluvut voivat olla positiivisia tai negatiivisia lukuja, mutta ne voivat olla kokonaislukuja välillä -9 223 372 036 854 775 808 (-2^63) ja 9 223 372 036 854 775 807 (2^63-1). |
Desimaaliluku | 64-bittinen (kahdeksantavuinen) reaaliluku 1, 2 | Reaaliluvut ovat lukuja, joissa voi olla desimaaleja. Reaaliluvut kattavat laajan valikoiman arvoja: Negatiiviset arvot -1,79E +308...-2,23E -308 Zero Positiiviset arvot 2,23E -308...1,79E + 308 Merkittävien numeroiden määrä on kuitenkin rajoitettu 17 desimaaliin. |
Totuusarvo | Totuusarvo | Arvo on joko Tosi tai Epätosi. |
Teksti | Merkkijono | Unicode-merkkitietomerkkijono. Voi olla merkkijono, numero tai päivämäärä, joka on esitetty tekstimuodossa. |
Päivämäärä | Päivämäärä/aika | Päivämäärät ja kellonajat hyväksytyllä tavalla esitettynä. Kaikki 1.3.1900 jälkeen tulevat päivämäärät ovat kelvollisia päivämääriä. |
Valuutta | Valuutta | Valuuttatietotyyppi sallii arvot välillä -922 337 203 685 477,5808...922 337 203 685 477,5807 neljän desimaalin kiinteällä tarkkuudella. |
– | Blank | Tyhjä on DAX-kielen tietotyyppi, joka vastaa SQL-kielen tyhjäarvoja ja korvaa ne. Voit luoda tyhjän käyttämällä TYHJÄ-funktiota ja testata tyhjät käyttämällä loogista funktiota ONTYHJÄ. |
Taulukkomuotoiset tietomallit sisältävät myös taulukon tietotyypin useiden DAX-funktioiden syötteenä tai tuloksena. Esimerkiksi FILTER-funktio käyttää taulukkoa syötteenä ja tulostaa toisen taulukon, joka sisältää vain ne rivit, jotka täyttävät suodatusehdot. Yhdistämällä taulukkofunktioita koostamisfunktioihin voit suorittaa monimutkaisia laskutoimituksia dynaamisesti määritetyille tietojoukoille.
Vaikka tietotyypit yleensä määritetään automaattisesti, on tärkeää ymmärtää, miten tietotyypit toimivat ja miten niitä käytetään erityisesti DAX-kaavoissa. Esimerkiksi kaavojen virheet tai odottamattomat tulokset johtuvat usein siitä, että käytetään tiettyä operaattoria, jota ei voi käyttää argumentissa määritetyn tietotyypin kanssa. Esimerkiksi kaava = 1 & 2
palauttaa merkkijonotuloksen 12. Kaava = "1" + "2"
palauttaa kuitenkin kokonaislukutuloksen, joka on 3.
Konteksti
Konteksti on tärkeä käsite, joka on ymmärrettävä DAX-kaavoja luotaessa. Kontekstin avulla voit suorittaa dynaamista analyysia, sillä kaavan tulokset muuttuvat nykyisen rivin tai solun valinnan ja myös siihen liittyvien tietojen mukaisiksi. Kontekstin ymmärtäminen ja kontekstin tehokas käyttö ovat tärkeitä suorituskykyisten ja dynaamisten analyysien luomisessa sekä kaavojen ongelmien vianmäärityksessä.
Taulukkomallien kaavat voidaan laskea eri kontekstissa muista suunnitteluelementeistä riippuen:
- Pivot-taulukossa tai raportissa käytetyt suodattimet
- Kaavassa määritetyt suodattimet
- Suhteet, jotka on määritetty käyttämällä erikoisfunktioita kaavassa
Kontekstityyppejä on erityyppisiä: rivikonteksti, kyselykonteksti ja suodatinkonteksti.
Rivikonteksti
Rivikonteksti voidaan ajatella "nykyisenä rivinä". Jos luot kaavan lasketussa sarakkeessa, kyseisen kaavan rivikonteksti sisältää nykyisen rivin kaikkien sarakkeiden arvot. Jos taulukko liittyy toiseen taulukkoon, sisältö sisältää myös kaikki toisen taulukon arvot, jotka liittyvät nykyiseen riviin.
Oletetaan esimerkiksi, että luot lasketun sarakkeen = [Freight] + [Tax]
, joka lisää yhteen arvot saman taulukon kahdesta sarakkeesta, Freight ja Tax. Tämä kaava hakee automaattisesti vain määritettyjen sarakkeiden nykyisen rivin arvot.
Rivikonteksti seuraa myös kaikkia taulukoiden välille määritettyjä suhteita, mukaan lukien suhteet, jotka on määritetty lasketussa sarakkeessa DAX-kaavojen avulla. Näin se määrittää, mitkä liittyvien taulukoiden rivit liittyvät nykyiseen riviin.
Esimerkiksi seuraava kaava käyttää RELATED-funktiota veroarvon noutamiseen liittyvästä taulukosta sen alueen mukaan, johon tilaus toimitettiin. Veroarvo määritetään käyttämällä nykyisen taulukon alueen arvoa, etsimällä alue liittyvästä taulukosta ja noutamalla kyseisen alueen veroprosentti liittyvästä taulukosta.
= [Freight] + RELATED('Region'[TaxRate])
Tämä kaava hakee nykyisen alueen veroprosentin Region-taulukosta ja lisää sen Freight-sarakkeen arvoon. DAX-kaavoissa ei tarvitse tietää tai määrittää tiettyä suhdetta, joka yhdistää taulukot.
Useiden rivien konteksti
DAX sisältää funktioita, jotka kertaavat taulukon laskutoimituksia. Näillä funktioilla voi olla useita nykyisiä rivejä, joilla kullakin on oma rivikontekstinsa. Pohjimmiltaan näiden funktioiden avulla voit luoda kaavoja, jotka suorittavat toimintoja rekursiivisesti sisä- ja ulkosilmukalle.
Oletetaan esimerkiksi, että mallissasi on Products-taulukko ja Sales-taulukko. Käyttäjät saattavat haluta käydä läpi koko myyntitaulukon, joka on täynnä useita tuotteita koskevia tapahtumia, ja löytää kunkin tuotteen suurimman tilatun määrän missä tahansa tapahtumassa.
DAXin avulla voit luoda yhden kaavan, joka palauttaa oikean arvon, ja tulokset päivittyvät automaattisesti aina, kun käyttäjä lisää tietoja taulukoihin.
= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])
Yksityiskohtainen esimerkki tästä kaavasta on kohdassa EARLIER.
Yhteenvetona EARLIER-funktio tallentaa rivikontekstin nykyistä toimintoa edeltäneestä toiminnosta. Funktio tallentaa aina muistiin kaksi kontekstijoukkoa: yksi kontekstijoukko edustaa kaavan sisemmän silmukan nykyistä riviä, ja toinen kontekstijoukko edustaa kaavan ulomman silmukan nykyistä riviä. DAX syöttää automaattisesti arvoja kahden silmukan välillä, jotta voit luoda monimutkaisia koosteita.
Kyselykonteksti
Kyselykonteksti viittaa sellaisen tietojen alijoukkoon, joka noudetaan implisiittisesti kaavaa varten. Kun käyttäjä sijoittaa mittarin tai esimerkiksi kentän raporttiin, moduuli tutkii rivi- ja sarakeotsikot, osittajat ja raporttisuodattimet kontekstin määrittämiseksi. Tämän jälkeen suoritetaan tarvittavat kyselyt mallitietoja vasten, jotta saadaan oikea tietojen alijoukko, tehdään kaavan määrittämät laskutoimitukset ja täytetään raportin arvot.
Koska kontekstin muutokset määräytyvät sen mukaan, minne kaava sijoitat, myös kaavan tulokset voivat muuttua. Oletetaan esimerkiksi, että luot kaavan, joka laskee yhteen Sales-taulukon Profit-sarakkeen arvot: = SUM('Sales'[Profit])
. Jos käytät tätä kaavaa Sales-taulukon lasketussa sarakkeessa, kaavan tulokset ovat samat koko taulukolle, koska kaavan kyselykonteksti on aina Sales-taulukon koko tietojoukko. Tulokset voivat tuottaa voittoa kaikilla alueilla, kaikissa tuotteissa, kaikkina vuosina ja niin edelleen.
Käyttäjät eivät kuitenkaan yleensä halua nähdä samaa tulosta satoja kertoja, vaan haluavat saada tietyn vuoden, tietyn maan, tietyn tuotteen tai jonkin näiden yhdistelmän tuoton ja sitten kokonaissumman.
Raportissa kontekstia muutetaan suodattamalla, lisäämällä tai poistamalla kenttiä ja käyttämällä osittajia. Kullekin muutokselle on kyselykonteksti, jossa mittari arvioidaan. Näin ollen sama mittarissa käytetty kaava arvioidaan eri kyselykontekstissa kullekin solulle.
Suodatinkonteksti
Suodatinkonteksti on arvojen joukko, joka on sallittu kussakin sarakkeessa tai liittyvästä taulukosta noudetuissa arvoissa. Suodattimia voidaan käyttää suunnittelutyökalun sarakkeessa tai esityskerroksessa (raporteissa ja pivot-taulukoissa). Suodattimet voidaan myös määrittää eksplisiittisesti käyttämällä kaavassa olevia suodatinlausekkeita.
Suodatinkonteksti lisätään, kun määrität suodatinrajoitteita sarakkeessa tai taulukossa sallittuun arvojoukkoon käyttämällä kaavan argumentteja. Suodatinkontekstia käytetään muiden kontekstien, kuten rivikontekstin tai kyselykontekstin, lisäksi.
Taulukkomalleissa on monia tapoja luoda suodatinkonteksti. Mallia käyttävien asiakkaiden, kuten Power BI -raporttien, kontekstissa käyttäjät voivat luoda suodattimia lennossa lisäämällä osittajia tai raporttisuodattimia rivi- ja sarakeotsikoille. Voit myös määrittää suodatinlausekkeet suoraan kaavassa, jos haluat määrittää liittyviä arvoja, suodattaa syötteinä käytettäviä taulukoita tai hakea kontekstiin laskutoimituksissa käytettävien arvojen kontekstin dynaamisesti. Voit myös tyhjentää tietyissä sarakkeissa olevat suodattimet kokonaan tai valikoivasti. Tästä on paljon hyötyä, kun luodaan kaavoja, jotka laskevat kokonaissummat.
Lisätietoja kaavojen suodattimien luomisesta on artikkelissa FILTER-funktio (DAX).
Esimerkki siitä, miten suodattimet voidaan tyhjentää kokonaissumien luontia varten, on artikkelissa ALL-funktio (DAX).
Esimerkkejä siitä, miten voit valikoivasti tyhjentää ja käyttää suodattimia kaavoissa, on artikkelissa ALLEXCEPT.
Kontekstin määrittäminen kaavoissa
Kun luot DAX-kaavan, se testataan ensin kelvollisen syntaksin osalta ja sitten varmistetaan, että kaavaan sisällytettyjen sarakkeiden ja taulukoiden nimet löytyvät nykyisestä kontekstista. Jos jotakin kaavan määrittämää saraketta tai taulukkoa ei löydy, palautetaan virhe.
Konteksti määritetään vahvistuksen (ja uudelleenlaskentaoperaatioiden) aikana edellisissä osioissa kuvatulla tavalla käyttämällä mallin käytettävissä olevia taulukoita, taulukoiden välisiä suhteita ja käytössä olevia suodattimia.
Jos olet esimerkiksi juuri tuonut joitakin tietoja uuteen taulukkoon, eikä se liity mihinkään muihin taulukoihin (etkä ole lisännyt suodattimia), nykyinen konteksti on taulukon koko sarakejoukko. Jos taulukko on linkitetty suhteilla muihin taulukoihin, nykyinen konteksti sisältää liittyvät taulukot. Jos lisäät sarakkeen taulukosta raporttiin, jossa on osittajia ja ehkä joitakin raporttisuodattimia, kaavan konteksti on raportin kunkin solun tietojen alijoukko.
Konteksti on tehokas käsite, joka voi myös vaikeuttaa kaavojen vianmääritystä. Suosittelemme, että aloitat yksinkertaisten kaavojen ja yhteyksien avulla, jotta näet, miten konteksti toimii. Seuraavassa osiossa on joitakin esimerkkejä siitä, miten kaavat käyttävät erityyppisiä konteksteja tulosten dynaamiseen palauttamiseen.
Operaattorit
DAX-kieli käyttää kaavoissa neljää erityyppistä laskentaoperaattoria:
- Vertailuoperaattorit vertailevat arvoja ja palauttavat loogisen TRUE\FALSE-arvon.
- Aritmeettiset operaattorit suorittavat aritmeettisia laskutoimituksia, jotka palauttavat numeerisia arvoja.
- Tekstin yhdistämisoperaattorit yhdistävät vähintään kaksi tekstimerkkijonoa.
- Loogiset operaattorit yhdistävät vähintään kaksi lauseketta yksittäisen tuloksen palauttamiseksi.
Tarkempia tietoja DAX-kaavoissa käytettävistä operaattoreista on kohdassa DAX-operaattorit.
Taulukoiden ja sarakkeiden käsitteleminen
Taulukkomuotoisten tietomallien taulukot näyttävät Excel-taulukoilta, mutta ne käsittelevät tietoja ja kaavoja eri tavalla:
- Kaavat toimivat vain taulukoiden ja sarakkeiden kanssa, eivät yksittäisissä soluissa, alueviittauksissa tai matriiseissa.
- Kaavat voivat käyttää suhteita liittyvien taulukoiden arvojen noutamiseen. Noudetut arvot liittyvät aina nykyiseen riviarvoon.
- Epäsäännölliset tai "vaillinaiset" tiedot eivät voi olla kuten Excel-laskentataulukossa. Taulukon kunkin rivin on sisällettävä sama määrä sarakkeita. Joillakin sarakkeilla voi kuitenkin olla tyhjiä arvoja. Excel-tietotaulukot ja taulukkomallin tietotaulukot eivät ole vaihdettavissa keskenään.
- Koska kullekin sarakkeelle on määritetty tietotyyppi, kyseisen sarakkeen kunkin arvon on oltava samaa tyyppiä.
Taulukoihin ja sarakkeisiin viittaaminen kaavoissa
Voit viitata mihin tahansa taulukkoon ja sarakkeeseen käyttämällä sen nimeä. Esimerkiksi seuraava kaava havainnollistaa, miten voit viitata kahden taulukon sarakkeisiin käyttämällä täydellistä nimeä:
= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])
Kun kaava lasketaan, mallin suunnittelutoiminto tarkistaa ensin yleisen syntaksin ja sitten antamiesi sarakkeiden ja taulukoiden nimet mahdollisia sarakkeita ja taulukoita vasten nykyisessä kontekstissa. Jos nimi on moniselitteinen tai jos saraketta tai taulukkoa ei löydy, saat kaavaasi koskevan virheilmoituksen (#ERROR merkkijono tietoarvon sijaan soluissa, joissa virhe ilmenee). Lisätietoja taulukoiden, sarakkeiden ja muiden objektien nimeämisvaatimuksista on DAX-syntaksi-kohdan kohdassa Nimeämisvaatimukset.
Taulukkosuhteet
Luomalla yhteyksiä taulukoiden välille saat mahdollisuuden käyttää laskentaan liittyviä arvoja muissa taulukoissa. Voit esimerkiksi käyttää laskettua saraketta, jos haluat määrittää kaikki nykyiseen jälleenmyyjään liittyvät toimitustietueet ja laskea sitten kunkin toimituskulut. Monissa tapauksissa suhde ei välttämättä kuitenkaan ole tarpeellinen. Voit käyttää kaavassa LOOKUPVALUE-funktiota palauttamaan result_columnName arvon riville, joka täyttää search_column ja search_value argumenteissa määritetyt ehdot.
Monet DAX-funktiot edellyttävät, että taulukoiden välillä tai useiden taulukoiden välillä on suhde, jotta voit paikantaa viitatut sarakkeet ja palauttaa järkeviä tuloksia. Muut funktiot pyrkivät tunnistamaan suhteen. Parhaiden tulosten varmistamiseksi sinun on kuitenkin aina luotava suhde, jos se on mahdollista. Taulukkomuotoiset tietomallit tukevat useita suhteita taulukoiden välillä. Sekaannusten ja virheellisten tulosten välttämiseksi vain yksi suhde kerrallaan määritetään aktiiviseksi suhteeksi, mutta voit muuttaa aktiivista suhdetta tarpeen mukaan, jos haluat kulkea tietojen eri yhteyksien läpi laskutoimituksissa. USERELATIONSHIP-funktiolla voidaan määrittää vähintään yksi suhde, jota käytetään tietyssä laskutoimituksessa.
On tärkeää noudattaa näitä kaavojen suunnittelusääntöjä suhteita käytettäessä:
Kun taulukot on yhdistetty suhteen avulla, sinun on varmistettava, että avaimina käytetyillä kahdella sarakkeella on vastaavat arvot. Viite-eheyttä ei ole pakotettu, joten avainsarakkeessa voi olla arvoja, jotka eivät ole vastaavia, mutta suhteen luominen on silti mahdollista. Jos näin käy, ota huomioon, että tyhjät arvot tai muut kuin vastaavat arvot saattavat vaikuttaa kaavojen tuloksiin.
Kun linkität mallissasi taulukoita suhteita käyttämällä, suurennat vaikutusaluetta tai kontekstia, jossa kaavat lasketaan. Uusien taulukoiden lisäämisestä, uusista suhteista tai aktiiviseen suhteeseen muutoksista johtuvat kontekstin muutokset voivat aiheuttaa sen, että tulokset muuttuvat ennakoimatta. Lisätietoja on tämän artikkelin kohdassa Konteksti .
Prosessi ja päivitys
Prosessi ja uudelleenlaskenta ovat kaksi erillistä mutta toisiinsa liittyvää operaatiota. Sinun tulee ymmärtää nämä käsitteet perusteellisesti, kun suunnittelet mallia, joka sisältää monimutkaisia kaavoja, suuria tietomääriä tai ulkoisista tietolähteistä hankittuja tietoja.
Prosessi (päivitys) päivittää mallin tiedot uusilla ulkoisen tietolähteen tiedoilla.
Uudelleenlaskenta on prosessi, jossa kaavojen tuloksia päivitetään niin, että ne vastaavat itse kaavojen muutoksia ja heijastavat pohjana olevien tietojen muutoksia. Uudelleenlaskenta voi vaikuttaa suorituskykyyn seuraavilla tavoilla:
Lasketun sarakkeen arvot lasketaan ja tallennetaan malliin. Jos haluat päivittää lasketun sarakkeen arvot, sinun on käsiteltävä malli jollakin kolmesta käsittelykomennon avulla: käsittele kokonaan, käsittele tiedot tai käsittele uudelleenlaskenta. Kaavan tulos on aina laskettava uudelleen koko sarakkeelle aina, kun muutat kaavaa.
Mittayksiköiden laskemia arvoja arvioidaan dynaamisesti aina, kun käyttäjä lisää mittarin Pivot-taulukkoon tai avaa raportin. kun käyttäjä muokkaa kontekstia, mittarin palauttamat arvot muuttuvat. Mittayksikön tulokset kuvastavat aina viimeisintä muistissa olevaa välimuistia.
Käsittelyllä ja uudelleenlaskennalla ei ole vaikutusta rivitason suojausta, ellei uudelleenlaskennan tulos palauta eri arvoa, jolloin roolijäsenet voivat tai eivät voi suorittaa riville kyselyjä.
Päivitykset
DAX-akselia parannetaan jatkuvasti. Uudet ja päivitetyt funktiot julkaistaan seuraavan saatavilla olevan päivityksen yhteydessä, mikä tapahtuu yleensä kuukausittain. Palvelut päivitetään ensin, ja sen jälkeen on asennetut sovellukset, kuten Power BI Desktop, Excel, SQL Server Management Studio (SSMS) ja Analysis Services Project Extension for Visual Studio (SSDT). SQL Server Analysis Services päivitetään seuraavassa kumulatiivisessa päivityksessä. Uusista funktioista ilmoitetaan ensin, ja ne kuvataan DAX-funktioviittaus-kohdassa samaan aikaan Power BI Desktop -päivitysten kanssa.
Kaikkia funktioita ei tueta SQL Server Analysis Servicesin ja Excelin aiemmissa versioissa.
Vianmääritys
Jos saat virheilmoituksen määritettäessä kaavaa, kaava saattaa sisältää joko syntaktisen virheen, semanttisen virheen tai laskentavirheen.
Syntaktiset virheet ovat helpoimpia ratkaista. Niihin liittyy yleensä puuttuva sulje tai pilkku.
Toisentyyppinen virhe ilmenee, kun syntaksi on oikea, mutta viitattu arvo tai sarake ei ole mielekäs kaavan kontekstissa. Tällaiset semanttiset virheet ja laskentavirheet saattavat aiheutua seuraavista ongelmista:
- Kaava viittaa muuhun kuin olemassa olevaan sarakkeeseen, taulukkoon tai funktioon.
- Kaava näyttää olevan oikein, mutta kun tietomoduuli noutaa tiedot, se löytää tyyppiristiriidan ja aiheuttaa virheen.
- Kaava välittää funktiolle virheellisen luvun tai argumenttien tyypin.
- Kaava viittaa eri sarakkeeseen, jossa on virhe, joten sen arvot eivät kelpaa.
- Kaava viittaa sarakkeeseen, jota ei ole käsitelty, mikä tarkoittaa, että sillä on metatietoja, mutta ei laskelmissa käytettäviä todellisia tietoja.
Neljässä ensimmäisessä tapauksessa DAX merkitsee koko sarakkeen, joka sisältää virheellisen kaavan. Viimeisessä tapauksessa DAX muuttaa sarakkeen harmaaksi, mikä tarkoittaa, että sarake on käsittelemättömässä tilassa.
Sovellukset ja työkalut
Power BI Desktop
Power BI Desktop on ilmainen tietojen mallinnus- ja raportointisovellus. Mallin suunnittelutoiminto sisältää DAX-editorin DAX-laskentakaavojen luomiseen.
Power Pivot Excelissä
Excelin Power Pivotin mallien suunnittelutoiminto sisältää DAX-editorin DAX-laskentakaavojen luomista varten.
Visual Studio
Visual Studiota, jolla on Analysis Services -projektilaajennus (VSIX), käytetään Analysis Services -malliprojektien luomiseen. Projektilaajennukseen asennettuun taulukkomalliin sisältyy DAX-editori.
SQL Server Management Studio
SQL Server Management Studio (SSMS) on olennainen työkalu Analysis Servicesin kanssa työskentelyä varten. SSMS sisältää DAX-kyselyeditorin sekä taulukkomuotoisten että moniulotteisten mallien kyselyä varten.
DAX Studio
DAX Studio on avoimen lähdekoodin asiakastyökalu, jonka avulla voidaan luoda ja suorittaa DAX-kyselyitä Analysis Servicesin, Power BI Desktopin ja Excelin Power Pivotin malleja vastaan.
Tabular Editor
Tabular Editor on avoimen lähdekoodin työkalu, joka tarjoaa intuitiivisen hierarkkisen näkymän taulukkomallin metatietojen jokaisesta objektista. Tabular Editor sisältää DAX-editorin ja syntaksin korostuksen, joka tarjoaa helpon tavan muokata mittareita, laskettuja sarakkeita ja laskettuja taulukkolausekkeita.
Oppimisresurssit
DAXin opiskelun aikana on parasta käyttää sovellusta, jota käytät tietomallien luomiseen. Analysis Servicesissä, Power BI Desktopissa ja Power Pivot in Excelissä on artikkeleita ja opetusohjelmia, jotka sisältävät oppitunteja mittareiden, laskettujen sarakkeiden ja rivisuodattimien luomisesta DAXia käyttämällä. Seuraavassa on joitakin lisäresursseja:
Käytä DAX:ää Power BI Desktopin oppimispolussa.
Alberto Ferrarin ja Marco Russon Definitive Guide to DAX- (Microsoft Press). Nyt toisessa painoksessa tämä laaja opas tarjoaa perustietoja innovatiivisista suorituskykytekniikoista aloittelijoille tietojen mallintajille ja BI-ammattilaisille.
Yhteisö
DAX:lla on eloinen yhteisö, joka on aina valmis jakamaan osaamistaan. Microsoft Power BI -yhteisö on erityinen keskustelupalsta vain DAX-, DAX-komentoja ja Vinkit varten.