Datotabeller i Power Pivot er avgjørende for å bla gjennom og beregne data over tid. Denne artikkelen gir en grundig forståelse av datotabeller og hvordan du kan opprette dem i Power Pivot. Denne artikkelen beskriver spesielt:
-
Hvorfor en datotabell er viktig for å bla gjennom og beregne data etter datoer og klokkeslett.
-
Slik bruker du Power Pivot til å legge til en datotabell i datamodellen.
-
Slik oppretter du nye datokolonner, for eksempel År, Måned og Periode i en datotabell.
-
Slik oppretter du relasjoner mellom datotabeller og faktatabeller.
-
Slik arbeider du med tiden.
Denne artikkelen er ment for brukere som ikke har brukt Power Pivot før. Det er imidlertid viktig å allerede ha en god forståelse av å importere data, opprette relasjoner og opprette beregnede kolonner og mål.
Denne artikkelen beskriver ikke hvordan du bruker DAX-Time-Intelligence funksjoner i målformler. Hvis du vil ha mer informasjon om hvordan du oppretter mål med DAX-funksjoner for tidsintelligens, kan du se Tidsintelligens i Power Pivot i Excel.
Obs!: Navnene «mål» og «beregnet felt» er synonymt i Power Pivot. Vi bruker navnemålingen i denne artikkelen. Hvis du vil ha mer informasjon, kan du se Mål i Power Pivot.
Innhold
Forstå datotabeller
Nesten all dataanalyse innebærer å bla gjennom og sammenligne data over datoer og klokkeslett. Du kan for eksempel summere salgsbeløpene for det siste regnskapskvartalet og deretter sammenligne disse totalene med andre kvartaler, eller du vil kanskje beregne sluttsaldoen for en måned for en konto. I hvert av disse tilfellene bruker du datoer som en metode for å gruppere og aggregere salgstransaksjoner eller saldoer for en bestemt tidsperiode.
Power View-rapport
En datotabell kan inneholde mange forskjellige representasjoner av datoer og klokkeslett. En datotabell vil for eksempel ofte ha kolonner som regnskapsår, måned, kvartal eller periode, som du kan velge som felt fra en feltliste ved oppdeling og filtrering av data i pivottabeller eller Power View-rapporter.
Power View-feltliste
For at datokolonner som År, Måned og Kvartal skal inkludere alle datoene innenfor sitt respektive område, må datotabellen ha minst én kolonne med et sammenhengende sett med datoer. Dette betyr at kolonnen må ha én rad for hver dag for hvert år inkludert i datotabellen.
Hvis for eksempel dataene du vil bla gjennom, har datoer fra 1. februar 2010 til og med 30. november 2012, og du rapporterer om et kalenderår, vil du ha en datotabell med minst et datointervall fra 1. januar 2010 til og med 31. desember 2012. Hvert år i datotabellen må inneholde alle dagene for hvert år. Hvis du oppdaterer dataene regelmessig med nyere data, kan det hende du vil kjøre sluttdatoen innen ett år eller to, slik at du ikke trenger å oppdatere datotabellen etter hvert som tiden går.
Datotabell med et sammenhengende sett med datoer
Hvis du rapporterer om et regnskapsår, kan du opprette en datotabell med et sammenhengende sett med datoer for hvert regnskapsår. Hvis for eksempel regnskapsåret begynner 1. mars, og du har data for regnskapsår 2010 frem til gjeldende dato (for eksempel i FY 2013), kan du opprette en datotabell som begynner 01.03.2009 og inkluderer minst hver dag i hvert regnskapsår frem til siste dato i regnskapsåret 2013.
Hvis du skal rapportere om både kalenderår og regnskapsår, trenger du ikke å opprette separate datotabeller. En enkelt datotabell kan inneholde kolonner for et kalenderår, regnskapsår og til og med en tretten fire ukers periodekalender. Det viktigste er at datotabellen inneholder et sammenhengende sett med datoer for alle år inkludert.
Legge til en datotabell i datamodellen
Det finnes flere måter du kan legge til en datotabell i datamodellen på:
-
Importer fra en relasjonsdatabase eller en annen datakilde.
-
Opprett en datotabell i Excel, og kopier eller koble til en ny tabell i Power Pivot.
-
Importer fra Microsoft Azure Marketplace.
La oss se nærmere på hver av disse.
Importer fra en relasjonsdatabase
Hvis du importerer noen eller alle dataene fra et datalager eller en annen type relasjonsdatabase, er det sannsynligvis allerede en datotabell og relasjoner mellom den og resten av dataene du importerer. Datoene og formatet vil sannsynligvis samsvare med datoene i faktadataene, og datoene begynner sannsynligvis godt i fortiden og går langt ut i fremtiden. Datotabellen du vil importere, kan være svært stor og inneholde et område med datoer utover det du må ta med i datamodellen. Du kan bruke power pivots tabellimportveiviserens avanserte filterfunksjoner til å velge bare datoene og de bestemte kolonnene du virkelig trenger. Dette kan redusere størrelsen på arbeidsboken betydelig og forbedre ytelsen.
Veiviser for tabellimport
I de fleste tilfeller trenger du ikke å opprette flere kolonner som regnskapsår, uke, månedsnavn osv. fordi de allerede finnes i den importerte tabellen. Men i noen tilfeller, etter at du har importert datotabellen til datamodellen, må du kanskje opprette flere datokolonner, avhengig av et bestemt rapporteringsbehov. Heldigvis er dette enkelt å gjøre ved hjelp av DAX. Du vil lære mer om hvordan du oppretter datotabellfelt senere. Alle miljøer er forskjellige. Hvis du er usikker på om datakildene har en relatert dato eller kalendertabell, kan du snakke med databaseadministratoren.
Opprette en datotabell i Excel
Du kan opprette en datotabell i Excel og deretter kopiere den til en ny tabell i datamodellen. Dette er ganske enkelt å gjøre, og det gir deg mye fleksibilitet.
Når du oppretter en datotabell i Excel, begynner du med én kolonne med et sammenhengende datoområde. Du kan deretter opprette flere kolonner som år, kvartal, måned, regnskapsår, periode osv. i Excel-regnearket ved hjelp av Excel-formler, eller, etter at du har kopiert tabellen til datamodellen, kan du opprette dem som beregnede kolonner. Oppretting av flere datokolonner i Power Pivot er beskrevet i delen Legg til nye datokolonner i datotabellen senere i denne artikkelen.
Slik oppretter du en datotabell i Excel og kopierer den til datamodellen
-
Skriv inn et kolonneoverskriftsnavn i celle A1 i et tomt regneark i Excel for å identifisere et datoområde. Vanligvis vil dette værenoe sånt som Date, DateTime eller DateKey.
-
Skriv inn en startdato i celle A2. For eksempel 01.01.2010.
-
Klikk fyllhåndtaket, og dra det ned til et radnummer som inneholder en sluttdato. Eksempel: 31.12.2016.
-
Merk alle radene i Dato-kolonnen (inkludert topptekstnavnet i celle A1).
-
Klikk Formater som tabell i Stiler-gruppen, og velg deretter en stil.
-
Klikk OK i dialogboksen Formater som tabell.
-
Kopier alle rader, inkludert toppteksten.
-
Klikk Lim inn på Hjem-fanen i Power Pivot.
-
Skriv inn et navn, for eksempel Dato eller Kalender, i Forhåndsvisning av innliming >. La Bruk første rad som kolonneoverskriftervære merket av, og klikk deretter OK.
Den nye datotabellen (kalt Kalender i dette eksemplet) i Power Pivot ser slik ut:
Obs!: Du kan også opprette en koblet tabell ved hjelp av Legg til i datamodell. Dette gjør imidlertid arbeidsboken unødvendig stor fordi arbeidsboken har to versjoner av datotabellen. én i Excel og én i Power Pivot..
Obs!: Navnedatoen er et nøkkelord i Power Pivot. Hvis du gir navn til tabellen du oppretter i Power Pivot-dato, må du omslutte tabellnavnet med enkle anførselstegn i alle DAX-formler som refererer til den i et argument. Alle eksemplene på bilder og formler i denne artikkelen refererer til en datotabell som er opprettet i Power Pivot kalt Kalender.
Du har nå en datotabell i datamodellen. Du kan legge til nye datokolonner som år, måned osv. ved hjelp av DAX.
Legge til nye datokolonner i datotabellen
En datotabell med én enkelt datokolonne som har én rad for hver dag for hvert år, er viktig for å definere alle datoene i et datoområde. Det er også nødvendig å opprette en relasjon mellom faktatabellen og datotabellen. Men den ene datokolonnen med én rad for hver dag er ikke nyttig når du analyserer etter datoer i en pivottabell eller Power View-rapport. Du vil at datotabellen skal inkludere kolonner som hjelper deg med å aggregere dataene for et område eller en gruppe med datoer. Du kan for eksempel summere salgsbeløp etter måned eller kvartal, eller du kan opprette et mål som beregner vekst fra år til år. I hvert av disse tilfellene trenger datotabellen års-, måned- eller kvartalskolonner som lar deg aggregere dataene for denne perioden.
Hvis du importerte datotabellen fra en relasjonsdatakilde, kan den allerede inneholde de ulike typene datokolonner du vil bruke. I noen tilfeller vil du kanskje endre noen av disse kolonnene eller opprette flere datokolonner. Dette gjelder spesielt hvis du oppretter din egen datotabell i Excel og kopierer den til datamodellen. Heldigvis er det ganske enkelt å opprette nye datokolonner i Power Pivot med dato- og klokkeslettfunksjoner i DAX.
Tips!: Hvis du ennå ikke har jobbet med DAX, er et flott sted å begynne å lære med Hurtigstart: Lær det grunnleggende om DAX på 30 minutter på Office.com.
DAX-dato- og klokkeslettfunksjoner
Hvis du noen gang har arbeidet med dato- og klokkeslettfunksjoner i Excel-formler, vil du sannsynligvis bli kjent med dato- og klokkeslettfunksjonene. Selv om disse funksjonene ligner på kolleger i Excel, finnes det noen viktige forskjeller:
-
DAX-dato- og klokkeslettfunksjoner bruker en datetime-datatype.
-
De kan ta verdier fra en kolonne som et argument.
-
De kan brukes til å returnere og/eller manipulere datoverdier.
Disse funksjonene brukes ofte når du oppretter egendefinerte datokolonner i en datotabell, så de er viktige å forstå. Vi bruker en rekke av disse funksjonene til å opprette kolonner for år, kvartal, regnskapsmåned og så videre.
Obs!: Dato- og klokkeslettfunksjoner i DAX er ikke de samme som tidsintelligensfunksjoner. Lær mer om tidsintelligens i Power Pivot i Excel.
DAX inkluderer følgende dato- og klokkeslettfunksjoner:
Det finnes mange andre DAX-funksjoner du også kan bruke i formlene. Mange av formlene som er beskrevet her, bruker for eksempel matematiske og trigonometriske funksjoner som MOD og TRUNC, logiske funksjoner som HVIS og tekstfunksjoner som FORMAT Hvis du vil ha mer informasjon om andre DAX-funksjoner, kan du se delen Flere ressurser senere i denne artikkelen.
Formeleksempler for et kalenderår
Eksemplene nedenfor beskriver formler som brukes til å opprette flere kolonner i en datotabell kalt Kalender. Én kolonne, kalt Dato, finnes allerede og inneholder et sammenhengende datoområde fra 01.01.2010 til 31.12.2016.
År
=ÅR([dato])
I denne formelen returnerer ÅR-funksjonen året fra verdien i Dato-kolonnen. Fordi verdien i Dato-kolonnen er av datatypen datetime, vet ÅR-funksjonen hvordan årstallet skal returneres fra den.
Måned
=MÅNED([dato])
I denne formelen, i likhet med ÅR-funksjonen, kan vi ganske enkelt bruke MÅNED-funksjonen til å returnere en månedsverdi fra Dato-kolonnen.
Kvartal
=INT(([Måned]+2)/3)
I denne formelen bruker vi HELTALL-funksjonen til å returnere en datoverdi som et heltall. Argumentet vi angir for HELTALL-funksjonen, er verdien fra Måned-kolonnen, legg til 2 og del det med 3 for å få kvartalet vårt, 1 til 4.
Månedsnavn
=FORMAT([date],"mmmm")
I denne formelen bruker vi FORMAT-funksjonen til å konvertere en numerisk verdi fra Dato-kolonnen til tekst for å få månedsnavnet. Vi angir Dato-kolonnen som det første argumentet, og deretter formatet. vi vil at månedsnavnet skal vise alle tegnene, så vi bruker «mmmm». Resultatet vårt ser slik ut:
Hvis vi vil returnere månedsnavnet forkortet til tre bokstaver, bruker vi «mmm» i formatargumentet.
Dag i uke
=FORMAT([dato],"ddd")
I denne formelen bruker vi FORMAT-funksjonen til å hente dagnavnet. Fordi vi bare vil ha et forkortet dagnavn, angir vi «ddd» i formatargumentet.
Eksempel på pivottabell
Når du har felt for datoer som år, kvartal, måned osv., kan du bruke dem i en pivottabell eller rapport. Bildet nedenfor viser for eksempel SalesAmount-feltet fra faktatabellen Salg i VALUES, og Year and Quarter fra dimensjonstabellen Kalender i RADER. SalesAmount aggregeres for kontekst for år og kvartal.
Formeleksempler for et regnskapsår
Regnskapsår
=HVIS([Måned]<= 6,[År],[År]+1)
I dette eksemplet begynner regnskapsåret 1. juli.
Det finnes ingen funksjon som kan trekke ut et regnskapsår fra en datoverdi fordi start- og sluttdatoene for et regnskapsår ofte er forskjellige fra de i et kalenderår. For å få regnskapsåret bruker vi først en HVIS-funksjon til å teste om verdien for måned er mindre enn eller lik 6. Hvis verdien for Måned er mindre enn eller lik 6 i det andre argumentet, returnerer du verdien fra År-kolonnen. Hvis ikke, returnerer du verdien fra År og legger til 1.
En annen måte å angi en verdi for sluttmåned for regnskapsår på, er å opprette et mål som bare angir måneden. Eksempel: FYE:=6. Deretter kan du referere til målnavnet i stedet for månedsnummeret. Eksempel: =HVIS([Måned]<=[FYE],[År],[År]+1). Dette gir mer fleksibilitet når du refererer til sluttmåneden for regnskapsåret i flere forskjellige formler.
Regnskapsmåned
=HVIS([Måned]<= 6, 6+[Måned], [Måned]- 6)
I denne formelen angir vi om verdien for [Måned] er mindre enn eller lik 6, deretter tar vi 6 og legger til verdien fra måned, ellers trekker vi 6 fra verdien fra [Måned].
Regnskapskvartal
=INT(([FiscalMonth]+2)/3)
Formelen vi bruker for FiscalQuarter er omtrent den samme som for Kvartal i kalenderåret vårt. Den eneste forskjellen er at vi angir [FiscalMonth] i stedet for [Month].
Helligdager eller spesielle datoer
Du vil kanskje inkludere en datokolonne som angir at bestemte datoer er helligdager eller en annen spesiell dato. Du kan for eksempel summere totalsummene for nye år ved å legge til et feriefelt i en pivottabell, som en slicer eller et filter. I andre tilfeller vil du kanskje utelate disse datoene fra andre datokolonner eller i et mål.
Å inkludere helligdager eller spesielle dager er ganske enkelt. Du kan opprette en tabell i Excel som har datoene du vil inkludere. Deretter kan du kopiere eller bruke Legg til i datamodell for å legge den til i datamodellen som en koblet tabell. I de fleste tilfeller er det ikke nødvendig å opprette en relasjon mellom tabellen og kalendertabellen. Alle formler som refererer til den, kan bruke LOOKUPVALUE-funksjonen til å returnere verdier.
Nedenfor finner du et eksempel på en tabell som er opprettet i Excel, som inneholder helligdager som skal legges til i datotabellen:
Dato |
Helligdag |
---|---|
1/1/2010 |
Nyttår |
11/25/2010 |
Thanksgiving |
12/25/2010 |
Jul |
01.01.2011 |
Nyttår |
11/24/2011 |
Thanksgiving |
12/25/2011 |
Jul |
01.01.2012 |
Nyttår |
22.11.2012 |
Thanksgiving |
12/25/2012 |
Jul |
1/1/2013 |
Nyttår |
11/28/2013 |
Thanksgiving |
12/25/2013 |
Jul |
11/27/2014 |
Thanksgiving |
12/25/2014 |
Jul |
01.01.2014 |
Nyttår |
11/27/2014 |
Thanksgiving |
12/25/2014 |
Jul |
1/1/2015 |
Nyttår |
11/26/2014 |
Thanksgiving |
12/25/2015 |
Jul |
01.01.2016 |
Nyttår |
11/24/2016 |
Thanksgiving |
12/25/2016 |
Jul |
I datotabellen oppretter vi en kolonne kalt Ferie og bruker en formel som dette:
=LOOKUPVALUE(Holidays[Holiday],Holidays[date],Calendar[date])
La oss se nærmere på denne formelen.
Vi bruker LOOKUPVALUE-funksjonen til å hente verdier fra feriekolonnen i Helligdager-tabellen. I det første argumentet angir vi kolonnen der resultatverdien skal være. Vi angir feriekolonnen i Helligdager-tabellen fordi det er verdien vi vil returnere.
=LOOKUPVALUE(Holidays[Holiday],Holidays[date],Calendar[date])
Vi angir deretter det andre argumentet, søkekolonnen som har datoene vi vil søke etter. Vi angir Dato-kolonnen i Helligdager-tabellen , slik:
=LOOKUPVALUE(Holidays[Holiday],Holidays[date],Calendar[date])
Til slutt angir vi kolonnen i kalendertabellen som har datoene vi vil søke etter i ferietabellen . Dette er selvfølgelig Dato-kolonnen i Kalender-tabellen .
=LOOKUPVALUE(Holidays[Holiday],Holidays[date],Calendar[date])
Feriekolonnen returnerer ferienavnet for hver rad som har en datoverdi som samsvarer med en dato i Helligdager-tabellen.
Egendefinert kalender – tretten fire ukers perioder
Noen organisasjoner, for eksempel detaljhandel eller matservice, rapporterer ofte om ulike perioder, for eksempel tretten fire ukers perioder. Med en tretten fire ukers periodekalender er hver periode 28 dager. hver periode inneholder derfor fire mandager, fire tirsdager, fire onsdager og så videre. Hver periode inneholder samme antall dager, og vanligvis vil helligdager falle innenfor samme periode hvert år. Du kan velge å starte en periode på hvilken som helst dag i uken. Akkurat som med datoer i en kalender eller et regnskapsår, kan du bruke DAX til å opprette flere kolonner med egendefinerte datoer.
I eksemplene nedenfor starter den første hele perioden den første søndagen i regnskapsåret. I dette tilfellet begynner regnskapsåret 01.07.
Uke
Denne verdien gir oss ukenummeret som starter med den første hele uken i regnskapsåret. I dette eksemplet begynner den første hele uken på søndag, så den første hele uken i det første regnskapsåret i kalendertabellen begynner faktisk 04.07.2010 og fortsetter til den siste hele uken i kalendertabellen. Selv om denne verdien ikke er så nyttig i analysen, er det nødvendig å beregne for bruk i andre formler for 28 dager.
=HELTALL([dato]-40356)/7)
La oss se nærmere på denne formelen.
Først oppretter vi en formel som returnerer verdier fra Dato-kolonnen som et heltall, slik:
=HELTALL([dato])
Vi ønsker deretter å se etter den første søndagen i det første regnskapsåret. Vi ser at det er 04.07.2010.
Trekk fra 40356 (som er heltallet for 27.06.2010, den siste søndagen fra forrige regnskapsår) fra denne verdien for å få antall dager siden starten av dagene i kalendertabellen, slik som dette:
=INT([date]-40356)
Del deretter resultatet med 7 (dager i en uke), slik som dette:
=HELTALL(([dato]-40356)/7)
Resultatet ser slik ut:
Punktum
Perioden i denne egendefinerte kalenderen inneholder 28 dager, og den vil alltid begynne på en søndag. Denne kolonnen returnerer nummeret på perioden som begynner med den første søndagen i det første regnskapsåret.
=INT(([Uke]+3)/4)
La oss se nærmere på denne formelen.
Først oppretter vi en formel som returnerer en verdi fra Uke-kolonnen som et heltall, slik:
=INT([Uke])
Legg deretter til 3 til denne verdien, slik som dette:
=INT([Uke]+3)
Del deretter resultatet med 4, slik som dette:
=INT(([Uke]+3)/4)
Resultatet ser slik ut:
Periodens regnskapsår
Denne verdien returnerer regnskapsåret for en periode.
=INT(([Periode]+12)/13)+2008
La oss se nærmere på denne formelen.
Først oppretter vi en formel som returnerer en verdi fra periode og legger til 12:
= ([Periode]+12)
Vi deler resultatet med 13, fordi det er tretten 28 dagers perioder i regnskapsåret:
=(([Periode]+12)/13)
Vi legger til 2010, fordi det er det første året i tabellen:
=(([Periode]+12)/13)+2010
Til slutt bruker vi HELTALL-funksjonen til å fjerne en brøkdel av resultatet, og returnerer et heltall, når dividert med 13, slik:
=INT(([Periode]+12)/13)+2010
Resultatet ser slik ut:
Periode i regnskapsår
Denne verdien returnerer periodenummeret, 1–13, og starter med den første hele perioden (fra og med søndag) i hvert regnskapsår.
=HVIS(REST([Periode],13), REST([Periode],13),13)
Denne formelen er litt mer kompleks, så vi vil beskrive den først på et språk vi forstår bedre. Denne formelen sier at du deler verdien fra [Periode] med 13 for å få et periodenummer (1-13) i året. Hvis dette tallet er 0, returnerer du 13.
Først oppretter vi en formel som returnerer resten av verdien fra periode med 13. Vi kan bruke MOD (matematiske og trigonometriske funksjoner) som dette:
=REST([Periode],13)
Dette gir oss for det meste resultatet vi ønsker, bortsett fra der verdien for periode er 0 fordi disse datoene ikke faller innenfor det første regnskapsåret, for eksempel i de fem første dagene i vår eksempeltabell for kalenderdato. Vi kan ta oss av dette med en HVIS-funksjon. I tilfelle resultatet er 0, returnerer vi 13, slik:
=HVIS(REST([Periode],13),REST([Periode],13),13)
Resultatet ser slik ut:
Eksempel på pivottabell
Bildet nedenfor viser en pivottabell med SalesAmount-feltet fra faktatabellen Salg i VALUES, og Feltene PeriodFiscalYear og PeriodInFiscalYear fra datodimensjonstabellen for kalender i RADER. SalesAmount aggregeres for konteksten etter regnskapsår og 28-dagers periode i regnskapsåret.
Relasjoner
Når du har opprettet en datotabell i datamodellen, begynner du å bla gjennom dataene i pivottabeller og rapporter, og for å aggregere data basert på kolonnene i datodimensjonstabellen, må du opprette en relasjon mellom faktatabellen med transaksjonsdataene og datotabellen.
Fordi du må opprette en relasjon basert på datoer, må du sørge for at du oppretter relasjonen mellom kolonner med verdier som er av datatypen datetime (Date).
For hver datoverdi i faktatabellen må den relaterte oppslagskolonnen i datotabellen inneholde samsvarende verdier. En rad (transaksjonspost) i faktatabellen Salg med verdien 15.08.2012 12:00 i DateKey-kolonnen må for eksempel ha en tilsvarende verdi i den relaterte Dato-kolonnen i datotabellen (kalt Kalender). Dette er en av de viktigste grunnene til at du vil at datokolonnen i datotabellen skal inneholde et sammenhengende datoområde som inneholder en eventuell dato i faktatabellen.
Obs!: Selv om datokolonnen i hver tabell må være av samme datatype (dato), spiller ikke formatet for hver kolonne noen rolle..
Obs!: Hvis Power Pivot ikke lar deg opprette relasjoner mellom de to tabellene, kan det hende at datofeltene ikke lagrer dato og klokkeslett til samme presisjonsnivå. Verdiene kan se like ut, men lagres på en annen måte, avhengig av kolonneformateringen. Les mer om hvordan du arbeider med tiden.
Obs!: Unngå å bruke surrogatnøkler for heltall i relasjoner. Når du importerer data fra en relasjonsdatakilde, representeres ofte dato- og klokkeslettkolonner av en surrogatnøkkel, som er en heltallskolonne som brukes til å representere en unik dato. I Power Pivot bør du unngå å opprette relasjoner ved hjelp av dato/klokkeslett-taster for heltall, og i stedet bruke kolonner som inneholder unike verdier med en datatype for dato. Selv om bruken av surrogatnøkler regnes som en anbefalt fremgangsmåte i tradisjonelle datalagre, er ikke heltallsnøklene nødvendige i Power Pivot, og det kan gjøre det vanskelig å gruppere verdier i pivottabeller etter ulike datoperioder.
Hvis du får en typekonfliktsfeil når du prøver å opprette en relasjon, er det sannsynligvis fordi kolonnen i faktatabellen ikke er av datatypen Dato. Dette kan skje når Power Pivot ikke automatisk kan konvertere en ikke-dato (vanligvis en tekstdatatype) til en datodatatype. Du kan fortsatt bruke kolonnen i faktatabellen, men du må konvertere dataene med en DAX-formel i en ny beregnet kolonne. Se Konvertere datatypedatoer for tekst til en datodatatype senere i tillegget.
Flere relasjoner
I noen tilfeller kan det være nødvendig å opprette flere relasjoner eller opprette flere datotabeller. Hvis det for eksempel er flere datofelt i faktatabellen Salg, for eksempel DateKey, ShipDate og ReturnDate, kan de alle ha relasjoner til Dato-feltet i kalenderdatotabellen, men bare én av disse kan være en aktiv relasjon. I dette tilfellet, fordi DateKey representerer datoen for transaksjonen, og derfor den viktigste datoen, vil dette best fungere som den aktive relasjonen. De andre har inaktive relasjoner.
Følgende pivottabell beregner totalt salg etter regnskapsår og regnskapskvartal. Et mål kalt Totalt salg, med formelen Totalt salg:=SUMMER([SalesAmount]), plasseres i VALUES, og feltene FiscalYear og FiscalQuarter fra kalenderdatotabellen plasseres i RADER.
Denne direkte pivottabellen fungerer på riktig måte fordi vi ønsker å summere det totale salget etter transaksjonsdatoeni DateKey. Målet vårt for totalt salg bruker datoene i DateKey og summeres etter regnskapsår og regnskapskvartal fordi det er en relasjon mellom DateKey i Salg-tabellen og Dato-kolonnen i kalenderdatotabellen.
Inaktive relasjoner
Men hva om vi ønsket å summere det totale salget ikke etter transaksjonsdato, men etter forsendelsesdato? Vi trenger en relasjon mellom ShipDate-kolonnen i Salg-tabellen og Dato-kolonnen i Kalender-tabellen. Hvis vi ikke oppretter denne relasjonen, er aggregasjonene våre alltid basert på transaksjonsdatoen. Vi kan imidlertid ha flere relasjoner, selv om bare én kan være aktiv, og fordi transaksjonsdato er den viktigste, får den den aktive relasjonen med kalendertabellen.
I dette tilfellet har ShipDate en inaktiv relasjon, så alle målformler som er opprettet for å aggregere data basert på forsendelsesdatoer, må angi den inaktive relasjonen ved hjelp av USERELATIONSHIP-funksjonen .
Fordi det for eksempel er en inaktiv relasjon mellom ShipDate-kolonnen i Salg-tabellen og Dato-kolonnen i Kalender-tabellen, kan vi opprette et mål som summerer totalt salg etter forsendelsesdato. Vi bruker en formel som dette til å angi relasjonen som skal brukes:
Totalt salg etter forsendelsesdato:=CALCULATE(SUM(Sales[SalesAmount]), USERELATIONSHIP(Sales[ShipDate], Calendar[Date]))
Denne formelen sier ganske enkelt: Beregne en sum for SalesAmount, men filtrer ved hjelp av relasjonen mellom ShipDate-kolonnen i Salg-tabellen og Dato-kolonnen i Kalender-tabellen.
Hvis vi nå oppretter en pivottabell og setter mål for totalt salg etter forsendelsesdato i VALUES, og regnskapsår og regnskapskvartal på RADER, ser vi den samme totalsummen, men alle andre sumbeløp for regnskapsåret og regnskapskvartalet er forskjellige fordi de er basert på forsendelsesdatoen og ikke transaksjonsdatoen.
Hvis du bruker inaktive relasjoner, kan du bruke bare én datotabell, men det krever at noen mål (for eksempel Totalt salg etter forsendelsesdato) refererer til den inaktive relasjonen i formelen. Det finnes et annet alternativ, det vil eksempelvis bruke flere datotabeller.
Flere datotabeller
En annen måte å arbeide med flere datokolonner i faktatabellen på, er å opprette flere datotabeller og opprette separate aktive relasjoner mellom dem. La oss se på salgstabelleksemplet på nytt. Vi har tre kolonner med datoer vi kanskje vil aggregere data på:
-
En DateKey med salgsdatoen for hver transaksjon.
-
En Forsendelsesdato – med datoen og klokkeslettet da solgte varer ble sendt til kunden.
-
En Returdato – med datoen og klokkeslettet da ett eller flere elementer som ble returnert, ble mottatt.
Husk at DateKey-feltet med transaksjonsdatoen er viktigst. Vi vil gjøre de fleste av aggregasjonene våre basert på disse datoene, så vi vil absolutt ønske en relasjon mellom den og Dato-kolonnen i Kalender-tabellen. Hvis vi ikke vil opprette inaktive relasjoner mellom Forsendelsesdato og Returdato og Dato-feltet i Kalender-tabellen, og dermed kreve spesielle målformler, kan vi opprette flere datotabeller for forsendelsesdato og returdato. Vi kan deretter opprette aktive relasjoner mellom dem.
I dette eksemplet har vi opprettet en annen datotabell med navnet ShipCalendar. Dette betyr selvfølgelig også å opprette flere datokolonner, og fordi disse datokolonnene er i en annen datotabell, ønsker vi å gi dem navn på en måte som skiller dem fra de samme kolonnene i kalendertabellen. Vi har for eksempel opprettet kolonner kalt ShipYear, ShipMonth, ShipQuarter og så videre.
Hvis vi oppretter pivottabellen og setter målet for totalt salg i VALUES, og ShipFiscalYear og ShipFiscalQuarter på ROWS, ser vi de samme resultatene som vi så da vi opprettet en inaktiv relasjon og et spesielt beregnet felt for totalt salg etter forsendelsesdato.
Hver av disse fremgangsmåtene krever nøye vurdering. Når du bruker flere relasjoner med én enkelt datotabell, må du kanskje opprette spesielle mål som sender inaktive relasjoner ved hjelp av USERELATIONSHIP-funksjonen. På den annen side kan det være forvirrende å opprette flere datotabeller i en feltliste, og fordi du har flere tabeller i datamodellen, krever det mer minne. Eksperimenter med det som fungerer best for deg.
Datotabellegenskap
Egenskapen Date Table angir metadata som er nødvendige for Time-Intelligence funksjoner som TOTALYTD, PREVIOUSMONTH og DATESBETWEEN for å fungere riktig. Når en beregning kjøres ved hjelp av en av disse funksjonene, vet Power Pivots formelmotor hvor du skal gå for å få datoene den trenger.
Advarsel!: Hvis denne egenskapen ikke er angitt, kan det hende at målinger som bruker DAX-Time-Intelligence-funksjoner, ikke returnerer riktige resultater.
Når du angir egenskapen Datotabell, angir du en datotabell og en datokolonne for datatypen Dato (datetime) i den.
Fremgangsmåte: Angi egenskapen Datotabell
-
Velg Kalender-tabellen i PowerPivot-vinduet.
-
Klikk Merk som datotabell på Utforming-fanen.
-
Velg en kolonne med unike verdier og datatypen Dato i dialogboksen Merk som datotabell.
Arbeide med tiden
Alle datoverdier med datatypen Dato i Excel eller SQL Server er faktisk et tall. Inkludert i dette tallet er sifre som refererer til et klokkeslett. I mange tilfeller er den tiden for hver rad midnatt. Hvis for eksempel et DateTimeKey-felt i en faktatabell for salg har verdier som 19.10.2010 12:00:00, betyr dette at verdiene er på dagnivå for presisjon. Hvis DateTimeKey-feltverdiene har et klokkeslett inkludert, for eksempel 19.10.2010 08:44:00, betyr dette at verdiene er til minuttnivået for presisjon. Verdier kan også være til timenivåpresisjonen, eller til og med sekunders presisjonsnivå. Presisjonsnivået i tidsverdien vil ha en betydelig innvirkning på hvordan du oppretter datotabellen og relasjonene mellom den og faktatabellen.
Du må finne ut om du vil aggregere dataene til et dagsnivå av presisjon eller til et tidsnivå av presisjon. Det kan med andre ord være lurt å bruke kolonner i datotabellen, for eksempel morgen- eller ettermiddags- eller timefelt som datofelt for klokkeslett i rad-, kolonne- eller filterområdene i en pivottabell.
Obs!: Dager er den minste tidsenheten dax tidsintelligensfunksjoner kan arbeide med. Hvis du ikke trenger å arbeide med tidsverdier, bør du redusere presisjonen av dataene for å bruke dager som minimumsenhet.
Hvis du har tenkt å aggregere dataene til tidsnivået, trenger datotabellen en datokolonne med klokkeslettet inkludert. Faktisk trenger den en datokolonne med én rad for hver time, eller kanskje til og med hvert minutt, hver dag, for hvert år i datoområdet. Dette er fordi du må ha samsvarende verdier for å opprette en relasjon mellom DateTimeKey-kolonnen i faktatabellen og datokolonnen i datotabellen. Som du kan forestille deg, hvis du inkluderer mange år, kan dette gjøre for en veldig stor dato tabell.
I de fleste tilfeller vil du imidlertid bare aggregere dataene til dagen. Med andre ord skal du bruke kolonner som år, måned, uke eller ukedag som felt i rad-, kolonne- eller filterområdene i en pivottabell. I dette tilfellet trenger datokolonnen i datotabellen bare inneholde én rad for hver dag i et år, som vi beskrev tidligere.
Hvis datokolonnen inneholder et tidsnivå av presisjon, men du aggregerer bare til et dagsnivå, for å opprette relasjonen mellom faktatabellen og datotabellen, må du kanskje endre faktatabellen ved å opprette en ny kolonne som avkorter verdiene i datokolonnen til en dagverdi. Konverter med andre ord en verdi som 19.10.2010 08:44:00til19.10.2010 12:00:00. Deretter kan du opprette relasjonen mellom denne nye kolonnen og datokolonnen i datotabellen fordi verdiene samsvarer.
La oss se på et eksempel. Dette bildet viser en DateTimeKey-kolonne i faktatabellen Salg. Alle aggregasjonene for dataene i denne tabellen trenger bare å være på dagsnivå, ved å bruke kolonner i kalenderdatotabellen, for eksempel år, måned, kvartal osv. Klokkeslettet som er inkludert i verdien, er ikke relevant, bare den faktiske datoen.
Fordi vi ikke trenger å analysere disse dataene til tidsnivået, trenger vi ikke Dato-kolonnen i kalenderdatotabellen for å inkludere én rad for hver time og hvert minutt av hver dag i hvert år. Datokolonnen i datotabellen ser slik ut:
Hvis du vil opprette en relasjon mellom DateTimeKey-kolonnen i Salg-tabellen og Dato-kolonnen i Kalender-tabellen, kan vi opprette en ny beregnet kolonne i faktatabellen Salg og bruke TRUNC-funksjonen til å avkorte dato- og klokkeslettverdien i DateTimeKey-kolonnen til en datoverdi som samsvarer med verdiene i Dato-kolonnen i Kalender-tabellen. Formelen vår ser slik ut:
=TRUNC([DateTimeKey],0)
Dette gir oss en ny kolonne (vi heter DateKey) med datoen fra DateTimeKey-kolonnen og et klokkeslett på 12:00:00 for hver rad:
Nå kan vi opprette en relasjon mellom denne nye (DateKey)-kolonnen og Dato-kolonnen i Kalender-tabellen.
På samme måte kan vi opprette en beregnet kolonne i Salg-tabellen som reduserer tidspresisjonen i DateTimeKey-kolonnen til timenivået for presisjon. I dette tilfellet vil ikke TRUNC-funksjonen fungere, men vi kan fortsatt bruke andre DAX-dato- og klokkeslettfunksjoner til å trekke ut og kjede sammen en ny verdi til et timenivå med presisjon. Vi kan bruke en formel som dette:
= DATE (YEAR([DateTimeKey]), MONTH([DateTimeKey]), DAY([DateTimeKey]) ) + TIME (HOUR([DateTimeKey]), 0, 0)
Den nye kolonnen vår ser slik ut:
Forutsatt at Dato-kolonnen i datotabellen har verdier til timenivået for presisjon, kan vi deretter opprette en relasjon mellom dem.
Gjøre datoer mer brukervennlige
Mange av datokolonnene du oppretter i datotabellen, er nødvendige for andre felt, men er egentlig ikke så nyttige i analysen. DateKey-feltet i Salg-tabellen vi har referert til og vist i denne artikkelen, er for eksempel viktig fordi for hver transaksjon registreres transaksjonen som skjer på en bestemt dato og klokkeslett. Men fra et analyse- og rapporteringssynspunkt er det ikke så nyttig fordi vi ikke kan bruke det som et rad-, kolonne- eller filterfelt i en pivottabell eller rapport.
I vårt eksempel er Dato-kolonnen i kalendertabellen svært nyttig, faktisk kritisk, men du kan ikke bruke den som en dimensjon i en pivottabell.
Hvis du vil holde tabeller og kolonner i dem så nyttige som mulig, og for å gjøre det enklere å navigere i feltlister for pivottabeller eller Power View-rapporter, er det viktig å skjule unødvendige kolonner fra klientverktøy. Det kan også hende du vil skjule bestemte tabeller. Helligdager-tabellen som vises tidligere, inneholder helligdagsdatoer som er viktige for bestemte kolonner i kalendertabellen, men du kan ikke bruke kolonnene Dato og Helligdager i selve helligdagstabellen som felt i en pivottabell. Hvis du vil gjøre det enklere å navigere i feltlister, kan du skjule hele helligdagstabellen.
Et annet viktig aspekt ved å arbeide med datoer er navnekonvensjoner. Du kan gi navn til tabeller og kolonner i Power Pivot, uansett hva du vil. Men husk, spesielt hvis du skal dele arbeidsboken med andre brukere, gjør en god navnekonvensjon det enklere å identifisere tabeller og datoer, ikke bare i feltlister, men også i Power Pivot og i DAX-formler.
Når du har en datotabell i datamodellen, kan du begynne å opprette mål som hjelper deg med å få mest mulig ut av dataene. Noen kan være så enkle som å summere salgssummer for gjeldende år, og andre kan være mer komplekse, der du må filtrere etter et bestemt område med unike datoer. Finn ut mer i mål i Power Pivot - og Tidsintelligens-funksjoner.
Vedlegg
Konvertere tekstdatatypedatoer til en datatype for dato
I noen tilfeller kan en faktatabell med transaksjonsdata inneholde datoer for tekstdatatypen. Det vil se ut som en dato som vises som 2012-12-04T11:47:09 er faktisk ikke en dato i det hele tatt, eller i det minste ikke typen dato Power Pivot kan forstå. Det er egentlig bare tekst som leser som en dato. Hvis du vil opprette en relasjon mellom en datokolonne i faktatabellen og en datokolonne i en datotabell, må begge kolonnene være av datatypen Dato .
Vanligvis, når du prøver å endre datatypen for en kolonne med datoer som er tekstdatatype til en datodatatype, kan Power Pivot tolke datoene og konvertere den til en sann datodatatype automatisk. Hvis Power Pivot ikke kan utføre en datatypekonvertering, får du en typekonfliktsfeil.
Du kan imidlertid likevel konvertere datoene til en sann datodatatype. Du kan opprette en ny beregnet kolonne og bruke en DAX-formel til å analysere år, måned, dag, klokkeslett osv. fra tekststrengene og deretter sette den sammen igjen på en måte Som Power Pivot kan lese som en sann dato.
I dette eksemplet har vi importert en faktatabell kalt Salg til Power Pivot. Den inneholder en kolonne kalt DateTime. Verdier vises slik:
Hvis vi ser på Datatype i Formatering-gruppen på Hjem-fanen i Power Pivot, ser vi at det er datatypen Tekst.
Vi kan ikke opprette en relasjon mellom DateTime-kolonnen og Dato-kolonnen i datotabellen fordi datatypene ikke samsvarer. Hvis vi prøver å endre datatypen til dato, får vi en typekonfliktsfeil:
I dette tilfellet kan ikke Power Pivot konvertere datatypen fra tekst til dato. Vi kan fortsatt bruke denne kolonnen, men for å få den til en sann datodatatype, må vi opprette en ny kolonne som analyserer teksten og oppretter den på nytt til en verdi Som Power Pivot kan lage en datatype for dato.
Husk, fra delen Arbeid med tid tidligere i denne artikkelen. med mindre det er nødvendig at analysen er til et tids-på-dag-nivå av presisjon, bør du konvertere datoer i faktatabellen til et dagsnivå av presisjon. Med dette i tankene vil vi at verdiene i den nye kolonnen skal være på dagnivå av presisjon (unntatt tid). Vi kan begge konvertere verdiene i DateTime-kolonnen til en datodatatype og fjerne tidsnivået for presisjon med følgende formel:
=DATO(VENSTRE([DateTime],4), MID([DateTime],6,2), MID([DateTime],9,2))
Dette gir oss en ny kolonne (i dette tilfellet kalt Dato). Power Pivot oppdager til og med at verdiene er datoer og angir datatypen automatisk til Dato.
Hvis vi ønsker å bevare tidsnivået for presisjon, utvider vi ganske enkelt formelen slik at den inkluderer timer, minutter og sekunder.
=DATO(VENSTRE([DateTime],4), MID([DateTime],6,2), MID([DateTime],9,2)) +
TIME(MID([DateTime],12,2), MID([DateTime],15,2), MID([DateTime],18,2))
Nå som vi har en datokolonne med datatypen Dato, kan vi opprette en relasjon mellom den og en datokolonne i en dato.
Flere ressurser
Hurtigveiledning: Lær det grunnleggende om DAX på 30 minutter