DAX-functies voor time intelligence gebruiken

Voltooid

DAX bevat verschillende time intelligence-functies die het wijzigen van de datumfiltercontext vereenvoudigen. U kunt veel van deze intelligentieformules schrijven met behulp van een CALCULATE functie waarmee datumfilters worden gewijzigd, maar dat zou meer werk opleveren.

Notitie

Veel DAX-functies voor time intelligence hebben betrekking op standaarddatumperioden, in het bijzonder jaren, kwartalen en maanden. Als u onregelmatige tijdsperioden hebt (bijvoorbeeld financiële maanden die halverwege de kalendermaand beginnen), of als u wilt werken met weken of tijdsperioden (uren, minuten enzovoort), zijn de DAX-functies voor time intelligence niet handig. In plaats daarvan moet u de CALCULATE functie gebruiken en handmatig gemaakte datum- of tijdfilters doorgeven.

Datumtabelvereiste

Als u wilt werken met time intelligence-functies van DAX, moet u voldoen aan het modelvereiste en ten minste één datumtabel in uw model hebben. Een datumtabel is een tabel die aan de volgende vereisten voldoet:

  • Deze moet een kolom bevatten van het gegevenstype Datum (of datum/tijd), ook wel de datumkolom genoemd.
  • De datumkolom moet unieke waarden bevatten.
  • De datumkolom mag geen lege waarden bevatten.
  • De datumkolom mag geen ontbrekende datums bevatten.
  • De datumkolom moet volledige jaren omvatten. Een jaar is niet noodzakelijkerwijs een kalenderjaar (januari-december).
  • De datumtabel moet worden opgegeven als een datumtabel.

Zie Gegevenstabellen maken in Power BI Desktop voor meer informatie.

Samenvattingen in de loop van de tijd

Eén groep DAX-functies voor time intelligence heeft betrekking op samenvattingen in de loop van de tijd:

  • DATESYTD - Retourneert een tabel met één kolom die datums bevat voor het jaar tot heden (YTD) in de huidige filtercontext. Deze groep bevat ook de DATESMTD DAX-functies en DATESQTD voor maand tot heden (MTD) en kwartaal tot heden (QTD). U kunt deze functies als filters doorgeven aan de CALCULATE DAX-functie.
  • TOTALYTD - Evalueert een expressie voor YTD in de huidige filtercontext. De equivalente QTD- en MTD DAX-functies van TOTALQTD en TOTALMTD zijn ook opgenomen.
  • DATESBETWEEN - Retourneert een tabel die een kolom met datums bevat die begint met een opgegeven begindatum en doorloopt tot een bepaalde einddatum.
  • DATESINPERIOD - Retourneert een tabel die een kolom met datums bevat die begint met een opgegeven begindatum en die gedurende het opgegeven aantal intervallen doorgaat.

Notitie

Hoewel de TOTALYTD functie eenvoudig te gebruiken is, bent u beperkt tot het doorgeven van één filterexpressie. Als u meerdere filterexpressies wilt toepassen, gebruikt u de CALCULATE functie en geeft u de DATESYTD functie door als een van de filterexpressies.

In het volgende voorbeeld maakt u uw eerste time intelligence-berekening die de TOTALYTD-functie gebruikt. De syntaxis is als volgt:

TOTALYTD(<expression>, <dates>, [, <filter>][, <year_end_date>])

Voor de functie is een expressie vereist en, zoals gebruikelijk is voor alle time intelligence-functies, een verwijzing naar de datumkolom van een gemarkeerde datumtabel. U kunt eventueel één filterexpressie of de einddatum van het jaar doorgeven (alleen vereist wanneer het jaar niet op 31 december eindigt).

Download en open het bestand Adventure Works DW 2020 M07.pbix. Voeg vervolgens de volgende metingdefinitie toe aan de tabel Sales waarmee de YTD-omzet wordt berekend. Maak de meting op als valuta met twee decimalen.

Revenue YTD =
TOTALYTD([Revenue], 'Date'[Date], "6-30")

De waarde voor de einddatum van "6-30" het jaar vertegenwoordigt 30 juni.

