Datumtabellen in Power Pivot zijn essentieel voor het bladeren en berekenen van gegevens in de loop van de tijd. Dit artikel biedt een grondig inzicht in datumtabellen en hoe u deze kunt maken in Power Pivot. In dit artikel wordt met name het volgende beschreven:
-
Waarom een datumtabel belangrijk is voor het bladeren en berekenen van gegevens op datum en tijd.
-
Power Pivot gebruiken om een datumtabel toe te voegen aan het gegevensmodel.
-
Nieuwe datumkolommen maken, zoals Jaar, Maand en Periode in een datumtabel.
-
Relaties maken tussen datumtabellen en feitentabellen.
-
Werken met tijd.
Dit artikel is bedoeld voor gebruikers die nieuw zijn bij Power Pivot. Het is echter belangrijk om al een goed begrip te hebben van het importeren van gegevens, het maken van relaties en het maken van berekende kolommen en metingen.
In dit artikel wordt niet beschreven hoe u DAX-Time-Intelligence-functies gebruikt in meetformules. Zie Time Intelligence in Power Pivot in Excel voor meer informatie over het maken van metingen met DAX Time Intelligence-functies.
Opmerking: In Power Pivot zijn de namen 'meting' en 'berekend veld' synoniem. We gebruiken de naammeting in dit artikel. Zie Metingen in Power Pivot voor meer informatie.
Inhoud
Datumtabellen begrijpen
Bijna alle gegevensanalyse omvat het bladeren en vergelijken van gegevens over datums en tijd. U kunt bijvoorbeeld de verkoopbedragen voor het afgelopen fiscale kwartaal optellen en deze totalen vervolgens vergelijken met andere kwartalen, of u wilt misschien een eindsaldo aan het einde van de maand berekenen voor een account. In elk van deze gevallen gebruikt u datums als een manier om verkooptransacties of saldi voor een bepaalde periode in de tijd te groeperen en samen te voegen.
Power View-rapport
Een datumtabel kan veel verschillende weergaven van datums en tijd bevatten. Een datumtabel bevat bijvoorbeeld vaak kolommen zoals Fiscaal jaar, Maand, Kwartaal of Periode die u kunt selecteren als velden uit een lijst met velden bij het splitsen en filteren van uw gegevens in draaitabellen of Power View-rapporten.
Lijst met Power View-velden
Als datumkolommen zoals Jaar, Maand en Kwartaal alle datums binnen hun respectieve bereik willen opnemen, moet de datumtabel ten minste één kolom met een aaneengesloten reeks datums bevatten. Dat wil dus dat die kolom één rij voor elke dag moet hebben voor elk jaar dat is opgenomen in de datumtabel.
Als de gegevens die u wilt bekijken bijvoorbeeld datums hebben van 1 februari 2010 tot en met 30 november 2012 en u rapporteert over een kalenderjaar, wilt u een datumtabel met ten minste een datumbereik van 1 januari 2010 tot 31 december 2012. Elk jaar in de datumtabel moet alle dagen voor elk jaar bevatten. Als u uw gegevens regelmatig vernieuwt met nieuwere gegevens, wilt u de einddatum mogelijk met een of twee jaar uitzetten, zodat u de datumtabel niet hoeft bij te werken naarmate de tijd verstrijkt.
Datumtabel met een aaneengesloten reeks datums
Als u rapporteert over een fiscaal jaar, kunt u een datumtabel maken met een aaneengesloten reeks datums voor elk fiscaal jaar. Als uw boekjaar bijvoorbeeld begint op 1 maart en u gegevens hebt voor de boekjaren 2010 tot en met de huidige datum (bijvoorbeeld in 2013), kunt u een datumtabel maken die begint op 1-3-2009 en ten minste elke dag in elk fiscaal jaar tot en met de laatste datum in boekjaar 2013 bevat.
Als u rapporteert over zowel het kalenderjaar als het boekjaar, hoeft u geen afzonderlijke datumtabellen te maken. Eén datumtabel kan kolommen bevatten voor een kalenderjaar, fiscaal jaar en zelfs een kalender van dertien perioden van vier weken. Het belangrijkste is dat de datumtabel een aaneengesloten reeks datums bevat voor alle jaren.
Een datumtabel toevoegen aan het gegevensmodel
Er zijn verschillende manieren waarop u een datumtabel kunt toevoegen aan uw gegevensmodel:
-
Importeren uit een relationele database of een andere gegevensbron.
-
Maak een datumtabel in Excel en kopieer of maak een koppeling naar een nieuwe tabel in Power Pivot.
-
Importeren uit Microsoft Azure Marketplace.
Laten we elk van deze nader bekijken.
Importeren uit een relationele database
Als u sommige of alle gegevens importeert uit een datawarehouse of een ander type relationele database, is de kans groot dat er al een datumtabel en relaties tussen deze tabel en de rest van de gegevens die u importeert. De datums en opmaak komen waarschijnlijk overeen met de datums in uw feitengegevens en de datums beginnen waarschijnlijk goed in het verleden en gaan ver in de toekomst. De datumtabel die u wilt importeren, kan erg groot zijn en een reeks datums bevatten die verder gaan dan wat u in uw gegevensmodel moet opnemen. U kunt de geavanceerde filterfuncties van de wizard Tabel importeren van Power Pivot gebruiken om selectief alleen de datums en de specifieke kolommen te kiezen die u echt nodig hebt. Dit kan de grootte van uw werkmap aanzienlijk verminderen en de prestaties verbeteren.
Wizard Tabel importeren
In de meeste gevallen hoeft u geen extra kolommen te maken, zoals Fiscaal jaar, Week, Maandnaam, enzovoort, omdat deze al aanwezig zijn in de geïmporteerde tabel. In sommige gevallen moet u echter, nadat u de datumtabel hebt geïmporteerd in uw gegevensmodel, mogelijk extra datumkolommen maken, afhankelijk van een bepaalde rapportagebehoefte. Gelukkig is dit eenvoudig te doen met DAX. U leert later meer over het maken van datumtabelvelden. Elke omgeving is anders. Als u niet zeker weet of uw gegevensbronnen een gerelateerde datum- of agendatabel hebben, neem dan contact op met uw databasebeheerder.
Een datumtabel maken in Excel
U kunt een datumtabel maken in Excel en deze vervolgens kopiëren naar een nieuwe tabel in het gegevensmodel. Dit is echt heel eenvoudig te doen en het geeft u veel flexibiliteit.
Wanneer u een datumtabel maakt in Excel, begint u met één kolom met een aaneengesloten datumbereik. U kunt vervolgens extra kolommen zoals Jaar, Kwartaal, Maand, Fiscaal jaar, Periode, enzovoort maken in het Excel-werkblad met behulp van Excel-formules. Nadat u de tabel naar het gegevensmodel hebt gekopieerd, kunt u deze als berekende kolommen maken. Het maken van extra datumkolommen in Power Pivot wordt beschreven in de sectie Nieuwe datumkolommen toevoegen aan de datumtabel verderop in dit artikel.
Procedure: Een datumtabel maken in Excel en deze kopiëren naar het gegevensmodel
-
Typ in Excel in een leeg werkblad in cel A1 een kolomkopnaam om een datumbereik te identificeren. Dit ismeestal iets zoals Date, DateTime of DateKey.
-
Typ een begindatum in cel A2. Bijvoorbeeld 1-1-2010.
-
Klik op de vulgreep en sleep deze omlaag naar een rijnummer met een einddatum. Bijvoorbeeld 31-12-2016.
-
Selecteer alle rijen in de kolom Datum (inclusief de naam van de koptekst in cel A1).
-
Klik in de groep Stijlen op Opmaken als tabel en selecteer vervolgens een stijl.
-
Klik in het dialoogvenster Opmaken als tabel op OK.
-
Kopieer alle rijen, inclusief de koptekst.
-
Klik in Power Pivot op het tabblad Start op Plakken.
-
Typ in Plakvoorbeeld > Tabelnaam een naam zoals Datum of Agenda. Laat Eerste rij gebruiken als kolomkoppeningeschakeld en klik vervolgens op OK.
De nieuwe datumtabel (in dit voorbeeld agenda genoemd) in Power Pivot ziet er als volgt uit:
Opmerking: U kunt ook een gekoppelde tabel maken met behulp van Toevoegen aan gegevensmodel. Hierdoor wordt uw werkmap echter onnodig groot omdat de werkmap twee versies van de datumtabel bevat; één in Excel en één in Power Pivot.
Opmerking: De naamdatum is een trefwoord in Power Pivot. Als u de tabel die u maakt in Power Pivot Date een naam geeft, moet u de tabelnaam tussen enkele aanhalingstekens plaatsen in DAX-formules die ernaar verwijzen in een argument. Alle voorbeeldafbeeldingen en formules in dit artikel verwijzen naar een datumtabel die in Power Pivot is gemaakt met de naam Agenda.
U hebt nu een datumtabel in uw gegevensmodel. U kunt nieuwe datumkolommen, zoals Jaar, Maand, enzovoort, toevoegen met behulp van DAX.
Nieuwe datumkolommen toevoegen aan de datumtabel
Een datumtabel met één datumkolom met één rij voor elke dag voor elk jaar is belangrijk voor het definiëren van alle datums in een datumbereik. Het is ook nodig om een relatie te maken tussen de feitentabel en de datumtabel. Maar die ene datumkolom met één rij voor elke dag is niet nuttig bij het analyseren op datums in een draaitabel of Power View-rapport. U wilt dat de datumtabel kolommen bevat waarmee u uw gegevens kunt aggregeren voor een bereik of groep datums. U kunt bijvoorbeeld verkoopbedragen optellen per maand of kwartaal, of u kunt een meting maken waarmee de jaar-op-jaargroei wordt berekend. In elk van deze gevallen heeft uw datumtabel jaar-, maand- of kwartaalkolommen nodig waarmee u uw gegevens voor die periode kunt samenvoegen.
Als u de datumtabel uit een relationele gegevensbron hebt geïmporteerd, bevat deze mogelijk al de verschillende typen datumkolommen die u wilt gebruiken. In sommige gevallen kunt u een aantal van deze kolommen wijzigen of extra datumkolommen maken. Dit geldt met name als u uw eigen datumtabel in Excel maakt en deze naar het gegevensmodel kopieert. Gelukkig is het maken van nieuwe datumkolommen in Power Pivot heel eenvoudig met datum- en tijdfuncties in DAX.
Tip: Als u nog niet met DAX hebt gewerkt, kunt u snel aan de slag met QuickStart: Basisinformatie over DAX in 30 minuten op Office.com.
DAX-datum- en tijdfuncties
Als u ooit met datum- en tijdfuncties in Excel-formules hebt gewerkt, bent u waarschijnlijk bekend met de functies Datum en Tijd. Hoewel deze functies vergelijkbaar zijn met hun tegenhangers in Excel, zijn er enkele belangrijke verschillen:
-
DAX-functies datum en tijd gebruiken een datum/tijd-gegevenstype.
-
Ze kunnen waarden uit een kolom als argument nemen.
-
Ze kunnen worden gebruikt om datumwaarden te retourneren en/of te bewerken.
Deze functies worden vaak gebruikt bij het maken van aangepaste datumkolommen in een datumtabel, dus ze zijn belangrijk om te begrijpen. We gebruiken een aantal van deze functies om kolommen te maken voor Year, Quarter, FiscalMonth, enzovoort.
Opmerking: Datum- en tijdfuncties in DAX zijn niet hetzelfde als time intelligence-functies. Meer informatie over Time Intelligence in Power Pivot in Excel.
DAX bevat de volgende datum- en tijdfuncties:
Er zijn ook veel andere DAX-functies die u in uw formules kunt gebruiken. Veel van de formules die hier worden beschreven, gebruiken bijvoorbeeld wiskundige en trigonometrische functies , zoals MOD en TRUNC, logische functies zoals ALS en tekstfuncties zoals FORMAT Zie de sectie Aanvullende resources verderop in dit artikel voor meer informatie over andere DAX-functies.
Formulevoorbeelden voor een kalenderjaar
In de volgende voorbeelden worden formules beschreven die worden gebruikt om extra kolommen te maken in een datumtabel met de naam Agenda. Eén kolom, met de naam Datum, bestaat al en bevat een aaneengesloten datumbereik van 1-1-2010 tot en met 31-12-2016.
Jaar
=JAAR([datum])
In deze formule retourneert de functie JAAR het jaar van de waarde in de kolom Datum. Omdat de waarde in de kolom Date van het gegevenstype datum/tijd is, weet de functie JAAR hoe het jaar moet worden geretourneerd.
maand
=MAAND([datum])
In deze formule kunnen we, net als bij de functie JAAR, gewoon de functie MAAND gebruiken om een maandwaarde uit de kolom Datum te retourneren.
Kwartaal
=INT(([Maand]+2)/3)
In deze formule gebruiken we de functie INT om een datumwaarde als geheel getal te retourneren. Het argument dat we opgeven voor de functie INT is de waarde uit de kolom Maand, voeg 2 toe en deel die vervolgens door 3 om ons kwartaal, 1 tot en met 4 op te halen.
Maandnaam
=FORMAT([date];"mmmm")
In deze formule gebruiken we de functie OPMAAK om de maandnaam op te halen om een numerieke waarde te converteren van de kolom Datum naar tekst. We geven de kolom Datum op als eerste argument en vervolgens de notatie; We willen dat onze maandnaam alle tekens weergeeft, dus gebruiken we 'mmmm'. Dit levert het volgende resultaat op:
Als we de maandnaam willen retourneren die is afgekort tot drie letters, gebruiken we 'mmm' in het notatieargument.
Dag van de week
=FORMAT([date];"ddd")
In deze formule gebruiken we de functie FORMAT om de dagnaam op te halen. Omdat we alleen een verkorte dagnaam willen, geven we 'ddd' op in het notatieargument.
Voorbeelddraaitabel
Zodra u velden hebt voor datums zoals Jaar, Kwartaal, Maand, enzovoort, kunt u deze gebruiken in een draaitabel of rapport. In de volgende afbeelding ziet u bijvoorbeeld het veld SalesAmount uit de tabel Sales fact in VALUES en Year en Quarter uit de dimensietabel Calendar in ROWS. SalesAmount wordt geaggregeerd voor jaar- en kwartaalcontext.
Formulevoorbeelden voor een fiscaal jaar
Boekjaar
=ALS([Maand]<= 6,[Jaar];[Jaar]+1)
In dit voorbeeld begint het fiscale jaar op 1 juli.
Er is geen functie waarmee een fiscaal jaar kan worden geëxtraheerd uit een datumwaarde, omdat de begin- en einddatums voor een fiscaal jaar vaak verschillen van die van een kalenderjaar. Om het fiscale jaar op te halen, gebruiken we eerst een functie ALS om te testen of de waarde voor maand kleiner is dan of gelijk is aan 6. Als in het tweede argument de waarde voor Maand kleiner is dan of gelijk is aan 6, retourneert u de waarde uit de kolom Jaar. Als dat niet zo is, retourneert u de waarde van Jaar en voegt u 1 toe.
Een andere manier om een waarde voor het einde van het boekjaar op te geven, is door een meting te maken die alleen de maand aangeeft. Bijvoorbeeld FYE:=6. Vervolgens kunt u verwijzen naar de metingnaam in plaats van het maandnummer. Bijvoorbeeld =ALS([Maand]<=[FYE],[Jaar];[Jaar]+1). Dit biedt meer flexibiliteit bij het verwijzen naar de eindmaand van het boekjaar in verschillende formules.
Fiscale maand
=ALS([Maand]<= 6, 6+[Maand]; [Maand]- 6)
In deze formule geven we op of de waarde voor [Maand] kleiner is dan of gelijk is aan 6. Neem vervolgens 6 en voeg de waarde toe van Maand, anders trekt u 6 af van de waarde van [Maand].
Fiscaal kwartaal
=INT(([FiscalMonth]+2)/3)
De formule die we voor FiscalQuarter gebruiken, is ongeveer hetzelfde als voor kwartaal in ons kalenderjaar. Het enige verschil is dat we [FiscalMonth] opgeven in plaats van [Maand].
Feestdagen of speciale datums
U kunt een datumkolom opnemen die aangeeft dat bepaalde datums feestdagen of een andere speciale datum zijn. U kunt bijvoorbeeld de verkooptotalen voor nieuwjaarsdag optellen door een veld Feestdag toe te voegen aan een draaitabel, als slicer of filter. In andere gevallen kunt u deze datums uitsluiten van andere datumkolommen of in een meting.
Het opnemen van feestdagen of speciale dagen is vrij eenvoudig. U kunt in Excel een tabel maken met de datums die u wilt opnemen. Vervolgens kunt u Toevoegen aan gegevensmodel kopiëren of gebruiken om het als een gekoppelde tabel toe te voegen aan het gegevensmodel. In de meeste gevallen is het niet nodig om een relatie te maken tussen de tabel en de tabel Agenda. Formules waarnaar wordt verwezen, kunnen de functie LOOKUPVALUE gebruiken om waarden te retourneren.
Hieronder ziet u een voorbeeld van een tabel die is gemaakt in Excel met feestdagen die aan de datumtabel moeten worden toegevoegd:
Datum |
Feestdag |
---|---|
1/1/2010 |
Nieuwjaar |
11/25/2010 |
Dankzegging |
12/25/2010 |
Kerstmis |
01-01-2011 |
Nieuwjaar |
11/24/2011 |
Dankzegging |
12/25/2011 |
Kerstmis |
1-1-2012 |
Nieuwjaar |
22.11.12 |
Dankzegging |
12/25/2012 |
Kerstmis |
1/1/2013 |
Nieuwjaar |
11/28/2013 |
Dankzegging |
12/25/2013 |
Kerstmis |
11/27/2014 |
Dankzegging |
12/25/2014 |
Kerstmis |
1-1-2014 |
Nieuwjaar |
11/27/2014 |
Dankzegging |
12/25/2014 |
Kerstmis |
1/1/2015 |
Nieuwjaar |
11/26/2014 |
Dankzegging |
12/25/2015 |
Kerstmis |
01.01.16 |
Nieuwjaar |
11/24/2016 |
Dankzegging |
12/25/2016 |
Kerstmis |
In de datumtabel maken we een kolom met de naam Holiday en gebruiken we een formule zoals deze:
=LOOKUPVALUE(Feestdagen[Feestdagen],Feestdagen[datum],Kalender[datum])
Laten we deze formule eens zorgvuldiger bekijken.
We gebruiken de functie LOOKUPVALUE om waarden op te halen uit de kolom Feestdagen in de tabel Feestdagen. In het eerste argument geven we de kolom op waar de resultaatwaarde zich bevindt. We geven de kolom Feestdagen op in de tabel Feestdagen , omdat dit de waarde is die we willen retourneren.
=LOOKUPVALUE(Feestdagen[Feestdagen],Feestdagen[datum],Kalender[datum])
Vervolgens geven we het tweede argument op, de zoekkolom met de datums waarnaar we willen zoeken. We geven de kolom Date op in de tabel Feestdagen , zoals:
=LOOKUPVALUE(Feestdagen[Feestdagen],Feestdagen[datum],Kalender[datum])
Ten slotte geven we de kolom in de tabel Agenda op met de datums waarnaar we willen zoeken in de tabel Feestdagen . Dit is natuurlijk de kolom Datum in de tabel Agenda .
=LOOKUPVALUE(Feestdagen[Feestdagen],Feestdagen[datum],Kalender[datum])
De kolom Feestdagen retourneert de naam van de feestdagen voor elke rij met een datumwaarde die overeenkomt met een datum in de tabel Feestdagen.
Aangepaste agenda - dertien perioden van vier weken
Sommige organisaties, zoals detailhandel of foodservice, rapporteren vaak over verschillende perioden, zoals dertien perioden van vier weken. Met een dertien kalender van vier weken is elke periode 28 dagen; daarom bevat elke periode vier maandagen, vier dinsdagen, vier woensdagen, enzovoort. Elke periode bevat hetzelfde aantal dagen en normaal gesproken vallen feestdagen elk jaar binnen dezelfde periode. U kunt ervoor kiezen om een periode op elke dag van de week te starten. Net als bij datums in een kalender of fiscaal jaar, kunt u DAX gebruiken om extra kolommen met aangepaste datums te maken.
In de onderstaande voorbeelden begint de eerste volledige periode op de eerste zondag van het boekjaar. In dit geval begint het fiscale jaar op 7/1.
Week
Deze waarde geeft ons het weeknummer te beginnen met de eerste volledige week in het fiscale jaar. In dit voorbeeld begint de eerste volledige week op zondag, dus de eerste volledige week in het eerste fiscale jaar in de tabel Kalender begint op 4-7-2010 en loopt door tot de laatste volledige week in de tabel Agenda. Hoewel deze waarde zelf niet zo nuttig is in analyse, is het noodzakelijk om te berekenen voor gebruik in andere periodeformules van 28 dagen.
=INT([datum]-40356)/7)
Laten we deze formule eens zorgvuldiger bekijken.
Eerst maken we een formule die waarden uit de kolom Date retourneert als een geheel getal, zoals dit:
=INT([datum])
Vervolgens willen we zoeken naar de eerste zondag in het eerste fiscale jaar. We zien dat het 4-7-2010 is.
Trek nu 40356 (het gehele getal voor 27-6-2010, de laatste zondag van het vorige fiscale jaar) af van die waarde om het aantal dagen sinds het begin van dagen in de tabel Agenda op te halen, zoals:
=INT([datum]-40356)
Deel het resultaat vervolgens door 7 (dagen in een week), zoals:
=INT(([datum]-40356)/7)
Het resultaat ziet er als volgt uit:
Period
De periode in deze aangepaste kalender bestaat uit 28 dagen en begint altijd op een zondag. Deze kolom retourneert het nummer van de periode die begint met de eerste zondag in het eerste fiscale jaar.
=INT(([Week]+3)/4)
Laten we deze formule eens zorgvuldiger bekijken.
Eerst maken we een formule die een waarde uit de kolom Week retourneert als een geheel getal, zoals dit:
=INT([Week])
Voeg vervolgens 3 toe aan die waarde, zoals deze:
=INT([Week]+3)
Deel het resultaat vervolgens door 4, zoals dit:
=INT(([Week]+3)/4)
Het resultaat ziet er als volgt uit:
Periode fiscaal jaar
Deze waarde retourneert het fiscale jaar voor een bepaalde periode.
=INT(([Periode]+12)/13)+2008
Laten we deze formule eens zorgvuldiger bekijken.
Eerst maken we een formule die een waarde retourneert uit Punt en 12 op telt:
= ([Periode]+12)
We delen het resultaat door 13, omdat er dertien perioden van 28 dagen in het fiscale jaar zijn:
=(([Periode]+12)/13)
We voegen 2010 toe, omdat dit het eerste jaar in de tabel is:
=(([Periode]+12)/13)+2010
Ten slotte gebruiken we de functie INT om een willekeurig deel van het resultaat te verwijderen en een geheel getal te retourneren, gedeeld door 13, zoals:
=INT(([Periode]+12)/13)+2010
Het resultaat ziet er als volgt uit:
Periode in fiscaal jaar
Deze waarde retourneert het periodenummer, 1 – 13, beginnend met de eerste volledige periode (vanaf zondag) in elk fiscaal jaar.
=ALS(MOD([Periode];13), MOD([Periode];13);13)
Deze formule is iets complexer, dus we zullen deze eerst beschrijven in een taal die we beter begrijpen. Deze formule geeft aan dat u de waarde van [Punt] door 13 deelt om een periodenummer (1-13) in het jaar op te halen. Als dat getal 0 is, retourneert u 13.
Eerst maken we een formule die de rest van de waarde retourneert van Periode op 13. We kunnen de MOD (wiskundige en trigonometrische functies) als volgt gebruiken:
=MOD([Periode];13)
Dit geeft ons voor het grootste deel het gewenste resultaat, behalve wanneer de waarde voor Periode 0 is omdat deze datums niet binnen het eerste fiscale jaar vallen, zoals in de eerste vijf dagen van de tabel Kalenderdatum. We kunnen dit regelen met een ALS-functie. Als ons resultaat 0 is, retourneren we 13, zoals:
=ALS(MOD([Periode];13);MOD([Periode];13);13)
Het resultaat ziet er als volgt uit:
Voorbeelddraaitabel
In de onderstaande afbeelding ziet u een draaitabel met het veld SalesAmount uit de tabel Sales fact in VALUES en de velden PeriodFiscalYear en PeriodInFiscalYear uit de dimensietabel Kalenderdatum in RIJEN. SalesAmount wordt geaggregeerd voor de context per boekjaar en de periode van 28 dagen in het fiscale jaar.
Relaties
Nadat u een datumtabel in uw gegevensmodel hebt gemaakt, moet u een relatie maken tussen de feitentabel met uw transactiegegevens en de datumtabel als u door draaitabellen en rapporten wilt bladeren en gegevens wilt samenvoegen op basis van de kolommen in de datumdimensietabel.
Omdat u een relatie moet maken op basis van datums, moet u ervoor zorgen dat u die relatie maakt tussen kolommen waarvan de waarden het gegevenstype datetime (date) hebben.
Voor elke datumwaarde in de feitentabel moet de gerelateerde opzoekkolom in de datumtabel overeenkomende waarden bevatten. Een rij (transactierecord) in de tabel Sales fact met de waarde 15-8-2012 12:00 uur in de kolom DateKey moet bijvoorbeeld een overeenkomstige waarde hebben in de gerelateerde datumkolom in de tabel datum (met de naam Agenda). Dit is een van de belangrijkste redenen waarom u wilt dat de datumkolom in de datumtabel een aaneengesloten datumbereik bevat dat een mogelijke datum in uw feitentabel bevat.
Opmerking: Hoewel de datumkolom in elke tabel van hetzelfde gegevenstype (Datum) moet zijn, maakt de opmaak van elke kolom niet uit.
Opmerking: Als u in Power Pivot geen relaties tussen de twee tabellen kunt maken, wordt de datum en tijd mogelijk niet op hetzelfde precisieniveau opgeslagen in de datumvelden. Afhankelijk van de kolomopmaak kunnen de waarden er hetzelfde uitzien, maar anders worden opgeslagen. Lees meer over werken met tijd.
Opmerking: Vermijd het gebruik van surrogaatsleutels voor gehele getallen in relaties. Wanneer u gegevens importeert uit een relationele gegevensbron, worden datum- en tijdkolommen vaak vertegenwoordigd door een surrogaatsleutel. Dit is een kolom met gehele getallen die wordt gebruikt om een unieke datum weer te geven. In Power Pivot moet u voorkomen dat u relaties maakt met datum-/tijd-toetsen voor gehele getallen en in plaats daarvan kolommen met unieke waarden met een gegevenstype datum. Hoewel het gebruik van surrogaatsleutels wordt beschouwd als een aanbevolen procedure in traditionele datawarehouses, zijn de sleutels voor gehele getallen niet nodig in Power Pivot en kan het moeilijk zijn om waarden in draaitabellen te groeperen op verschillende datumperioden.
Als u de fout Type niet overeenkomt krijgt bij het maken van een relatie, komt dit waarschijnlijk doordat de kolom in de feitentabel niet van het gegevenstype Datum is. Dit kan gebeuren wanneer Power Pivot een niet-datum (meestal een gegevenstype tekst) niet automatisch kan converteren naar een datumgegevenstype. U kunt de kolom in de feitentabel nog steeds gebruiken, maar u moet de gegevens converteren met een DAX-formule in een nieuwe berekende kolom. Zie Datums van tekstgegevenstype converteren naar een datumgegevenstype verderop in de bijlage.
Meerdere relaties
In sommige gevallen kan het nodig zijn om meerdere relaties te maken of meerdere datumtabellen te maken. Als er bijvoorbeeld meerdere datumvelden in de feitentabel Sales staan, zoals DateKey, ShipDate en ReturnDate, kunnen ze allemaal relaties hebben met het veld Datum in de tabel Kalenderdatum, maar slechts één daarvan kan een actieve relatie zijn. In dit geval, omdat DateKey de datum van de transactie vertegenwoordigt, en dus de belangrijkste datum, zou dit het beste als de actieve relatie dienen. De andere hebben inactieve relaties.
De volgende draaitabel berekent de totale verkoop per boekjaar en fiscaal kwartaal. Een meting met de naam Totale verkoop, met de formule Totale verkoop:=SOM([SalesAmount]), wordt geplaatst in WAARDEN en de velden FiscalYear en FiscalQuarter uit de datumtabel Calendar worden in RIJEN geplaatst.
Deze lineaire draaitabel werkt correct omdat we onze totale verkoop willen bij elkaar optellen op de transactiedatumin DateKey. De meting Totale verkoop maakt gebruik van de datums in DateKey en wordt opgeteld per fiscaal jaar en fiscaal kwartaal, omdat er een relatie is tussen DateKey in de tabel Verkoop en de kolom Date in de tabel Kalenderdatum.
Inactieve relaties
Maar wat gebeurt er als we onze totale verkoop niet op transactiedatum, maar op verzenddatum willen bij elkaar optellen? We hebben een relatie nodig tussen de kolom ShipDate in de tabel Sales en de kolom Date in de tabel Agenda. Als we die relatie niet maken, zijn onze aggregaties altijd gebaseerd op de transactiedatum. We kunnen echter meerdere relaties hebben, ook al kan er slechts één actief zijn, en omdat transactiedatum de belangrijkste is, krijgt deze de actieve relatie met de tabel Agenda.
In dit geval heeft ShipDate een inactieve relatie, dus elke metingformule die is gemaakt om gegevens te aggregeren op basis van verzenddatums, moet de inactieve relatie opgeven met behulp van de functie USERELATIONSHIP .
Omdat er bijvoorbeeld een inactieve relatie is tussen de kolom ShipDate in de tabel Sales en de kolom Date in de tabel Agenda, kunnen we een meting maken waarmee de totale verkoop wordt opgeteld op verzenddatum. We gebruiken een formule zoals deze om de relatie op te geven die moet worden gebruikt:
Totale verkoop per verzenddatum:=CALCULATE(SUM(Sales[SalesAmount]), USERELATIONSHIP(Sales[ShipDate], Calendar[Date]))
Deze formule geeft alleen aan: Een som berekenen voor SalesAmount, maar filter met behulp van de relatie tussen de kolom ShipDate in de tabel Sales en de kolom Date in de tabel Calendar.
Als we nu een draaitabel maken en de meting Totale verkoop per verzenddatum in WAARDEN en Fiscaal jaar en Fiscaal kwartaal in RIJEN plaatsen, zien we hetzelfde eindtotaal, maar alle andere sombedragen voor het fiscale jaar en het fiscale kwartaal verschillen omdat ze zijn gebaseerd op de verzenddatum en niet op de transactiedatum.
Als u inactieve relaties gebruikt, kunt u slechts één datumtabel gebruiken, maar wel dat metingen (zoals Totale verkoop per verzenddatum) in de formule verwijzen naar de inactieve relatie. Er is nog een alternatief, namelijk het gebruik van meerdere datumtabellen.
Meerdere datumtabellen
Een andere manier om met meerdere datumkolommen in uw feitentabel te werken, is door meerdere datumtabellen te maken en er afzonderlijke actieve relaties tussen te maken. Laten we ons voorbeeld van de tabel Verkoop nog eens bekijken. We hebben drie kolommen met datums waarop we mogelijk gegevens willen samenvoegen:
-
Een DateKey met de datum van verkoop voor elke transactie.
-
Een Verzenddatum – met de datum en tijd waarop de verkochte artikelen naar de klant zijn verzonden.
-
Een returndate met de datum en tijd waarop een of meer geretourneerde items zijn ontvangen.
Vergeet niet dat het veld DateKey met de transactiedatum het belangrijkst is. We doen de meeste van onze aggregaties op basis van deze datums, dus we willen zeker een relatie tussen deze datum en de kolom Datum in de tabel Agenda. Als we geen inactieve relaties willen maken tussen ShipDate en ReturnDate en het veld Date in de tabel Calendar, waardoor speciale meetformules nodig zijn, kunnen we extra datumtabellen maken voor verzenddatum en retourdatum. We kunnen vervolgens actieve relaties tussen hen maken.
In dit voorbeeld hebben we een andere datumtabel gemaakt met de naam ShipCalendar. Dit betekent natuurlijk ook dat er extra datumkolommen moeten worden gemaakt. Omdat deze datumkolommen zich in een andere datumtabel bevinden, willen we ze een naam geven die hen onderscheidt van dezelfde kolommen in de tabel Agenda. We hebben bijvoorbeeld kolommen gemaakt met de namen ShipYear, ShipMonth, ShipQuarter, enzovoort.
Als we onze draaitabel maken en de meting Totale verkoop in WAARDEN en ShipFiscalYear en ShipFiscalQuarter op ROWS plaatsen, zien we dezelfde resultaten die we zagen toen we een inactieve relatie en een speciaal berekend veld Totale verkoop per verzenddatum maakten.
Elk van deze benaderingen vereist zorgvuldige overweging. Wanneer u meerdere relaties gebruikt met één datumtabel, moet u mogelijk speciale metingen maken waarmee inactieve relaties worden overgedragen met behulp van de functie USERELATIONSHIP. Aan de andere kant kan het maken van meerdere datumtabellen verwarrend zijn in een lijst met velden en omdat u meer tabellen in het gegevensmodel hebt, is er meer geheugen vereist. Experimenteer met wat het beste voor u werkt.
Datumtabeleigenschap
De eigenschap Date Table stelt metagegevens in die nodig zijn voor Time-Intelligence functies zoals TOTALYTD, PREVIOUSMONTH en DATESBETWEEN om correct te werken. Wanneer een berekening wordt uitgevoerd met een van deze functies, weet de formule-engine van Power Pivot waar de datums moeten worden opgehaald die nodig zijn.
Waarschuwing: Als deze eigenschap niet is ingesteld, kunnen metingen met dax-Time-Intelligence-functies mogelijk niet de juiste resultaten opleveren.
Wanneer u de eigenschap Date Table instelt, geeft u een datumtabel en een datumkolom op van het gegevenstype Date (datetime).
Procedure: de eigenschap Datumtabel instellen
-
Selecteer in het PowerPivot-venster de tabel Agenda .
-
Klik op het tabblad Ontwerpen op Markeren als datumtabel.
-
Selecteer in het dialoogvenster Markeren als datumtabel een kolom met unieke waarden en het gegevenstype Datum.
Werken met tijd
Alle datumwaarden met een gegevenstype Datum in Excel of SQL Server zijn eigenlijk een getal. In dat getal zijn cijfers opgenomen die naar een tijd verwijzen. In veel gevallen is die tijd voor elke rij middernacht. Als een datetimekey-veld in een feitentabel Verkoop bijvoorbeeld waarden heeft zoals 19-10-2010 12:00:00 uur, betekent dit dat de waarden het dagprecisieniveau hebben. Als voor de waarden van het veld DateTimeKey een tijd is opgenomen, bijvoorbeeld 19-10-2010 8:44:00 uur, betekent dit dat de waarden een uiterst nauwkeurig niveau hebben. Waarden kunnen ook de precisie op uurniveau of zelfs seconden nauwkeurig zijn. Het nauwkeurigheidsniveau van de tijdwaarde heeft een aanzienlijke invloed op de wijze waarop u de datumtabel maakt en de relaties tussen de tabel en de feitentabel.
U moet bepalen of u uw gegevens wilt samenvoegen tot een dag of tot een tijdsniveau van precisie. Met andere woorden, mogelijk wilt u kolommen in de datumtabel gebruiken, zoals Ochtend, Middag of Uur als tijddatum in de rij-, kolom- of filtergebieden van een draaitabel.
Opmerking: Dagen zijn de kleinste tijdseenheid waarmee DAX Time Intelligence-functies kunnen werken. Als u niet met tijdwaarden hoeft te werken, moet u de nauwkeurigheid van uw gegevens verminderen om dagen als minimale eenheid te gebruiken.
Als u van plan bent om uw gegevens te aggregeren naar het tijdsniveau, heeft uw datumtabel een datumkolom met de tijd nodig. In feite heeft het een datumkolom nodig met één rij voor elk uur, of misschien zelfs elke minuut, van elke dag, voor elk jaar in het datumbereik. Als u een relatie wilt maken tussen de kolom DateTimeKey in de feitentabel en de datumkolom in de datumtabel, moet u namelijk overeenkomende waarden hebben. Zoals u zich kunt voorstellen, als u veel jaren opneemt, kan dit zorgen voor een zeer grote datumtabel.
In de meeste gevallen wilt u uw gegevens echter alleen naar de dag aggregeren. Met andere woorden, u gebruikt kolommen zoals Jaar, Maand, Week of Dag van de week als velden in de gebieden Rij, Kolom of Filter van een draaitabel. In dit geval hoeft de datumkolom in de datumtabel slechts één rij te bevatten voor elke dag in een jaar, zoals eerder is beschreven.
Als uw datumkolom een tijdsniveau van precisie bevat, maar u alleen wilt aggregeren tot een dagniveau, om de relatie tussen de feitentabel en de datumtabel te maken, moet u mogelijk de feitentabel wijzigen door een nieuwe kolom te maken waarmee de waarden in de datumkolom worden afgekapt tot een dagwaarde. Met andere woorden, converteer een waarde zoals 19-10-2010 8:44:00naar19-10-2010 12:00:00 uur. Vervolgens kunt u de relatie tussen deze nieuwe kolom en de datumkolom in de datumtabel maken omdat de waarden overeenkomen.
Laten we even naar een voorbeeld kijken. In deze afbeelding ziet u een kolom DateTimeKey in de feitentabel Verkoop. Alle aggregaties voor de gegevens in deze tabel hoeven alleen op dagniveau te zijn, met behulp van kolommen in de kalenderdatumtabel, zoals Jaar, Maand, Kwartaal, enzovoort. De tijd die in de waarde is opgenomen, is niet relevant, alleen de werkelijke datum.
Omdat we deze gegevens niet hoeven te analyseren tot het tijdniveau, hebben we de kolom Datum in de datumtabel Agenda niet nodig om één rij op te nemen voor elk uur en elke minuut van elke dag in elk jaar. De kolom Datum in de datumtabel ziet er dus als volgt uit:
Als u een relatie wilt maken tussen de kolom DateTimeKey in de tabel Sales en de kolom Date in de tabel Calendar, kunt u een nieuwe berekende kolom maken in de tabel Sales fact en de functie TRUNC gebruiken om de datum- en tijdwaarde in de kolom DateTimeKey af te kapen tot een datumwaarde die overeenkomt met de waarden in de kolom Datum in de tabel Agenda. Onze formule ziet er als volgt uit:
=TRUNC([DateTimeKey];0)
Dit geeft ons een nieuwe kolom (we hebben de naam DateKey) met de datum uit de kolom DateTimeKey en een tijd van 12:00:00 am voor elke rij:
Nu kunnen we een relatie maken tussen deze nieuwe kolom (DateKey) en de kolom Date in de tabel Agenda.
Op dezelfde manier kunnen we een berekende kolom maken in de tabel Sales die de tijdsprecisie in de kolom DateTimeKey vermindert tot het precisieniveau van het uur. In dit geval werkt de functie TRUNC niet, maar we kunnen nog steeds andere DAX-functies voor datum en tijd gebruiken om een nieuwe waarde te extraheren en opnieuw samen te stellen tot een uur precisieniveau. We kunnen een formule als deze gebruiken:
= DATE (YEAR([DateTimeKey]), MONTH([DateTimeKey]), DAY([DateTimeKey]) ) + TIME (HOUR([DateTimeKey]), 0, 0)
De nieuwe kolom ziet er als volgt uit:
Op voorwaarde dat de kolom Datum in de datumtabel waarden bevat tot het precisieniveau van het uur, kunnen we er vervolgens een relatie tussen maken.
Datums bruikbaarder maken
Veel van de datumkolommen die u in de datumtabel maakt, zijn nodig voor andere velden, maar zijn eigenlijk niet zo nuttig voor analyse. Het veld DateKey in de tabel Sales waarnaar we in dit artikel hebben verwezen en weergegeven, is bijvoorbeeld belangrijk omdat voor elke transactie wordt geregistreerd dat deze transactie plaatsvindt op een bepaalde datum en tijd. Maar vanuit het oogpunt van analyse en rapportage is het niet zo handig omdat we het niet kunnen gebruiken als rij-, kolom- of filterveld in een draaitabel of rapport.
In ons voorbeeld is de kolom Datum in de tabel Agenda zeer nuttig en zelfs kritiek, maar u kunt deze kolom niet gebruiken als een dimensie in een draaitabel.
Om tabellen en de kolommen erin zo nuttig mogelijk te houden en om draaitabel- of Power View-rapportveldlijsten gemakkelijker te navigeren, is het belangrijk om onnodige kolommen te verbergen voor clienthulpprogramma's. U kunt ook bepaalde tabellen verbergen. De tabel Feestdagen die eerder wordt weergegeven, bevat feestdagen die belangrijk zijn voor bepaalde kolommen in de tabel Agenda, maar u kunt de kolommen Datum en Feestdagen in de tabel Feestdagen zelf niet gebruiken als velden in een draaitabel. Ook hier kunt u de hele tabel Feestdagen verbergen, zodat u gemakkelijker kunt navigeren in veldenlijsten.
Een ander belangrijk aspect van het werken met datums zijn naamconventies. U kunt tabellen en kolommen in Power Pivot een naam noemen wat u maar wilt. Houd er echter rekening mee dat, vooral als u uw werkmap met andere gebruikers deelt, een goede naamconventie het gemakkelijker maakt om tabellen en datums te identificeren, niet alleen in veldenlijsten, maar ook in Power Pivot en in DAX-formules.
Nadat u een datumtabel in uw gegevensmodel hebt, kunt u beginnen met het maken van metingen waarmee u het meeste uit uw gegevens kunt halen. Sommige kunnen zo eenvoudig zijn als het optellen van verkooptotalen voor het huidige jaar en andere kunnen complexer zijn, waarbij u moet filteren op een bepaald bereik van unieke datums. Meer informatie in Metingen in Power Pivot - en Time Intelligence-functies.
Bijlage
Datums van tekstgegevenstype converteren naar een datumgegevenstype
In sommige gevallen kan een feitentabel met transactiegegevens datums van het gegevenstype tekst bevatten. Een datum die wordt weergegeven als 2012-12-04T11:47:09 is in feite helemaal geen datum, of ten minste niet het type datum dat Power Pivot kan begrijpen. Het is gewoon tekst die leest als een datum. Als u een relatie wilt maken tussen een datumkolom in de feitentabel en een datumkolom in een datumtabel, moeten beide kolommen van het gegevenstype Datum zijn.
Wanneer u het gegevenstype voor een kolom met datums die het gegevenstype tekst zijn, probeert te wijzigen in een datumgegevenstype, kan Power Pivot de datums interpreteren en automatisch converteren naar een gegevenstype waar. Als Power Pivot geen gegevenstypeconversie kan uitvoeren, krijgt u een fout die niet overeenkomt met het type.
U kunt de datums echter nog steeds converteren naar een gegevenstype waar. U kunt een nieuwe berekende kolom maken en een DAX-formule gebruiken om het jaar, de maand, de dag, de tijd, enzovoort van de tekenreeksen te parseren en deze vervolgens weer samen te voegen op een manier waarop Power Pivot als een werkelijke datum kan worden gelezen.
In dit voorbeeld hebben we een feitentabel met de naam Verkoop geïmporteerd in Power Pivot. Deze bevat een kolom met de naam DateTime. Waarden zien er als volgt uit:
Als we gegevenstype in het tabblad Start van power Pivot in de groep Opmaak bekijken, zien we dat het gegevenstype Tekst is.
Er kan geen relatie worden gemaakt tussen de kolom DateTime en de kolom Date in de datumtabel, omdat de gegevenstypen niet overeenkomen. Als we proberen het gegevenstype te wijzigen in Datum, krijgen we een fout die niet overeenkomt met het type:
In dit geval kan Power Pivot het gegevenstype niet converteren van tekst naar datum. We kunnen deze kolom nog steeds gebruiken, maar om deze in een echt datumgegevenstype te krijgen, moeten we een nieuwe kolom maken waarmee de tekst wordt geparseerd en opnieuw wordt gemaakt in een waarde die Power Pivot een datumgegevenstype kan maken.
Vergeet niet uit de sectie Werken met tijd eerder in dit artikel; tenzij het noodzakelijk is dat uw analyse wordt uitgevoerd op een tijd-of-dag precisieniveau, moet u datums in uw feitentabel converteren naar een dag van precisie. Met dat in gedachten willen we dat de waarden in de nieuwe kolom op het dagprecisieniveau (exclusief tijd) staan. We kunnen de waarden in de kolom DateTime converteren naar een datumgegevenstype en het precisieniveau van de tijd verwijderen met de volgende formule:
=DATE(LEFT([DateTime];4), MID([DateTime],6,2), MID([DateTime];9,2))
Dit geeft ons een nieuwe kolom (in dit geval, met de naam Date). Power Pivot detecteert zelfs datumwaarden en stelt het gegevenstype automatisch in op Datum.
Als we het tijdsniveau van precisie willen behouden, breiden we de formule uit met de uren, minuten en seconden.
=DATE(LEFT([DateTime];4), MID([DateTime],6,2), MID([DateTime];9;2)) +
TIME(MID([DateTime],12,2), MID([DateTime],15,2), MID([DateTime],18,2))
Nu we een datumkolom van het gegevenstype Datum hebben, kunnen we er een relatie tussen maken en een datumkolom in een datum.
Aanvullende bronnen
QuickStart: informatie over de grondbeginselen van DAX in 30 minuten