Flere tidsintelligens-beregninger
Det finnes andre DAX-tidsintelligens-funksjoner som er laget for å returnere en enkelt dato. Du kommer til å lære mer om disse funksjonene ved å bruke dem i to ulike scenarier.
LASTDATE
OG FIRSTDATE
DAX-funksjonene returnerer den første og siste datoen i gjeldende filterkontekst for den angitte kolonnen med datoer.
Beregn nye forekomster
En annen bruk av funksjonene for tidsintelligens er å telle nye forekomster. Følgende eksempel viser hvordan du kan beregne antall nye kunder for en tidsperiode. En ny kunde telles i tidsperioden de foretok kjøp for første gang.
Den første oppgaven er å legge til følgende mål i Salg-tabellen som teller antall distinkte kunders levetid (LTD). Hittil i levetiden betyr fra begynnelsen til den siste datoen i filter-konteksten. Formater målet som et heltall ved hjelp av tusen-skilletegnet.
Customers LTD =
VAR CustomersLTD =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MAX('Date'[Date])
),
'Sales Order'[Channel] = "Internet"
)
RETURN
CustomersLTD
Legg til målet Kunder LTD i matrise-visualobjektet. Legg merke til at det gir et resultat av distinkte kunder LTD til slutten av hver måned.
Funksjonen DATESBETWEEN
returnerer en tabell som inneholder en kolonne med datoer som begynner med en gitt startdato og fortsetter til en gitt sluttdato. Når startdatoen er tom, brukes den første datoen i dato-kolonnen. (Omvendt, når sluttdatoen er tom, brukes den siste datoen i dato-kolonnen.) I dette tilfellet blir sluttdatoen bestemt av MAX-funksjonen, som returnerer den siste datoen i filter-konteksten. Hvis måneden august 2017 er i filterkontekst, returnerer MAX-funksjonen 31. august 2017, og DATESBETWEEN
funksjonen returnerer alle datoer frem til 31. august 2017.
Deretter endrer du målet ved å gi det nytt navn til Nye kunder og ved å legge til en andre variabel for å lagre antall distinkte kunder før tidsperioden i filter-kontekst. Setningsdelen RETURN
trekker nå denne verdien fra LTD-kunder for å produsere et resultat, som er antall nye kunder i tidsperioden.
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
Legg merke til at DATESBETWEEN
funksjonen inneholder datoer frem til første dato i filterkontekst minus én for CustomersPrior-variabelen. Siden Microsoft Power BI internt lagrer datoer som tall, kan du legge til eller trekke fra tall for å flytte en dato.
Øyeblikkskalkulasjoner
Noen ganger lagres faktadata som øyeblikksbilder i tid. Vanlige eksempler inkluderer lagerbeholdning eller kontosaldoer. Et øyeblikks bilde av verdier lastes inn i tabellen regelmessig.
Når du oppsummerer øyeblikksbilde-verdier (for eksempel lagerbeholdning-nivåer), kan du summere verdier på tvers av alle dimensjoner unntatt dato. Å legge til antall på lager på tvers av produktkategorier gir et meningsfylt sammendrag, men det gjør ikke antall på lager på tvers av datoer. Å legge til gårsdagens lagerantall er ikke en nyttig operasjon å utføre (med mindre du vil finne gjennomsnittet av det resultatet).
Når du oppsummerer øyeblikksbilde-tabeller, kan mål-formler være avhengige av DAX-tidsintelligens-funksjoner for å fremtvinge et enkelt-dato-filter.
I eksemplet nedenfor skal du utforske et scenario for Adventure Works-selskapet. Bytt til modellvisning, og velg modelldiagrammet Beholdning.
Legg merke til at diagrammet viser tre tabeller: Produkt, Dato og Beholdning. Lagertabellen lagrer øyeblikksbilder av enhetssaldoer for hver dato og hvert produkt. Det er viktig at tabellen ikke inneholder noen manglende datoer, og at det ikke finnes duplikate oppføringer for noe produkt på samme dato. Den siste øyeblikksbilde-posten er lagret for datoen 15. juni 2020.
Bytt til rapport visning, og velg Side 2 av rapporten. Legg til UnitsBalance-kolonnen i lagertabellen i matrisevisualobjektet. Standardsammendraget er satt til summerte verdier.
Denne konfigurasjonen av visualobjekt er et eksempel på hvordan du ikke summerer verdiene i øyeblikksbilder. Å legge til daglige øyeblikksbilder av saldoer gir ikke et meningsfylt resultat. Du kan derfor fjerne UnitsBalance-feltet fra den matrise-visualobjektet.
Nå legger du til et mål i lagertabellen som summerer UnitsBalance-verdien for én enkelt dato. Datoen blir den siste datoen i hver tidsperiode. Det oppnås ved å bruke LASTDATE
funksjonen. Formater målet som et heltall med tusen-skilletegn.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTDATE('Date'[Date])
)
Obs!
Legg merke til at målformelen bruker SUM
funksjonen. En mengdefunksjon må brukes (mål tillater ikke direkte referanser til kolonner), men gitt at det bare finnes én rad for hvert produkt for hver dato, SUM
vil funksjonen bare fungere over én enkelt rad.
Legg til målet Lagerbeholdning i matrise-visualobjektet. Verdien for hvert produkt er nå basert på saldoen for den siste registrerte enhets-saldoen for hver måned.
Målet returnerer BLANK-verdier for juni 2020, fordi det ikke finnes noen post for den siste datoen i juni. I henhold til dataene, har det ikke hendt ennå.
Filtrering etter den siste datoen i filter-konteksten har iboende problemer: Det kan hende at det ikke finnes en lagret dato fordi den ikke har skjedd ennå, eller kanskje fordi lagerbeholdningen ikke er registrert i helger.
Neste trinn er å justere mål-formelen for å fastslå den siste datoen som har et ikke-BLANK-resultat, og deretter filtrere etter denne datoen. Du kan oppnå denne oppgaven ved hjelp av DAX-funksjonen LASTNONBLANK
.
Bruk følgende mål-definisjon til å endre Lagerbeholdning-målet.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTNONBLANK(
'Date'[Date],
CALCULATE(SUM(Inventory[UnitsBalance]))
)
)
Merk deg verdiene for juni 2020 og totalsummen (som representerer hele året) i visualobjekt-matrisen.
Funksjonen LASTNONBLANK
er en gjentakelsesfunksjon. Den returnerer den siste datoen som gir et resultat som ikke er BLANK. Den oppnår dette resultatet ved å bla gjennom alle datoer i filter-kontekst i synkende kronologisk rekkefølge. (Omvendt gjentas FIRSTNONBLANK
den i stigende kronologisk rekkefølge.) For hver dato evaluerer den sendte uttrykket. Når den finner et resultat som ikke er BLANK, returnerer funksjonen datoen. Denne datoen brukes deretter til å filtrere CALCULATE
funksjonen.
Obs!
Funksjonen LASTNONBLANK
evaluerer uttrykket i radkontekst. Funksjonen CALCULATE
må brukes til å overføre radkonteksten til filterkonteksten for å evaluere uttrykket på riktig måte.
Du bør nå skjule Beholdning-tabellen UnitsBalance-kolonnen. Det vil hindre at rapportforfattere uhensiktsmessig summerer enhetsbalanser for øyeblikksbilder.