Voeg op pagina 1 van het rapport de meting Revenue YTD toe aan het matrix-besturingselement. U ziet dat er een samenvatting van de omzetbedragen van het begin van het jaar tot de gefilterde maand wordt gegenereerd.

Een afbeelding toont een matrix-besturingselement met groepering op Year en Month in de rijen en samenvattingen van Revenue en Revenue YTD. De waarden voor YTD zijn gemarkeerd.

Vergelijkingen in de loop van de tijd

Eén andere groep DAX-functies voor time intelligence heeft betrekking op verschuivende perioden:

  • DATEADD - Retourneert een tabel die een kolom met datums bevat, die in de tijd vooruit of achteruit is verschoven met het opgegeven aantal intervallen van de datums in de huidige filtercontext.
  • PARALLELPERIOD - Retourneert een tabel die een kolom met datums bevat die een periode vertegenwoordigt die parallel is aan de datums in de opgegeven datumkolom, in de huidige filtercontext, waarbij de datums een aantal intervallen naar voren of terug in de tijd zijn verschoven.
  • SAMEPERIODLASTYEAR - Retourneert een tabel die een kolom met datums bevat die één jaar terug in de tijd worden verschoven van de datums in de opgegeven datumkolom, in de huidige filtercontext.
  • Er zijn veel DAX-helperfuncties om vooruit of terug te navigeren voor specifieke perioden, die allemaal een tabel met datums retourneren. Deze helperfuncties zijn onder andere , , , , NEXTYEARen PREVIOUSDAY, PREVIOUSMONTH, PREVIOUSQUARTERen PREVIOUSYEAR. NEXTQUARTERNEXTMONTHNEXTDAY

Nu voegt u een meting toe aan de tabel Sales waarmee de omzet voor het vorige jaar wordt berekend met behulp van de SAMEPERIODLASTYEAR functie. Maak de meting op als valuta met twee decimalen.

Revenue PY =
VAR RevenuePriorYear = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
RETURN
    RevenuePriorYear

Voeg de meting Revenue PY toe aan het matrix-besturingselement. U ziet dat er resultaten worden gegenereerd die vergelijkbaar zijn met de omzetbedragen van het vorige jaar.

Een afbeelding toont een matrix-besturingselement met groepering op Year en Month in de rijen en samenvattingen van Revenue, Revenue YTD en Revenue PY. De waarden voor Revenue PY voor FY2019 zijn gelijk zijn aan maandwaarden voor Revenue voor FY2018.

Vervolgens wijzigt u de meting door de naam ervan te wijzigen in Revenue YoY % en vervolgens de RETURN component bij te werken om de wijzigingsverhouding te berekenen. Zorg ervoor dat u de notatie wijzigt in een percentage met twee decimalen.

Revenue YoY % =
VAR RevenuePriorYear = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
RETURN
    DIVIDE(
        [Revenue] - RevenuePriorYear,
        RevenuePriorYear
    )

U ziet dat de meting Revenue YoY % een wijzigingsverhoudingsfactor voor de maandelijkse omzet van het vorige jaar produceert. Bijvoorbeeld: juli 2018 vertegenwoordigt een toename van 106,53 procent ten opzichte van de maandelijkse omzet van het vorige jaar, en november 2018 vertegenwoordigt een afname van 24,22 procent ten opzichte van de maandelijkse omzet van het vorige jaar.

Een afbeelding toont een matrix-besturingselement met groepering op Year en Month in de rijen en samenvattingen van Revenue, Revenue YTD en Revenue YoY %. De maandwaarden voor Revenue YoY % voor FY2019 zijn waarden die zijn opgemaakt als percentages.

Notitie

De meting Revenue YoY % toont een goed gebruik van DAX-variabelen. De meting verbetert de leesbaarheid van de formule en stelt u in staat om een deel van de metingslogica te testen (door de variabele waarde RevenuePriorYear te retourneren). Daarnaast is de meting een optimale formule omdat de waarde van de omzet van het vorige jaar niet tweemaal hoeft te worden opgehaald. Nadat u deze eenmaal in een variabele hebt opgeslagen, gebruikt de RETURN component tweemaal de waarde van de variabele.