Datotabeller i Power Pivot er vigtige for at gennemse og beregne data over tid. Denne artikel giver en grundig forståelse af datotabeller, og hvordan du kan oprette dem i Power Pivot. I denne artikel beskrives især:
-
Derfor er en datotabel vigtig for at gennemse og beregne data efter datoer og klokkeslæt.
-
Sådan bruger du Power Pivot til at føje en datotabel til datamodellen.
-
Sådan opretter du nye datokolonner, f.eks. År, Måned og Periode i en datotabel.
-
Sådan opretter du relationer mellem datotabeller og faktatabeller.
-
Sådan arbejder du med tiden.
Denne artikel henvender sig til brugere, der ikke tidligere har været i Power Pivot. Det er dog vigtigt, at du allerede har en god forståelse af import af data, oprettelse af relationer og oprettelse af beregnede kolonner og målinger.
I denne artikel beskrives det ikke , hvordan du bruger DAX-Time-Intelligence-funktioner i måleformler. Du kan finde flere oplysninger om, hvordan du opretter målinger med DAX Time Intelligence-funktioner, under Time Intelligence i Power Pivot i Excel.
Bemærk!: I Power Pivot er navnene "måling" og "beregnet felt" synonyme. Vi bruger navnemålingen i hele denne artikel. Du kan få mere at vide under Målinger i Power Pivot.
Indhold
Forstå datotabeller
Næsten alle dataanalyser involverer browsing og sammenligning af data over datoer og klokkeslæt. Det kan f.eks. være, at du vil summere salgsbeløb for det seneste regnskabskvartal og derefter sammenligne disse totaler med andre kvartaler, eller måske vil du beregne en månedsafslutningssaldo for en konto. I hvert af disse tilfælde bruger du datoer som en metode til at gruppere og aggregere salgstransaktioner eller saldi for en bestemt periode.
Power View-rapport
En datotabel kan indeholde mange forskellige repræsentationer af datoer og klokkeslæt. En datotabel indeholder f.eks. ofte kolonner som f.eks. Regnskabsår, Måned, Kvartal eller Periode, som du kan vælge som felter fra en feltliste, når du udskrækker og filtrerer dine data i pivottabeller eller Power View-rapporter.
Power View-feltliste
Hvis datokolonner som År, Måned og Kvartal skal indeholde alle datoerne inden for deres respektive område, skal datotabellen have mindst én kolonne med et sammenhængende sæt datoer. Det betyder, at kolonnen skal have én række for hver dag for hvert år inkluderet i datotabellen.
Hvis de data, du vil gennemse, f.eks. har datoer fra 1. februar 2010 til 30. november 2012, og du rapporterer om et kalenderår, skal du have en datotabel med mindst et datointerval fra 1. januar 2010 til 31. december 2012. Hvert år i datotabellen skal indeholde alle dage for hvert år. Hvis du jævnligt opdaterer dine data med nyere data, kan det være en god ide at køre slutdatoen et år eller to, så du ikke behøver at opdatere datotabellen, som tiden går.
Datotabel med et sammenhængende sæt datoer
Hvis du rapporterer for et regnskabsår, kan du oprette en datotabel med et sammenhængende sæt datoer for hvert regnskabsår. Hvis dit regnskabsår f.eks. starter d. 1. marts, og du har data for regnskabsår 2010 frem til den aktuelle dato (f.eks. i regnskabsåret 2013), kan du oprette en datotabel, der starter d. 01-03-2009 og omfatter mindst hver dag i hvert regnskabsår til den sidste dato i regnskabsår 2013.
Hvis du vil rapportere både kalenderår og regnskabsår, behøver du ikke at oprette separate datotabeller. En enkelt datotabel kan indeholde kolonner for et kalenderår, et regnskabsår og endda en 13 kalender med fire ugers periode. Det vigtige er, at datotabellen indeholder et sammenhængende sæt datoer for alle de år, der er inkluderet.
Føje en datotabel til datamodellen
Du kan føje en datotabel til datamodellen på flere måder:
-
Importér fra en relationsdatabase eller en anden datakilde.
-
Opret en datotabel i Excel, og kopiér eller opret et link til en ny tabel i Power Pivot.
-
Importér fra Microsoft Azure Marketplace.
Lad os se nærmere på hver af disse.
Importere fra en relationsdatabase
Hvis du importerer nogle eller alle dine data fra et datalagersted eller en anden type relationsdatabase, er der sandsynligvis allerede en datotabel og relationer mellem den og resten af de data, du importerer. Datoerne og formatet svarer sandsynligvis til datoerne i dine faktadata, og datoerne begynder sandsynligvis godt tidligere og går langt ud i fremtiden. Den datotabel, du vil importere, kan være meget stor og indeholde et datointerval ud over det, du skal medtage i datamodellen. Du kan bruge guiden Tabelimport i PowerPivots avancerede filterfunktioner til selektivt kun at vælge de datoer og bestemte kolonner, du har brug for. Dette kan reducere projektmappens størrelse betydeligt og forbedre ydeevnen.
Guiden Tabelimport
I de fleste tilfælde behøver du ikke at oprette flere kolonner som f.eks. Regnskabsår, Uge, Månedsnavn osv., da de allerede findes i den importerede tabel. Men i nogle tilfælde, når du har importeret datotabellen til datamodellen, kan det være nødvendigt at oprette flere datokolonner afhængigt af et bestemt rapporteringsbehov. Heldigvis er dette nemt at gøre ved hjælp af DAX. Du kan få mere at vide om at oprette datotabelfelter senere. Hvert miljø er forskelligt. Hvis du ikke er sikker på, om dine datakilder har en relateret dato eller kalendertabel, skal du kontakte din databaseadministrator.
Opret en datotabel i Excel
Du kan oprette en datotabel i Excel og derefter kopiere den til en ny tabel i datamodellen. Dette er virkelig ganske nemt at gøre, og det giver dig en masse fleksibilitet.
Når du opretter en datotabel i Excel, starter du med en enkelt kolonne med et sammenhængende datoområde. Du kan derefter oprette flere kolonner, f.eks. År, Kvartal, Måned, Regnskabsår, Periode osv. i Excel-regnearket ved hjælp af Excel-formler, eller når du har kopieret tabellen til datamodellen, kan du oprette dem som beregnede kolonner. Oprettelse af flere datokolonner i Power Pivot er beskrevet i afsnittet Føje nye datokolonner til sektionen Datotabel senere i denne artikel.
Sådan gør du: Opret en datotabel i Excel, og kopiér den til datamodellen
-
Skriv et kolonneoverskriftsnavn i celle A1 i et tomt regneark i Excel for at identificere et datoområde. Dette vil typisk værenoget i stil med Dato, DateTime eller DateKey.
-
Skriv en startdato i celle A2. Eksempel: 1/1/2010.
-
Klik på fyldhåndtaget, og træk det ned til et rækkenummer, der indeholder en slutdato. Eksempel: 31-12-2016.
-
Markér alle rækker i kolonnen Dato (herunder overskriftsnavnet i celle A1).
-
Klik på Formatér som tabel i gruppen Typografier, og vælg derefter en typografi.
-
Klik på OK i dialogboksen Formatér som tabel.
-
Kopiér alle rækker, herunder overskriften.
-
Klik på Sæt ind under fanen Hjem i Power Pivot.
-
I Indsæt eksempel >Tabelnavn skal du skrive et navn, f.eks . Dato eller Kalender. Lad Brug første række som kolonneoverskriftervære markeret, og klik derefter på OK.
Den nye datotabel (kaldet Kalender i dette eksempel) i Power Pivot ser sådan ud:
Bemærk!: Du kan også oprette en sammenkædet tabel ved hjælp af Føj til datamodel. Dette gør dog projektmappen unødvendigt stor, fordi projektmappen har to versioner af datotabellen. én i Excel og én i Power Pivot.
Bemærk!: Navnsdatoen er et nøgleord i Power Pivot. Hvis du navngiver den tabel, du opretter i Power Pivot-dato, skal du omslutte tabelnavnet med enkelte anførselstegn i de DAX-formler, der refererer til det i et argument. Alle eksempelbilleder og formler i denne artikel henviser til en datotabel, der er oprettet i Power Pivot med navnet Kalender.
Du har nu en datotabel i datamodellen. Du kan tilføje nye datokolonner, f.eks. År, Måned osv. ved hjælp af DAX.
Tilføjelse af nye datokolonner i datotabellen
En datotabel med en enkelt datokolonne, der har én række for hver dag for hvert år, er vigtig for at definere alle datoerne i et datointerval. Det er også nødvendigt for at oprette en relation mellem faktatabellen og datotabellen. Men den enkelte datokolonne med én række for hver dag er ikke nyttig, når du analyserer efter datoer i en pivottabel eller Power View-rapport. Du ønsker, at datotabellen skal indeholde kolonner, der hjælper dig med at aggregere dine data for et område eller en gruppe af datoer. Det kan f.eks. være, at du vil summere salgsbeløb efter måned eller kvartal, eller du kan oprette en måling, der beregner væksten år-for-år. I hvert af disse tilfælde skal datotabellen have år-, måneds- eller kvartalskolonner, så du kan aggregere dine data for den pågældende periode.
Hvis du har importeret datotabellen fra en relationel datakilde, indeholder den muligvis allerede de forskellige typer datokolonner, du ønsker. I nogle tilfælde kan det være en god ide at ændre nogle af disse kolonner eller oprette flere datokolonner. Dette gælder især, hvis du opretter din egen datotabel i Excel og kopierer den til datamodellen. Heldigvis er det ret nemt at oprette nye datokolonner i Power Pivot med dato- og klokkeslætsfunktioner i DAX.
Tip!: Hvis du endnu ikke har arbejdet med DAX, er et godt sted at starte læring med Hurtig start: Lær de grundlæggende DAX-funktioner på 30 minutter på Office.com.
Dato- og klokkeslætsfunktioner i DAX
Hvis du nogensinde har arbejdet med dato- og klokkeslætsfunktioner i Excel-formler, vil du sandsynligvis være fortrolig med dato- og klokkeslætsfunktionerne. Selvom disse funktioner ligner deres modstykker i Excel, er der nogle vigtige forskelle:
-
DaX-funktionerne Dato og klokkeslæt bruger en datetime-datatype.
-
De kan tage værdier fra en kolonne som argument.
-
De kan bruges til at returnere og/eller manipulere datoværdier.
Disse funktioner bruges ofte, når du opretter brugerdefinerede datokolonner i en datotabel, så de er vigtige at forstå. Vi bruger en række af disse funktioner til at oprette kolonner for År, Kvartal, Regnskabsmåned osv.
Bemærk!: Dato- og klokkeslætsfunktionerne i DAX er ikke det samme som Time Intelligence-funktioner. Få mere at vide om Time Intelligence i Power Pivot i Excel.
DAX indeholder følgende dato- og klokkeslætsfunktioner:
Der er mange andre DAX-funktioner, du også kan bruge i dine formler. Mange af de formler, der er beskrevet her, bruger f.eks . matematiske og trigonometriske funktioner som REST og AFKORT, Logiske funktioner som HVIS og Tekstfunktioner som FORMAT Hvis du vil have mere at vide om andre DAX-funktioner, skal du se afsnittet Yderligere ressourcer senere i denne artikel.
Formeleksempler for et kalenderår
I følgende eksempler beskrives formler, der bruges til at oprette flere kolonner i en datotabel med navnet Kalender. En kolonne med navnet Dato findes allerede og indeholder et sammenhængende område med datoer fra 1-1-2010 til og med 31-12-2016.
År
=ÅR([dato])
I denne formel returnerer funktionen ÅR året fra værdien i kolonnen Dato. Da værdien i kolonnen Dato er af datatypen datetime, ved funktionen ÅR, hvordan du returnerer året fra den.
Måned
=MÅNED([dato])
I denne formel, ligesom med funktionen ÅR, kan vi blot bruge funktionen MÅNED til at returnere en månedsværdi fra kolonnen Dato.
Kvartal
=HELT. (([Måned]+2)/3)
I denne formel bruger vi funktionen HELTAL til at returnere en datoværdi som et heltal. Det argument, vi angiver for funktionen HELTAL, er værdien fra kolonnen Måned, tilføjer 2 og dividerer det derefter med 3 for at få vores kvartal, 1 til 4.
Månedsnavn
=FORMAT([dato],"mmmm")
I denne formel bruger vi funktionen FORMAT til at konvertere en numerisk værdi fra kolonnen Dato til tekst for at få månedsnavnet. Vi angiver kolonnen Dato som det første argument og derefter formatet. vi ønsker, at vores månedsnavn skal vise alle tegn, så vi bruger "mmmm". Vores resultat ser sådan ud:
Hvis vi vil returnere månedsnavnet forkortet til tre bogstaver, bruger vi "mmm" i argumentet format.
Ugedag
=FORMAT([dato],"ddd")
I denne formel bruger vi funktionen FORMAT til at hente dagsnavnet. Da vi blot ønsker et forkortet dagsnavn, angiver vi "ddd" i argumentet format.
Eksempel på pivottabel
Når du har felter til datoer som f.eks. År, Kvartal, Måned osv., kan du bruge dem i en pivottabel eller rapport. Følgende billede viser f.eks. feltet Salgsbeløb fra faktatabellen Salg i VÆRDIER og År og Kvartal fra dimensionstabellen Kalender i RÆKKER. Salgsbeløb aggregeres for konteksten for år og kvartal.
Formeleksempler for et regnskabsår
Regnskabsår
=HVIS([Måned]<= 6,[År],[År]+1)
I dette eksempel begynder regnskabsåret den 1. juli.
Der er ingen funktion, der kan udtrække et regnskabsår fra en datoværdi, fordi start- og slutdatoerne for et regnskabsår ofte er forskellige fra dem i et kalenderår. For at hente regnskabsåret bruger vi først en HVIS-funktion til at teste, om værdien for Måned er mindre end eller lig med 6. Hvis værdien for Måned er mindre end eller lig med 6 i det andet argument, skal du returnere værdien fra kolonnen År. Hvis ikke, skal du returnere værdien fra Year og lægge 1 til.
En anden måde at angive værdien for et regnskabsårs slutningsmåned på er at oprette en måling, der blot angiver måneden. F.eks. FYE:=6. Du kan derefter henvise til målingens navn i stedet for månedsnummeret. F.eks. =HVIS([Måned]<=[ÅÅÅ],[År],[År]+1). Dette giver større fleksibilitet, når du refererer til regnskabsårets slutningsmåned i flere forskellige formler.
Regnskabsmåned
=HVIS([Måned]<= 6, 6+[Måned], [Måned]- 6)
I denne formel angiver vi, om værdien for [Måned] er mindre end eller lig med 6, tager 6 og lægger værdien fra Måned, ellers trækker vi 6 fra værdien fra [Måned].
Regnskabskvartal
=HELTAL(([Regnskabsmåned]+2)/3)
Den formel, vi bruger til FiscalQuarter, er meget den samme, som den var for Kvartal i vores kalenderår. Den eneste forskel er, at vi angiver [Finansmåned] i stedet for [Måned].
Helligdage eller særlige datoer
Du kan medtage en datokolonne, der angiver, at bestemte datoer er helligdage eller en anden særlig dato. Det kan f.eks. være, at du vil summere salgstotalerne for nytårsdage ved at føje et helligdagsfelt til en pivottabel, som et udsnit eller filter. I andre tilfælde kan det være en god ide at udelade disse datoer fra andre datokolonner eller i en måling.
Det er ganske enkelt at inkludere helligdage eller særlige dage. Du kan oprette en tabel i Excel med de datoer, du vil medtage. Du kan derefter kopiere eller bruge Føj til datamodel for at føje den til datamodellen som en sammenkædet tabel. I de fleste tilfælde er det ikke nødvendigt at oprette en relation mellem tabellen og kalendertabellen. Alle formler, der refererer til den, kan bruge funktionen SLÅ.OP.VÆRDI til at returnere værdier.
Nedenfor er et eksempel på en tabel, der er oprettet i Excel, og som indeholder helligdage, der skal føjes til datotabellen:
Dato |
Helligdag |
---|---|
1/1/2010 |
Nye år |
11/25/2010 |
Thanksgiving |
12/25/2010 |
Jul |
01-01-2011 |
Nye år |
11/24/2011 |
Thanksgiving |
12/25/2011 |
Jul |
01-01-2012 |
Nye år |
22-11-2012 |
Thanksgiving |
12/25/2012 |
Jul |
1/1/2013 |
Nye år |
11/28/2013 |
Thanksgiving |
12/25/2013 |
Jul |
11/27/2014 |
Thanksgiving |
12/25/2014 |
Jul |
01-01-2014 |
Nye år |
11/27/2014 |
Thanksgiving |
12/25/2014 |
Jul |
1/1/2015 |
Nye år |
11/26/2014 |
Thanksgiving |
12/25/2015 |
Jul |
01-01-2016 |
Nye år |
11/24/2016 |
Thanksgiving |
12/25/2016 |
Jul |
I datotabellen opretter vi en kolonne med navnet Ferie og bruger en formel som denne:
=SLÅ.OPVÆRDI(Helligdage[Ferie],Helligdage[dato],Kalender[dato])
Lad os se nærmere på denne formel.
Vi bruger funktionen SLÅ.OPVÆRDI til at hente værdier fra kolonnen Ferie i tabellen Helligdage. I det første argument angiver vi den kolonne, hvor vores resultatværdi skal være. Vi angiver kolonnen Ferie i tabellen Helligdage , fordi det er den værdi, vi vil returnere.
=SLÅ.OPVÆRDI(Helligdage[Ferie],Helligdage[dato],Kalender[dato])
Vi angiver derefter det andet argument, den søgekolonne, der indeholder de datoer, vi vil søge efter. Vi angiver kolonnen Dato i tabellen Helligdage på følgende måde:
=SLÅ.OPVÆRDI(Helligdage[Ferie],Helligdage[dato],Kalender[dato])
Til sidst angiver vi kolonnen i tabellen Kalender , der indeholder de datoer, vi vil søge efter, i tabellen Ferie . Dette er selvfølgelig kolonnen Dato i tabellen Kalender .
=SLÅ.OPVÆRDI(Helligdage[Ferie],Helligdage[dato],Kalender[dato])
Kolonnen Ferie returnerer helligdagsnavnet for hver række, der har en datoværdi, der svarer til en dato i tabellen Helligdage.
Brugerdefineret kalender – 13 fire ugers perioder
Nogle organisationer, f.eks. detail- eller fødevareservice, rapporterer ofte om forskellige perioder, f.eks. 13 perioder med fire uger. Med en 13 kalender med fire uger er hver periode 28 dage. derfor indeholder hver periode fire mandage, fire tirsdage, fire onsdage osv. Hver periode indeholder det samme antal dage, og helligdage falder typisk inden for den samme periode hvert år. Du kan vælge at starte en periode på en hvilken som helst dag i ugen. På samme måde som med datoer i en kalender eller et regnskabsår kan du bruge DAX til at oprette flere kolonner med brugerdefinerede datoer.
I eksemplerne nedenfor starter den første hele periode den første søndag i regnskabsåret. I dette tilfælde begynder regnskabsåret den 7/1.
Uge
Denne værdi giver os ugenummeret, der starter med den første hele uge i regnskabsåret. I dette eksempel starter den første hele uge søndag, så den første hele uge i det første regnskabsår i tabellen Kalender faktisk starter den 4-07-2010 og fortsætter til og med den sidste hele uge i tabellen Kalender. Selvom denne værdi i sig selv ikke er så nyttig i analysen, er det nødvendigt at beregne til brug i andre formler med 28 dage.
=HELT. ([dato]-40356)/7)
Lad os se nærmere på denne formel.
Først opretter vi en formel, der returnerer værdier fra kolonnen Dato som et heltal, sådan her:
=HELT. ([dato])
Derefter vil vi søge efter den første søndag i det første regnskabsår. Vi kan se, at det er 07-04-2010.
Træk nu 40356 (som er heltal for 27-6-2010, den sidste søndag fra det forrige regnskabsår) fra denne værdi for at få antallet af dage siden starten af dage i tabellen Kalender, sådan her:
=HELT. ([dato]-40356)
Divider derefter resultatet med 7 (dage i en uge) på følgende måde:
=HELT. (([dato]-40356)/7)
Resultatet ser sådan ud:
Period
Perioden i denne brugerdefinerede kalender indeholder 28 dage, og den starter altid på en søndag. Denne kolonne returnerer nummeret på perioden, der begynder med den første søndag i det første regnskabsår.
=HELT. (([Uge]+3)/4)
Lad os se nærmere på denne formel.
Først opretter vi en formel, der returnerer en værdi fra kolonnen Uge som et heltal, sådan her:
=HELT. ([Uge])
Føj derefter 3 til denne værdi, sådan her:
=HELT. ([Uge]+3)
Divider derefter resultatet med 4, sådan her:
=HELT. (([Uge]+3)/4)
Resultatet ser sådan ud:
Periode regnskabsår
Denne værdi returnerer regnskabsåret for en periode.
=HELT. (([Punktum]+12)/13)+2008
Lad os se nærmere på denne formel.
Først opretter vi en formel, der returnerer en værdi fra Punktum og lægger 12 sammen:
= ([Punktum]+12)
Vi dividerer resultatet med 13, fordi der er 13 perioder på 28 dage i regnskabsåret:
=(([Punktum]+12)/13)
Vi tilføjer 2010, fordi det er det første år i tabellen:
=(([Punktum]+12)/13)+2010
Til sidst bruger vi funktionen HELTAL til at fjerne en hvilken som helst brøkdel af resultatet og returnere et helt tal, når det divideres med 13, sådan her:
=HELT. (([Punktum]+12)/13)+2010
Resultatet ser sådan ud:
Periode i Regnskabsår
Denne værdi returnerer periodenummeret 1-13 startende med den første fulde periode (begyndende søndag) i hvert regnskabsår.
=HVIS(REST([Punktum],13), REST([Punktum],13),13)
Denne formel er lidt mere kompleks, så vi vil først beskrive den på et sprog, vi bedre forstår. Denne formel angiver, at værdien fra [Periode] skal divideres med 13 for at få et periodetal (1-13) i året. Hvis tallet er 0, returneres 13.
Først opretter vi en formel, der returnerer resten af værdien fra Periode med 13. Vi kan bruge FUNKTIONERNE REST (Matematiske og Trigonometriske funktioner) sådan her:
=REST([Punktum],13)
Dette giver os for det meste det ønskede resultat, undtagen hvor værdien for Periode er 0, fordi disse datoer ikke falder inden for det første regnskabsår, f.eks. i de første fem dage af vores eksempeltabel med kalenderdatoer. Vi kan tage os af dette med en HVIS-funktion. Hvis vores resultat er 0, returnerer vi 13, som dette:
=HVIS(REST([Punktum],13),REST([Punktum],13),13)
Resultatet ser sådan ud:
Eksempel på pivottabel
Billedet nedenfor viser en pivottabel med feltet Salgsbeløb fra faktatabellen Salg i VÆRDIER og felterne PeriodFiscalYear og PeriodInFiscalYear fra tabellen Kalenderdatodimension i RÆKKER. Salgsbeløb aggregeres for konteksten efter regnskabsår og 28-dages periode i regnskabsåret.
Relationer
Når du har oprettet en datotabel i datamodellen, skal du oprette en relation mellem faktatabellen og transaktionsdataene og datotabellen for at begynde at gennemse dine data i pivottabeller og rapporter og for at aggregere data baseret på kolonnerne i datodimensionstabellen.
Da du skal oprette en relation baseret på datoer, skal du sikre dig, at du opretter denne relation mellem kolonner, hvis værdier er af datatypen datetime (Dato).
For hver datoværdi i faktatabellen skal den relaterede opslagskolonne i datotabellen indeholde matchende værdier. En række (transaktionspost) i faktatabellen Salg med en værdi på 15-08-2012 12:00 i kolonnen DateKey skal f.eks. have en tilsvarende værdi i den relaterede datokolonne i datotabellen (kaldet Kalender). Dette er en af de vigtigste årsager til, at datokolonnen i datotabellen skal indeholde et sammenhængende datointerval, der indeholder en eventuel dato i faktatabellen.
Bemærk!: Mens datokolonnen i hver tabel skal have samme datatype (Dato), betyder formatet for hver kolonne ikke noget.
Bemærk!: Hvis du ikke kan oprette relationer mellem de to tabeller i Power Pivot, gemmer dato- og klokkeslætsfelterne muligvis ikke samme præcisionsniveau. Afhængigt af kolonneformateringen kan værdierne se ens ud, men de gemmes anderledes. Læs mere om at arbejde med tid.
Bemærk!: Undgå at bruge heltals surrogattaster i relationer. Når du importerer data fra en relationel datakilde, repræsenteres dato- og klokkeslætskolonner ofte af en surrogatnøgle, som er en heltalskolonne, der bruges til at repræsentere en entydig dato. I Power Pivot skal du undgå at oprette relationer ved hjælp af heltalstaster for dato og klokkeslæt og i stedet bruge kolonner, der indeholder entydige værdier med en datodatatype. Selvom brugen af surrogatnøgler betragtes som en bedste praksis i traditionelle datalagre, er heltalsnøglerne ikke nødvendige i Power Pivot og kan gøre det svært at gruppere værdier i pivottabeller efter forskellige datoperioder.
Hvis du får en typeuoverensstemmelsesfejl, når du forsøger at oprette en relation, skyldes det sandsynligvis, at kolonnen i faktatabellen ikke er af datatypen Dato. Dette kan ske, når Power Pivot ikke automatisk kan konvertere en ikke-dato (som regel en tekstdatatype) til en datodatatype. Du kan stadig bruge kolonnen i faktatabellen, men du skal konvertere dataene med en DAX-formel i en ny beregnet kolonne. Se Konvertere tekstdatatypedatoer til en datodatatype senere i appendikset.
Flere relationer
I nogle tilfælde kan det være nødvendigt at oprette flere relationer eller oprette flere datotabeller. Hvis der f.eks. er flere datofelter i faktatabellen Salg, f.eks. DateKey, ShipDate og ReturnDate, kan de alle have relationer til feltet Dato i datotabellen Kalender, men kun én af disse kan være en aktiv relation. Da DateKey i dette tilfælde repræsenterer datoen for transaktionen og derfor den vigtigste dato, vil dette bedst fungere som den aktive relation. De andre har inaktive relationer.
Følgende pivottabel beregner det samlede salg efter regnskabsår og regnskabskvartal. En måling med navnet Samlet salg med formlen Samlet salg:=SUM([Salgsbeløb]) placeres i FELTERNE VÆRDIER, og Felterne Regnskabsår og Regnskabskvartal fra datotabellen Kalender placeres i RÆKKER.
Denne pivottabel med ligetil fungerer korrekt, fordi vi vil summere vores samlede salg efter transaktionsdatoeni DateKey. Vores måling Samlet salg bruger datoerne i DateKey og summeres efter regnskabsår og regnskabskvartal, fordi der er en relation mellem DateKey i tabellen Salg og kolonnen Dato i datotabellen Kalender.
Inaktive relationer
Men hvad nu, hvis vi vil summere vores samlede salg ikke efter transaktionsdato, men efter forsendelsesdato? Vi har brug for en relation mellem kolonnen Forsendelsesdato i tabellen Salg og kolonnen Dato i tabellen Kalender. Hvis vi ikke opretter denne relation, er vores sammenlægninger altid baseret på transaktionsdatoen. Vi kan dog have flere relationer, selvom kun én kan være aktiv, og fordi transaktionsdatoen er den vigtigste, får den aktive relation til tabellen Kalender.
I dette tilfælde har Forsendelsesdato en inaktiv relation, så alle måleformler, der oprettes for at sammenlægge data baseret på forsendelsesdatoer, skal angive den inaktive relation ved hjælp af funktionen USERELATIONSHIP .
Da der f.eks. er en inaktiv relation mellem kolonnen Forsendelsesdato i tabellen Salg og kolonnen Dato i tabellen Kalender, kan vi oprette en måling, der summerer samlet salg efter forsendelsesdato. Vi bruger en formel som denne til at angive den relation, der skal bruges:
Samlet salg efter forsendelsesdato:=BEREGN(SUM(Salg[Salgsbeløb]), USERELATIONSHIP(Salg[Forsendelsesdato], Kalender[Dato]))
Denne formel angiver blot: Beregn en sum for SalesAmount, men filtrer ved hjælp af relationen mellem kolonnen Forsendelsesdato i tabellen Salg og kolonnen Dato i tabellen Kalender.
Hvis vi opretter en pivottabel og placerer Samlet salg efter forsendelsesdato i VÆRDIER og Regnskabsår og Regnskabsår på RÆKKER, ser vi den samme hovedtotal, men alle andre sumbeløb for regnskabsår og regnskabsår er anderledes, fordi de er baseret på afsendelsesdatoen og ikke transaktionsdatoen.
Ved hjælp af inaktive relationer kan du kun bruge én datotabel, men det kræver, at alle målinger (f.eks. Samlet salg efter leveringsdato) refererer til den inaktive relation i formlen. Der er et andet alternativ, nemlig at bruge flere datotabeller.
Flere datotabeller
En anden måde at arbejde med flere datokolonner i faktatabellen på er at oprette flere datotabeller og oprette separate aktive relationer mellem dem. Lad os se på eksemplet med tabellen Salg igen. Vi har tre kolonner med datoer, som vi måske gerne vil aggregere data om:
-
En DateKey med salgsdatoen for hver transaktion.
-
En Leveringsdato – med den dato og det klokkeslæt, hvor de solgte varer blev sendt til kunden.
-
En ReturnDate – med datoen og klokkeslættet for modtagelse af en eller flere returnerede varer.
Husk, at feltet DateKey med posteringsdatoen er vigtigst. Vi vil udføre de fleste af vores sammenlægninger baseret på disse datoer, så vi vil helt sikkert gerne have en relation mellem den og kolonnen Dato i tabellen Kalender. Hvis vi ikke vil oprette inaktive relationer mellem Forsendelsesdato og Returdato og feltet Dato i tabellen Kalender, hvilket kræver særlige måleformler, kan vi oprette flere datotabeller for afsendelsesdato og returdato. Vi kan derefter oprette aktive relationer mellem dem.
I dette eksempel har vi oprettet en anden datotabel med navnet ShipCalendar. Dette betyder selvfølgelig også, at du skal oprette flere datokolonner, og da disse datokolonner er i en anden datotabel, vil vi navngive dem på en måde, der adskiller dem fra de samme kolonner i tabellen Kalender. Vi har f.eks. oprettet kolonner med navnet ShipYear, ShipMonth, ShipQuarter osv.
Hvis vi opretter vores pivottabel og placerer vores måling Samlet salg i VÆRDIER og ShipFiscalYear og ShipFiscalQuarter i RÆKKER, ser vi de samme resultater, som vi så, da vi oprettede en inaktiv relation og et særligt beregnet felt samlet salg efter forsendelsesdato.
Hver af disse tilgange kræver nøje overvejelse. Når du bruger flere relationer med en enkelt datotabel, kan det være nødt til at oprette særlige målinger, der transiter inaktive relationer ved hjælp af funktionen USERELATIONSHIP. På den anden side kan det være forvirrende at oprette flere datotabeller på en feltliste, og fordi du har flere tabeller i datamodellen, kræver det mere hukommelse. Eksperimentér med, hvad der fungerer bedst for dig.
Egenskaben Datotabel
Egenskaben Datotabel angiver metadata, der er nødvendige for Time-Intelligence funktioner som f.eks. TOTALYTD, PREVIOUSMONTH og DATESBETWEEN, for at fungere korrekt. Når en beregning køres ved hjælp af en af disse funktioner, ved Power Pivots formelprogram, hvor den skal gå hen for at få de datoer, den skal bruge.
Advarsel!: Hvis denne egenskab ikke er angivet, returnerer målinger, der bruger DAX-Time-Intelligence-funktioner, muligvis ikke de korrekte resultater.
Når du angiver egenskaben Datotabel, angiver du en datotabel og en datokolonne med datatypen Dato (datetime) i den.
Sådan angives egenskaben Datotabel
-
Vælg tabellen Kalender i PowerPivot-vinduet.
-
Klik på Markér som datotabel under fanen Design.
-
I dialogboksen Markér som datotabel skal du vælge en kolonne med entydige værdier og datatypen Dato.
Arbejde med tid
Alle datoværdier med datatypen Dato i Excel eller SQL Server er faktisk et tal. Inkluderet i dette tal er cifre, der refererer til et klokkeslæt. I mange tilfælde er tiden for hver række midnat. Hvis f.eks. et DateTimeKey-felt i en faktatabel salg har værdier som f.eks. 19-10-2010 12:00:00, betyder det, at værdierne svarer til præcisionsniveauet for dag. Hvis feltværdierne DateTimeKey indeholder et klokkeslæt, f.eks. 19-10-2010 8:44:00, betyder det, at værdierne er på præcisionsniveauet for minuttet. Værdier kan også være på præcisionsniveauet for timeniveau eller endda sekunders præcisionsniveau. Præcisionsniveauet i tidsværdien har stor indflydelse på, hvordan du opretter datotabellen og relationerne mellem den og faktatabellen.
Du skal afgøre, om du vil aggregere dine data til et præcisionsniveau for en dag eller til et præcisionsniveau på et tidspunkt. Det kan med andre ord være en god ide at bruge kolonner i datotabellen, f.eks. Morgen, Eftermiddag eller Time som datofelter for klokkeslæt i en pivottabels række-, kolonne- eller filterområder.
Bemærk!: Dage er den mindste tidsenhed, som DAX Time Intelligence-funktioner kan arbejde med. Hvis du ikke har brug for at arbejde med tidsværdier, skal du reducere præcisionen af dine data for at bruge dage som minimumenhed.
Hvis du vil aggregere dine data til tidsniveauet, skal datotabellen have en datokolonne med det inkluderede klokkeslæt. Faktisk skal den bruge en datokolonne med én række for hver time eller måske endda hvert minut af hver dag for hvert år i datointervallet. Dette skyldes, at hvis du vil oprette en relation mellem kolonnen DateTimeKey i faktatabellen og datokolonnen i datotabellen, skal du have matchende værdier. Som du kan forestille dig, hvis du medtager mange år, kan dette give en meget stor datotabel.
I de fleste tilfælde vil du dog kun aggregere dine data til dagen. Med andre ord skal du bruge kolonner som År, Måned, Uge eller Ugedag som felter i en pivottabels række-, kolonne- eller filterområder. I dette tilfælde skal datokolonnen i datotabellen kun indeholde én række for hver dag i et år, som vi har beskrevet tidligere.
Hvis datokolonnen indeholder et præcisionsniveau for klokkeslæt, men du kun aggregerer til et dagsniveau for at oprette relationen mellem faktatabellen og datotabellen, kan det være nødvendigt at ændre faktatabellen ved at oprette en ny kolonne, der afkorter værdierne i datokolonnen til en dagsværdi. Med andre ord skal du konvertere en værdi som f.eks. 19-10-2010 8:44:00til19-10-2010 12:00:00. Du kan derefter oprette relationen mellem denne nye kolonne og datokolonnen i datotabellen, fordi værdierne stemmer overens.
Lad os se på et eksempel. Dette billede viser en DateTimeKey-kolonne i faktatabellen Salg. Alle sammenlægninger for dataene i denne tabel skal kun være på dagsniveau ved hjælp af kolonner i tabellen Kalenderdato, f.eks. År, Måned, Kvartal osv. Det klokkeslæt, der medtages i værdien, er ikke relevant, kun den faktiske dato.
Da vi ikke behøver at analysere disse data til tidsniveauet, behøver vi ikke kolonnen Dato i tabellen Kalenderdato for at medtage én række for hver time og hvert minut hver dag i hvert år. Datokolonnen i vores datotabel ser således ud:
Hvis du vil oprette en relation mellem kolonnen DateTimeKey i tabellen Salg og kolonnen Dato i tabellen Kalender, kan vi oprette en ny beregnet kolonne i faktatabellen Salg og bruge funktionen AFKORT til at afkorte dato- og klokkeslætsværdien i kolonnen DateTimeKey til en datoværdi, der svarer til værdierne i kolonnen Dato i tabellen Kalender. Vores formel ser sådan ud:
=AFKORT([DateTimeKey],0)
Dette giver os en ny kolonne (vi har navngivet DateKey) med datoen fra kolonnen DateTimeKey og et klokkeslæt på 12:00:00 for hver række:
Nu kan vi oprette en relation mellem denne nye kolonne (DateKey) og kolonnen Dato i tabellen Kalender.
På samme måde kan vi oprette en beregnet kolonne i tabellen Salg, der reducerer tidspræcisionen i kolonnen DateTimeKey til præcisionsniveauet time. I dette tilfælde fungerer funktionen AFKORT ikke, men vi kan stadig bruge andre DAX-dato- og klokkeslætsfunktioner til at udtrække og sammenkæde en ny værdi til et timepræcisionsniveau. Vi kan bruge en formel som denne:
= DATO (YEAR([DateTimeKey]), MONTH([DateTimeKey]), DAY([DateTimeKey]) ) + TID (HOUR([DateTimeKey]), 0, 0)
Vores nye kolonne ser sådan ud:
Hvis kolonnen Dato i datotabellen har værdier, der er helt præcise på timeniveau, kan vi derefter oprette en relation mellem dem.
Gør datoer mere anvendelige
Mange af de datokolonner, du opretter i datotabellen, er nødvendige for andre felter, men er ikke så nyttige i analysen. F.eks. er feltet DateKey i tabellen Salg, som vi har refereret til og vist i hele denne artikel, vigtigt, fordi for hver transaktion registreres den pågældende transaktion som forekommende på en bestemt dato og et bestemt tidspunkt. Men set fra et analyse- og rapporteringsmæssigt synspunkt er det ikke så nyttigt, fordi vi ikke kan bruge det som en række, kolonne eller et filterfelt i en pivottabel eller rapport.
På samme måde er kolonnen Dato i tabellen Kalender i vores eksempel faktisk meget nyttig og kritisk, men du kan ikke bruge den som en dimension i en pivottabel.
For at holde tabeller og kolonner i dem så nyttige som muligt og for at gøre det nemmere at navigere i pivottabel- eller Power View-rapportfeltlister er det vigtigt at skjule unødvendige kolonner fra klientværktøjer. Det kan også være en god ide at skjule bestemte tabeller. Tabellen Helligdage, der vises tidligere, indeholder helligdage, der er vigtige for bestemte kolonner i tabellen Kalender, men du kan ikke bruge kolonnerne Dato og Ferie i selve tabellen Helligdage som felter i en pivottabel. Igen kan du skjule hele tabellen Helligdage for at gøre det nemmere at navigere i Feltlister.
Et andet vigtigt aspekt ved arbejdet med datoer er navngivningskonventioner. Du kan navngive tabeller og kolonner i Power Pivot, uanset hvad du ønsker. Men vær opmærksom på, især hvis du skal dele din projektmappe med andre brugere, en god navngivningskonvention gør det nemmere at identificere tabeller og datoer, ikke kun i feltlister, men også i Power Pivot og i DAX-formler.
Når du har en datotabel i datamodellen, kan du begynde at oprette målinger, der kan hjælpe dig med at få mest mulig ud af dine data. Nogle kan være så enkle som at summere salgstotaler for det aktuelle år, mens andre kan være mere komplekse, hvor du skal filtrere på et bestemt område med entydige datoer. Få mere at vide i Målinger i Power Pivot - og Time Intelligence-funktioner.
Appendiks
Konvertere tekstdatatypedatoer til en datodatatype
I nogle tilfælde kan en faktatabel med transaktionsdata indeholde datoer med tekstdatatype. Det betyder, at en dato, der vises som 12-12-201211:47:09, faktisk slet ikke er en dato eller i det mindste ikke den type dato, Som Power Pivot kan forstå. Det er virkelig bare tekst, der læser som en dato. Hvis du vil oprette en relation mellem en datokolonne i faktatabellen og en datokolonne i en datotabel, skal begge kolonner have datatypen Dato .
Når du forsøger at ændre datatypen for en kolonne med datoer, der er tekstdatatype, til en datodatatype, kan Power Pivot automatisk fortolke datoerne og konvertere dem til en datatype med en sand dato. Hvis Power Pivot ikke kan udføre en datatypekonvertering, får du en typeuoverensstemmelsesfejl.
Du kan dog stadig konvertere datoerne til datatypen Sand dato. Du kan oprette en ny beregnet kolonne og bruge en DAX-formel til at fortolke år, måned, dag, klokkeslæt osv. fra tekststrengene og derefter sammenkæde den igen på en måde, som Power Pivot kan læse som en sand dato.
I dette eksempel har vi importeret en faktatabel med navnet Salg i Power Pivot. Den indeholder en kolonne med navnet DateTime. Værdier ser sådan ud:
Hvis vi ser på Datatype i gruppen Formatering i Power Pivots hjem-fane, kan vi se, at det er datatypen Tekst.
Vi kan ikke oprette en relation mellem kolonnen DateTime og kolonnen Dato i vores datotabel, fordi datatyperne ikke stemmer overens. Hvis vi forsøger at ændre datatypen til Dato, får vi en typeuoverensstemmelsesfejl:
I dette tilfælde kunne Power Pivot ikke konvertere datatypen fra tekst til dato. Vi kan stadig bruge denne kolonne, men for at gøre den til en sand datodatatype, skal vi oprette en ny kolonne, der fortolker teksten og genopretter den til en værdi, som Power Pivot kan lave til datatypen Dato.
Husk, at fra afsnittet Arbejde med tid tidligere i denne artikel. medmindre det er nødvendigt, at din analyse er til et præcisionsniveau for en dag, skal du konvertere datoer i faktatabellen til et præcisionsniveau for dagen. Med det i baghovedet ønsker vi, at værdierne i vores nye kolonne skal være på dagsniveau med præcision (undtagen tid). Vi kan både konvertere værdierne i kolonnen DateTime til en datodatatype og fjerne præcisionsniveauet for klokkeslæt med følgende formel:
=DATO(VENSTRE([DateTime],4), MID([DateTime],6,2), MID([DateTime],9,2))
Dette giver os en ny kolonne (i dette tilfælde kaldet Dato). Power Pivot registrerer endda de værdier, der skal være datoer, og angiver automatisk datatypen til Dato.
Hvis vi vil bevare præcisionsniveauet for tid, udvider vi blot formlen til at omfatte timer, minutter og sekunder.
=DATE(LEFT([DateTime],4), MID([DateTime],6,2), MID([DateTime],9,2)) +
TID(MIDT([DateTime],12,2), MIDT([DateTime],15,2), MID([DateTime],18,2))
Nu hvor vi har en datokolonne af datatypen Dato, kan vi oprette en relation mellem den og en datokolonne i en dato.
Yderligere ressourcer
Hurtig start: Lær de grundlæggende DAX-funktioner på 30 minutter