DAX-syntaksi
Tässä artikkelissa kuvataan DAX-kaavalausekkeen kielen syntaksi ja vaatimukset.
Syntaksivaatimukset
DAX-kaava alkaa aina yhtäläisyysmerkillä (=). Yhtä suuri kuin -merkin jälkeen voit antaa minkä tahansa lausekkeen, joka antaa tulokseksi skalaariarvon, tai lausekkeen, joka voidaan muuntaa skalaariarvoksi. Näitä ovat esimerkiksi seuraavat:
Skalaarivakio tai -lauseke, joka käyttää skalaarioperaattoria (+,-,*,/,>=,...,&&; ...)
Viittaukset sarakkeisiin tai taulukoihin. DAX-kieli käyttää taulukoita ja sarakkeita syötteenä funktioihin, ei koskaan matriisiin tai mielivaltaiseen arvojoukkoon.
Lausekkeen osana annetut operaattorit, vakiot ja arvot.
Funktion ja sen pakollisten argumenttien tulos. Jotkin DAX-funktiot palauttavat taulukon skalaarin sijaan, ja ne on käärittävä funktioon, joka arvioi taulukon ja palauttaa skalaarin. ellei taulukko ole yksisarakkeinen, yksirivinen taulukko, sitä käsitellään skalaariarvona.
Useimmat DAX-funktiot edellyttävät vähintään yhtä argumenttia, jotka voivat sisältää taulukoita, sarakkeita, lausekkeita ja arvoja. Jotkin funktiot, kuten PI, eivät kuitenkaan edellytä argumentteja, mutta ne edellyttävät aina sulkeita tyhjäarvoargumentin ilmaisemiseksi. Sinun täytyy esimerkiksi aina kirjoittaa PI(), ei PI. Voit myös sijoittaa funktioita sisäkkäin muiden funktioiden sisällä.
Lausekkeita. Lauseke voi sisältää minkä tahansa seuraavista: operaattorit, vakiot tai viittaukset sarakkeisiin.
Esimerkiksi seuraavat ovat kelvollisia kaavoja.
Kaava | Result |
---|---|
= 3 | 3 |
= "Myynti" | Myynti |
= 'Myynti'[Summa] | Jos käytät tätä kaavaa Sales-taulukossa, saat Sarakkeen Amount-arvon Sales-taulukossa nykyiselle riville. |
= (0,03 *[Summa]) =0.03 * [Summa] |
Kolme prosenttia nykyisen taulukon Amount-sarakkeen arvosta. Vaikka tämän kaavan avulla voidaan laskea prosenttiosuus, tulos ei näy prosenttilukuna, ellet käytä muotoilua taulukossa. |
= PI() | Vakion pi-arvo. |
Kaavat voivat käyttäytyä eri tavalla riippuen siitä, miten niitä käytetään. Sinun täytyy aina olla tietoinen kontekstista ja siitä, miten kaavassa käyttämäsi tiedot liittyvät muihin tietoihin, joita laskennassa voi käyttää.
Nimeämisvaatimukset
Tietomalli sisältää usein useita taulukoita. Yhdessä taulukot ja niiden sarakkeet koostuvat tietokannasta, joka on tallennettu muistissa olevaan analytiikkamoduuliin (VertiPaq). Kyseisessä tietokannassa kaikilla taulukoilla on oltava yksilölliset nimet. Sarakkeiden nimien on myös oltava yksilöllisiä jokaisessa taulukossa. Kaikkien objektien nimet ovat kirjainkoolla ei ole merkitystä. Esimerkiksi nimet SALES ja Sales edustavat samaa taulukkoa.
Kaikkien aiemmin luotuun tietomalliin lisäämiesi sarakkeiden ja mittayksiköiden on kuuluttava tiettyyn taulukkoon. Määrität taulukon, joka sisältää sarakkeen, joko implisiittisesti, kun luot lasketun sarakkeen taulukon sisällä, tai eksplisiittisesti, kun luot mittarin ja määrität sen taulukon nimen, johon mittayksikön määritys tulee tallentaa.
Kun käytät taulukkoa tai saraketta funktion syötteenä, sinun on yleensä määritettävä sarakkeen nimi. Sarakkeen täydellinen nimi on taulukon nimi, jota seuraa sarakkeen nimi hakasulkeissa: esimerkiksi U.S. Myynti'[Tuotteet]. Täydellinen nimi vaaditaan aina, kun viittaat sarakkeeseen seuraavissa konteksteissa:
Funktion argumenttina VALUES
Funktioiden ALL tai ALLEXCEPT argumenttina
Funktioiden CALCULATE tai CALCULATETABLE suodatinargumentti
Funktion argumenttina RELATEDTABLE
Minkä tahansa aikatietofunktion argumenttina
Tarkentamaton sarakkeen nimi on vain sarakkeen nimi hakasulkeissa: esimerkiksi [Sales Amount]. Jos esimerkiksi viittaat nykyisen taulukon samalta riviltä skalaariarvoon, voit käyttää tarkentamatonta sarakkeen nimeä.
Jos taulukon nimessä on välilyöntejä, varattuja avainsanoja tai ei-sallittuja merkkejä, sinun on kirjoitettava taulukon nimi puolilainausmerkkien sisään. Taulukoiden nimet on kirjoitettava lainausmerkkien sisään myös, jos nimi sisältää aakkosnumeeriseen ANSI-merkkialueeseen kuuluvia merkkejä, huolimatta siitä, tukevatko aluekohtaiset asetukset merkistöä vai ei. Jos esimerkiksi avaat työkirjan, joka sisältää kyrillisillä merkeillä kirjoitettuja taulukon nimiä, kuten "Таблиа", taulukon nimi on kirjoitettava lainausmerkkeihin, vaikka se ei sisällä välilyöntejä.
Muistiinpano
Voit helpottaa sarakkeiden täydellistä nimien syöttämistä käyttämällä kaavaeditorin automaattista täydennystoimintoa.
Taulukot
Taulukon nimet vaaditaan, kun sarake on eri taulukosta kuin nykyinen taulukko. Taulukon nimien on oltava yksilöllisiä tietokannan sisäpuolella.
Taulukon nimet on kirjoitettava heittomerkkien sisään, jos ne sisältävät välilyöntejä, muita erikoismerkkejä tai muita kuin englanninkielisiä aakkosnumeerisia merkkejä.
Mittarit
Mittayksiköiden nimien on aina oltava hakasulkeissa.
Mittayksiköiden nimet voivat sisältää välilyöntejä.
Kunkin mittayksikön nimen on oltava yksilöivä mallin sisäpuolella. Tämän vuoksi taulukon nimi on valinnainen mittayksikön nimen edessä, kun viitataan olemassa olevaan mittayksikköön. Kun luot mittayksikön, sinun täytyy kuitenkin aina määrittää taulukko, johon mittayksikön määritys tallennetaan.
Sarakkeet
Sarakkeiden nimien on oltava yksilöllisiä taulukon kontekstissa. Useilla taulukoilla voi kuitenkin olla sarakkeita, joilla on samat nimet (taulukon nimi sisältää selkeyden).
Yleensä sarakkeisiin voidaan viitata viittaamatta perustaulukkoon, johon ne kuuluvat, paitsi silloin, kun on olemassa nimiristiriita ratkaisemista varten tai tietyillä funktioilla, jotka edellyttävät, että sarakkeiden nimet ovat täysin hyväksyttyjä.
Varatut avainsanat
Jos taulukolle käyttämäsi nimi on sama kuin Analysis Servicesin varattu avainsana, esiin tulee virhe ja sinun on nimettävä taulukko uudelleen. Voit kuitenkin käyttää avainsanoja objektien nimissä, jos objektin nimi on hakasulkeissa (sarakkeille) tai lainausmerkeissä (taulukoille).
Muistiinpano
Lainausmerkkejä voi esittää useilla eri merkeillä sovelluksen mukaan. Jos liität kaavoja ulkoisesta asiakirjasta tai verkkosivusta, varmista, että tarkistat niiden merkkien ASCII-koodin, joita käytetään tarjousten avaamiseen ja sulkemiseen, varmistaaksesi, että ne ovat samat. Muussa tapauksessa DAX ei välttämättä pysty tunnistamaan symboleja lainausmerkeiksi, mikä tekee viittauksesta virheellisen.
Erikoismerkit
Seuraavat merkit ja merkkityypit eivät kelpaa taulukoiden, sarakkeiden tai mittayksiköiden nimiin:
välilyönnit alussa tai lopussa; ellei välilyöntejä ole suljettu nimierikkeillä, hakasulkeilla tai yksittäisillä heittomerkeillä.
Ohjausmerkit
Seuraavat merkit, jotka eivät ole kelvollisia objektien nimissä:
.,;':/\*|? &%$!+=()[]{}<>
Esimerkkejä objektien nimistä
Seuraavassa taulukossa on esimerkkejä joidenkin objektien nimistä:
Objektityypit | Esimerkit | Kommentti |
---|---|---|
Taulukon nimi | Myynti | Jos taulukon nimessä ei ole välilyöntejä tai muita erikoismerkkejä, nimeä ei tarvitse ympäröidä lainausmerkeillä. |
Taulukon nimi | 'Kanadan myynti' | Jos nimessä on välilyöntejä, välilehtiä tai muita erikoismerkkejä, kirjoita nimi heittomerkkien sisään. |
Täydellinen sarakkeen nimi | Sales[Amount] | Taulukon nimi edeltää sarakkeen nimeä, ja sarakkeen nimi on hakasulkeiden sisällä. |
Täydellinen mittayksikön nimi | Myynti[Tuotto] | Taulukon nimi edeltää mittayksikön nimeä, ja mittayksikön nimi on hakasulkeissa. Joissakin konteksteissa vaaditaan aina täydellinen nimi. |
Tarkentamaton sarakkeen nimi | [Summa] | Tarkentamaton nimi on vain sarakkeen nimi hakasulkeissa. Kontekstit, joissa voidaan käyttää tarkentamatonta nimeä, sisältävät lasketun sarakkeen kaavat samassa taulukossa tai koostamisfunktiossa, joka skannaa samaa taulukkoa. |
Täydellinen sarake taulukossa, jossa on välilyöntejä | 'Kanadan myynti'[Qty] | Taulukon nimessä on välilyöntejä, joten se on ympäröitävä heittomerkillä. |
Muut rajoitukset
Kullekin funktiolle tarvittava syntaksi ja suoritettavan toiminnon tyyppi vaihtelevat suuresti funktion mukaan. Yleisesti ottaen kuitenkin seuraavat säännöt koskevat kaikkia kaavoja ja lausekkeita:
DAX-kaavat ja -lausekkeet eivät voi muokata tai lisätä taulukoiden yksilöllisiä arvoja.
Laskettuja rivejä ei voi luoda käyttämällä DAXia. Voit luoda vain laskettuja sarakkeita ja mittareita.
Kun määrität laskettuja sarakkeita, voit sijoittaa funktioita mihin tahansa tasoon.
DAX sisältää useita funktioita, jotka palauttavat taulukon. Yleensä käytät näiden funktioiden palauttamia arvoja syötteenä muihin funktioihin, jotka edellyttävät taulukkoa syötteenä.
DAX-operaattorit ja -vakiot
Seuraavassa taulukossa on lueteltu operaattorit, joita DAX tukee. Lisätietoja yksittäisten operaattoreiden syntaksista on kohdassa DAX-operaattorit.
Operaattorin tyyppi | Symboli ja käyttö |
---|---|
Sulkeet-operaattori | () käsittelyjärjestys ja argumenttien ryhmittely |
Aritmeettiset operaattorit | + (yhteenlasku) - (vähennyslasku/ sign) * (kertolasku) / (jakolasku) ^ (potenssi) |
Vertailuoperaattorit | = (yhtä suuri kuin) > (suurempi kuin) < (pienempi kuin) >= (suurempi tai yhtä suuri kuin) <= (pienempi tai yhtä suuri kuin) <> (eri suuri kuin) |
Tekstin yhdistämisoperaattori | & (ketjutus) |
Loogiset operaattorit | & (ja) || (tai) |
Tietotyypit
Sinun ei tarvitse luoda, muuntaa tai muuten määrittää DAX-kaavassa käytettävän sarakkeen tai arvon tietotyyppiä. Kun käytät tietoja DAX-kaavassa, DAX tunnistaa automaattisesti viitattujen sarakkeiden tietotyypit ja arvot, joita kirjoitat, ja suorittaa implisiittisiä muunnoksia tarvittaessa määritetyn toiminnon suorittamiseksi.
Jos esimerkiksi yrität lisätä luvun päivämääräarvoon, moduuli tulkitsee toiminnon funktion yhteydessä ja muuntaa luvut yleiseksi tietotyypiksi ja näyttää sitten tuloksen aiotussa muodossa, päivämääränä.
Arvoilla, jotka voidaan muuntaa onnistuneesti, on kuitenkin joitakin rajoituksia. Jos arvon tai sarakkeen tietotyyppi ei ole yhteensopiva nykyisen toiminnon kanssa, DAX palauttaa virheen. DAX ei myöskään tarjoa funktioita, joiden avulla voit muuttaa, muuntaa tai muuntaa tietomalliin tuomiesi olemassa olevien tietojen tietotyypin.
Tärkeä
DAX ei tue muuttujatietotyyppiä. Kun lataat tai tuot tietoja tietomalliin, on odotettavissa, että kunkin sarakkeen tiedot ovat yleensä yhdenmukaisia tietotyyppejä.
Jotkin funktiot palauttavat skalaariarvoja, mukaan lukien merkkijonoja, kun taas muut funktiot toimivat lukujen kanssa, sekä kokonaislukujen että reaalilukujen tai päivämäärien ja aikojen kanssa. Kunkin funktion vaatima tietotyyppi on kuvattu osassa DAX-funktiot.
Voit käyttää funktion argumenttina taulukoita, joissa on useita sarakkeita ja useita tietorivejä. Jotkin funktiot palauttavat myös taulukoita, jotka on tallennettu muistiin ja joita voidaan käyttää argumentteina muihin funktioihin.
Päivämäärä ja aika
DAX tallentaa päivämäärä- ja aika-arvot käyttämällä Microsoft SQL Serverin käyttämää datetime-tietotyyppiä. Datetime-muoto käyttää liukulukua, jossa Päivämäärä-arvot vastaavat kokonaislukuosaa, joka edustaa 30.12.1899 jälkeen päivien määrää. Aika-arvot vastaavat päivämääräarvon desimaaliosaa, jossa tunnit, minuutit ja sekunnit esitetään päivän desimaaliosina. DAX-päivämäärä- ja aikafunktiot muuntavat argumentit implisiittisesti datetime-tietotyypiksi.
Muistiinpano
DAXin tukema suurin datetime-arvo on 31. joulukuuta 9999 klo 00.00.00.
Päivämäärä ja aikaliteraali
Power BI Desktopin elokuun 2021 versiosta alkaen DAX-päivämäärä- ja päivämäärä/aika-arvot voidaan määrittää literaaliksi muodossa dt"YYYY-MM-DD"
, dt"YYYY-MM-DDThh:mm:ss"
tai dt"YYYY-MM-DD hh:mm:ss"
. Literaalina määritettynä DATE-, TIME-, DATEVALUE- ja TIMEVALUE-funktioita ei tarvita lausekkeessa.
Esimerkiksi seuraava lauseke käyttää DATE- ja TIME-funktioita OrderDate-suodattamiseen:
EVALUATE
FILTER (
FactInternetSales,
[OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)
Sama suodatinlauseke voidaan määrittää literaaliksi:
EVALUATE
FILTER (
FactInternetSales,
[OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)
Muistiinpano
DAX-päivämäärä- ja päivämäärä/aika-tyyppistä literaalimuotoa ei tueta kaikissa Power BI Desktopin, Analysis Servicesin ja Excelin Power Pivotin versioissa. Uudet ja päivitetyt DAX-toiminnot esitellään yleensä ensin Power BI Desktopissa, jonka jälkeen ne lisätään Analysis Servicesiin ja Excelin Power Pivotiin.