Aikatietojen lisälaskelmat
On myös muita DAX-aikatietofunktioita, jotka koskevat yksittäisen päivämäärän palauttamista. Tutustut näihin funktioihin käyttämällä niitä kahdessa eri skenaariossa.
- FIRSTDATE
ja DAX-funktiot LASTDATE
palauttavat määritetyn päivämääräsarakkeen ensimmäisen ja viimeisen päivämäärän nykyisessä suodatinkontekstissa.
Uusien esiintymien laskeminen
Aikatietofunktioiden avulla voi myös laskea uusia esiintymiä. Seuraavassa esimerkissä näytetään, miten voit laskea uusien asiakkaiden määrän tietyllä ajanjaksolla. Uusi asiakas lasketaan siihen ajanjaksoon, jolloin hän teki ensimmäisen ostonsa.
Ensimmäinen tehtäväsi on lisätä seuraava mittari Myynti-taulukkoon, joka laskee erillisten asiakkaiden määrän tähän päivään saakka (LTD). Tähän päivään saakka tarkoittaa alusta alkaen suodatinkontekstin viimeiseen päivään asti. Muotoile mittari kokonaisluvuksi käyttämällä tuhaterotinta.
Customers LTD =
VAR CustomersLTD =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MAX('Date'[Date])
),
'Sales Order'[Channel] = "Internet"
)
RETURN
CustomersLTD
Lisää Asiakkaat LTD -mittari matriisivisualisointiin. Huomaa, että se laskee erillisten asiakkaiden määrän kunkin kuukauden lopussa.
Funktio DATESBETWEEN
palauttaa taulukon, joka sisältää päivämääräsarakkeen, joka alkaa annetusta alkamispäivästä ja jatkuu tiettyyn päättymispäivään. Kun alkamispäivän arvo on BLANK, siinä käytetään päivämääräsarakkeen ensimmäistä päivää. (Jos taas päättymispäivän arvo on BLANK, siinä käytetään päivämääräsarakkeen viimeistä päivää.) Tässä tapauksessa päättymispäivä määritetään MAX-funktiolla, joka palauttaa suodatinkontekstin viimeisen päivän. Jos siis elokuu 2017 kuuluu suodatinkontekstiin, MAX-funktio palauttaa arvon 31. elokuuta 2017 ja DATESBETWEEN
funktio palauttaa kaikki päivämäärät 31. elokuuta 2017 saakka.
Seuraavaksi muokkaat mittaria nimeämällä sen uudelleen Uudet asiakkaat ja lisäämällä toisen muuttujan, joka tallentaa erillisten asiakkaiden määrän ennen suodatinkontekstin ajanjaksoa. - RETURN
lause vähentää nyt tämän arvon LTD-asiakkaista ja tuottaa tuloksen, joka on uusien asiakkaiden määrä ajanjaksolla.
New Customers =
VAR CustomersLTD =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MAX('Date'[Date])
),
'Sales Order'[Channel] = "Internet"
)
VAR CustomersPrior =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MIN('Date'[Date]) - 1
),
'Sales Order'[Channel] = "Internet"
)
RETURN
CustomersLTD - CustomersPrior
Huomaa CustomersPrior-muuttujanDATESBETWEEN
osalta, että funktio sisältää päivämääriä suodatinkontekstin ensimmäiseen päivään saakka miinus yksi. Microsoft Power BI tallentaa päivämäärät sisäisesti lukuina, joten voit lisätä tai vähentää lukuja päivämäärän siirtämiseksi.
Tilannevedoslaskelmat
Faktatietoja tallennetaan toisinaan tietyn ajankohdan tilannevedoksina. Esimerkkejä tästä ovat varastotasot ja tilisaldot. Arvojen tilannevedos ladataan taulukkoon säännöllisin väliajoin.
Kun teet yhteenvedon tilannevedoksen arvoista (kuten varastotasoista), voit tehdä yhteenvedon minkä tahansa dimension arvoista päivämäärää lukuun ottamatta. Saat mielekkään yhteenvedon, kun lisäät varastotasojen määrät tuoteluokkiin, mutta yhteenveto ei ole mielekäs, jos lisäät varastotasojen määrät päivämääriin. Eilisen varastotason lisäämisestä tämän päivän varastotasoon ei ole hyötyä (ellet halua laskea tuloksen keskiarvoa).
Kun teet yhteenvedon tilannevedostaulukoista, mittarikaavat voivat käyttää DAX-aikatietofunktioita yksittäisen päivämäärän suodattimen käyttämiseksi.
Seuraavassa esimerkissä tutustut Adventure Works -yrityksen skenaarioon. Siirry mallinäkymään ja valitse Varasto-mallikaavio.
Huomaa, että kaaviossa näkyy kolme taulukkoa: Tuote, Päivämäärä ja Varasto. Varasto-taulukkoon tallennetaan tilannevedokset kunkin päivämäärän ja tuotteen yksikkösaldoista. On tärkeää huomata, että taulukko ei sisällä puuttuvia päivämääriä eikä merkintöjen kaksoiskappaleita millekään tuotteelle samana päivänä. Lisäksi viimeisin tilannevedostietue on tallennettu 15. kesäkuuta 2020.
Siirry nyt raporttinäkymään ja valitse raportin sivu 2. Lisää Varasto-taulukonUnitsBalance-sarake matriisivisualisointiin. Sen yhteenvedon oletusasetuksena on summa-arvo.
Tämä visualisoinnin määritys on esimerkki siitä, miten tilannevedoksen arvoista ei kannata tehdä yhteenvetoa. Päivittäisten tilannevedossaldojen lisääminen yhteen ei tuota mielekästä tulosta. Poista siksi UnitsBalance-kenttä matriisivisualisoinnista.
Nyt lisäät Varasto-taulukkoon mittarin, joka laskee yhteen yksittäisen päivämääränUnitsBalance-arvon. Päivä on kunkin ajanjakson viimeinen päivä. Se tehdään käyttämällä -funktiota LASTDATE
. Muotoile mittari kokonaisluvuksi käyttämällä tuhaterotinta.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTDATE('Date'[Date])
)
Huomautus
Huomaa, että mittarikaava käyttää -funktiota SUM
. Koostefunktiota on käytettävä (mittarit eivät salli suoria viittauksia sarakkeisiin), mutta koska kullekin tuotteelle on kullakin päivämäärällä vain yksi rivi, SUM
funktio toimii vain yhdellä rivillä.
Lisää Käytettävissä oleva varasto -mittari matriisivisualisointiin. Kunkin tuotteen arvo perustuu nyt kunkin kuukauden viimeksi kirjattuun yksikkösaldoon.
Mittari palauttaa kesäkuun 2020 arvoksi BLANK, sillä kesäkuun viimeiselle päivälle ei ole tietuetta. Tietojen mukaan sitä ei ole vielä ollut.
Suodatukseen suodatinkontekstin viimeisen päivän mukaan liittyy ongelmia. Tallennettua päivää ei ehkä ole, koska se ei ole vielä tapahtunut tai koska varastosaldoja ei ehkä kirjata viikonloppuisin.
Seuraava vaihe on muokata mittarikaavaa ja määrittää viimeinen päivä, jonka tulos ei ole BLANK, ja suodattaa sitten kyseisen päivän mukaan. Voit tehdä tämän DAX-funktiolla LASTNONBLANK
.
Muokkaa seuraavan mittarin määrityksen avulla Käytettävissä oleva varasto -mittaria.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTNONBLANK(
'Date'[Date],
CALCULATE(SUM(Inventory[UnitsBalance]))
)
)
Huomaa matriisivisualisoinnissa Kesäkuu 2020- ja Yhteensä-kohtien (eli koko vuoden) arvot.
Funktio LASTNONBLANK
on iteraattorifunktio. Se palauttaa viimeisen päivän, jonka tulos ei ole BLANK. Se saavuttaa tämän tuloksen käymällä läpi kaikki suodatinkontekstin päivämäärät laskevassa aikajärjestyksessä. (Iteroi sitä vastoin FIRSTNONBLANK
nousevassa aikajärjestyksessä.) Se arvioi kunkin päivämäärän välitettyä lauseketta. Kun se havaitsee muun tuloksen kuin BLANK, funktio palauttaa päivämäärän. Tätä päivämäärää käytetään sitten funktion CALCULATE
suodattamiseen.
Huomautus
Funktio LASTNONBLANK
arvioi lausekkeensa rivikontekstissa. Funktion CALCULATE
avulla on siirryttävä rivikonteksti suodattamaan konteksti, jotta lauseke arvioidaan oikein.
Piilota nyt Varasto-taulukon UnitsBalance-sarake. Silloin raportin tekijät eivät voi tehdä virheellistä yhteenvetoa yksikkösaldojen tilannevedoksista.