Yderligere time intelligence-beregninger
Der findes andre DAX-time intelligence-funktioner, som bruges til returnering af en enkelt dato. Du får mere at vide om disse funktioner ved at anvende dem i to forskellige scenarier.
DAX-funktionerne FIRSTDATE
og LASTDATE
returnerer den første og sidste dato i den aktuelle filterkontekst for den angivne kolonne med datoer.
Beregn nye forekomster
En anden brug af time intelligence-funktioner er at tælle nye forekomster. I følgende eksempel kan du se, hvordan du kan beregne antallet af nye kunder i en bestemt periode. En kunde registreres som ny i den tidsperiode, hvor den pågældende foretog sit første køb.
Din første opgave er at føje følgende måling til tabellen Sales , der tæller antallet af særskilte kunders liv-til-dato (LTD). Life-to-date betyder fra starttidspunktet til den sidste dato i filterkonteksten. Formatér målingen som et heltal ved hjælp af tusindtalsseparatoren.
Customers LTD =
VAR CustomersLTD =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MAX('Date'[Date])
),
'Sales Order'[Channel] = "Internet"
)
RETURN
CustomersLTD
Føj målingen Customer LTD til matrixvisual'et. Bemærk, at resultatet er de forskellige kunder life-to-date (LTD) indtil udgangen af hver måned.
Funktionen DATESBETWEEN
returnerer en tabel, der indeholder en kolonne med datoer, der starter med en given startdato og fortsætter indtil en bestemt slutdato. Når startdatoen er BLANK, bruges den første dato i kolonnen Date. Modsat bruges den sidstee dato i kolonnen Date, når slutdatoen er BLANK. I dette tilfælde bestemmes slutdatoen af funktionen MAX, der returnerer den sidste dato i filterkonteksten. Hvis august måned 2017 er i filterkontekst, returnerer funktionen MAX derfor den 31. august 2017, og funktionen DATESBETWEEN
returnerer alle datoer til den 31. august 2017.
Derefter skal du ændre målingen ved at omdøbe den til New Customers og ved at tilføje en variabel mere for at lagre antallet af forskellige kunder før tidsperioden i filterkonteksten. Delsætningen RETURN
trækker nu denne værdi fra LTD-kunder for at producere et resultat, som er antallet af 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
For variablen CustomersPrior skal du bemærke, at funktionen DATESBETWEEN
indeholder datoer indtil den første dato i filterkonteksten minus én. Da Microsoft Power BI internt gemmer datoer som tal, kan du addere eller subtrahere tal for at flytte en dato.
Snapshotberegninger
I nogle tilfælde gemmes faktadataene som snapshot i tid. Almindelige eksempler omfatter lagerbeholdningsniveauer eller kontosaldi. Et snapshot med værdier indlæses i tabellen med regelmæssige mellemrum.
Når du opsummerer snapshotværdier (f. eks. lagerbeholdningsniveauer), kan du opsummere værdier på tværs af alle dimensioner, undtagen dato. Hvis du tilføjer et lagerniveau på tværs af produktkategorier, får du en meningsfuld oversigt, men det gør du ikke ved at tilføje lagerniveau på tværs af datoer. Det er ikke hensigtsmæssigt at føje mere end ét lagerniveau til dagens lagerniveau, (medmindre du ønsker at udregne gennemsnittet af resultatet).
Når du opsummerer snapshot tabeller, kan formler for målinger være afhængige af DAX-time intelligence-funktioner for at gennemtvinge et enkelt datofilter.
I det følgende eksempel skal du udforske et scenarie for virksomheden Adventure Works. Skift til modelvisning, og vælg modeldiagrammet Inventory.
Bemærk, at diagrammet viser tre tabeller: Produkt, Dato og Lager. I tabellen Inventory gemmes snapshots af enhedssaldi for hver dato og hvert produkt. Det er vigtigt, at tabellen ikke har manglende datoer og ingen dublerede poster for et produkt på samme dato. Desuden gemmes den sidste snapshotpost for datoen den 15. juni 2020.
Skift nu til rapportvisning, og vælg side 2 i rapporten. Føj kolonnen UnitsBalance i tabellen Inventory til matrixvisual'et. Standardopsummeringen er angivet til at opsummere værdier.
Denne visualkonfiguration er et eksempel på, hvordan en snapshotværdi ikke opsummeres. Det giver ikke meningsfuldt resultat at lægge de daglige snapshots sammen. Derfor skal du fjerne feltet UnitsBalance fra matrixvisual'et.
Nu skal du føje en måling til tabellen Inventory , der opsummerer værdien UnitsBalancefor en enkelt dato. Datoen er den sidste dato i hver tidsperiode. Det opnås ved hjælp af funktionen LASTDATE
. Formatér målingen som et heltal med tusindtalsseparatoren.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTDATE('Date'[Date])
)
Bemærk
Bemærk, at målingsformlen bruger funktionen SUM
. Der skal bruges en aggregeringsfunktion (målinger tillader ikke direkte referencer til kolonner), men da der kun findes én række for hvert produkt for hver dato, fungerer funktionen SUM
kun over en enkelt række.
Føj målingen Stock on Hand til matrixvisual'et. Værdien for hvert produkt er nu baseret på saldoen for den senest registrerede enhed for hver måned.
Målingen returnerer BLANKs for juni 2020, da der ikke findes nogen poster for den sidste dato i juni. Ifølge dataene er det endnu ikke sket.
Filtrering efter den sidste dato i filter konteksten har indbyggede problemer: Der findes muligvis ikke en registreret dato, da den endnu ikke har fundet sted, eller muligvis fordi der ikke er registreret lagerbeholdninger i weekender.
Dit næste trin er at justere formlen for målingen for at bestemme den sidste dato, som har et resultat, der ikke er BLANK, og derefter filtrere efter den pågældende dato. Du kan opnå denne opgave ved hjælp af DAX-funktionen LASTNONBLANK
.
Brug følgende målingsdefinition til at ændre målingen Stock on Hand.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTNONBLANK(
'Date'[Date],
CALCULATE(SUM(Inventory[UnitsBalance]))
)
)
I matrixvisual'et kan du se værdierne for juni 2020 og totalen (repræsenterer hele året).
Funktionen LASTNONBLANK
er en iteratorfunktion. Den returnerer den sidste dato, der opretter et resultat, der ikke er BLANK. Den opnår dette resultat ved at gentage alle datoer i filterkonteksten i faldende kronologisk rækkefølge. (Omvendt gentages gentagelserne FIRSTNONBLANK
i stigende kronologisk rækkefølge). For hver dato evalueres det overførte udtryk. Når der registreres et ikke-BLANK resultat, returnerer funktionen datoen. Denne dato bruges derefter til at filtrere funktionen CALCULATE
.
Bemærk
Funktionen LASTNONBLANK
evaluerer udtrykket i rækkekonteksten. Funktionen CALCULATE
skal bruges til at overføre rækkekonteksten for at filtrere konteksten for at evaluere udtrykket korrekt.
Du bør nu skjule kolonnen UnitsBalance i tabellen Inventory. Det forhindrer rapportforfattere i at opsummere snapshots af enhedssaldi på en uhensigtsmæssig måde.