Datumtabeller i Power Pivot är nödvändiga för att bläddra och beräkna data över tid. Den här artikeln innehåller en ingående beskrivning av datumtabeller och hur du kan skapa dem i Power Pivot. I den här artikeln beskrivs i synnerhet:
-
Varför en datumtabell är viktig för att bläddra och beräkna data efter datum och tid.
-
Så här använder du Power Pivot för att lägga till en datumtabell i datamodellen.
-
Så här skapar du nya datumkolumner som År, Månad och Period i en datumtabell.
-
Hur du skapar relationer mellan datumtabeller och faktatabeller.
-
Arbeta med tid.
Den här artikeln är avsedd för användare som är nya i Power Pivot. Det är dock viktigt att du redan har god förståelse för hur du importerar data, skapar relationer och skapar beräknade kolumner och mått.
I den här artikeln beskrivs inte hur du använder DAX-Time-Intelligence funktioner i måttformler. Mer information om hur du skapar mått med DAX-tidsinformationsfunktioner finns i Tidsinformation i Power Pivot i Excel.
Obs!: I Power Pivot är namnen "mått" och "beräknade fält" synonyma. Vi använder namnmåttet i den här artikeln. Mer information finns i Mått i Power Pivot.
Innehåll
Förstå datumtabeller
Nästan all dataanalys innebär att du surfar och jämför data över datum och tid. Du kanske till exempel vill summera försäljningsbelopp för det senaste räkenskapskvartalet och sedan jämföra dessa summor med andra kvartal, eller så kanske du vill beräkna ett bokslutssaldo för en månadsslut för ett konto. I vart och ett av dessa fall använder du datum som ett sätt att gruppera och sammanställa försäljningstransaktioner eller saldon för en viss tidsperiod.
Power View-rapport
En datumtabell kan innehålla många olika representationer av datum och tid. En datumtabell innehåller till exempel ofta kolumner som Räkenskapsår, Månad, Kvartal eller Period som du kan välja som fält från en fältlista när du skär och filtrerar data i pivottabeller eller Power View-rapporter.
Power View-fältlista
För att datumkolumner som År, Månad och Kvartal ska innehålla alla datum inom respektive intervall måste datumtabellen ha minst en kolumn med en sammanhängande uppsättning datum. Kolumnen måste alltså ha en rad för varje dag för varje år som ingår i datumtabellen.
Om de data du vill bläddra bland till exempel har datum från 1 februari 2010 till 30 november 2012, och du rapporterar om ett kalenderår, vill du ha en datumtabell med minst ett datumintervall från 1 januari 2010 till 31 december 2012. Varje år i datumtabellen måste innehålla alla dagar för varje år. Om du regelbundet uppdaterar dina data med nyare data kanske du vill köra slutdatumet med ett eller två år, så att du inte behöver uppdatera datumtabellen allteftersom tiden går.
Datumtabell med en sammanhängande uppsättning datum
Om du rapporterar om ett räkenskapsår kan du skapa en datumtabell med en sammanhängande uppsättning datum för varje räkenskapsår. Om räkenskapsåret till exempel börjar den 1 mars och du har data för räkenskapsåren 2010 fram till dagens datum (t.ex. i år 2013) kan du skapa en datumtabell som börjar den 2009-03-01 och som omfattar minst varje dag under varje räkenskapsår fram till det sista datumet i räkenskapsåret 2013.
Om du ska rapportera både kalenderår och räkenskapsår behöver du inte skapa separata datumtabeller. En enskild datumtabell kan innehålla kolumner för ett kalenderår, räkenskapsår och till och med en tretton kalender med fyra veckor. Det viktiga är att datumtabellen innehåller en sammanhängande uppsättning datum för alla år som ingår.
Lägga till en datumtabell i datamodellen
Du kan lägga till en datumtabell i datamodellen på flera sätt:
-
Importera från en relationsdatabas eller annan datakälla.
-
Skapa en datumtabell i Excel och kopiera eller länka till en ny tabell i Power Pivot.
-
Importera från Microsoft Azure Marketplace.
Låt oss titta närmare på var och en av dessa.
Importera från en relationsdatabas
Om du importerar vissa eller alla dina data från ett datalager eller någon annan typ av relationsdatabas finns det förmodligen redan en datumtabell och relationer mellan den och resten av data som du importerar. Datumen och formatet kommer sannolikt att matcha datumen i dina faktadata, och datumen börjar förmodligen bra tidigare och går långt ut i framtiden. Datumtabellen som du vill importera kan vara mycket stor och innehålla ett datumintervall utöver det du behöver inkludera i datamodellen. Du kan använda avancerade filterfunktioner i Tabellimportguiden i Power Pivot för att välja endast de datum och kolumner du verkligen behöver. Det kan avsevärt minska arbetsbokens storlek och förbättra prestanda.
Tabellimportguiden
I de flesta fall behöver du inte skapa ytterligare kolumner som Räkenskapsår, Vecka, Månadsnamn osv. eftersom de redan finns i den importerade tabellen. Men i vissa fall kan du behöva skapa ytterligare datumkolumner, beroende på ett visst rapporteringsbehov, när du har importerat datumtabellen till datamodellen. Lyckligtvis är detta enkelt att göra med DAX. Du får lära dig mer om att skapa datumtabellfält senare. Alla miljöer är olika. Om du är osäker på om dina datakällor har ett relaterat datum eller en kalendertabell kontaktar du databasadministratören.
Skapa en datumtabell i Excel
Du kan skapa en datumtabell i Excel och sedan kopiera den till en ny tabell i datamodellen. Detta är verkligen ganska lätt att göra och det ger dig mycket flexibilitet.
När du skapar en datumtabell i Excel börjar du med en enda kolumn med ett angränsande datumintervall. Du kan sedan skapa ytterligare kolumner som År, Kvartal, Månad, Räkenskapsår, Period osv. i Excel-kalkylbladet med hjälp av Excel-formler, eller så kan du skapa dem som beräknade kolumner när du har kopierat tabellen till datamodellen. Skapa ytterligare datumkolumner i Power Pivot beskrivs i avsnittet Lägga till nya datumkolumner i avsnittet Datumtabell längre fram i den här artikeln.
Så här: Skapa en datumtabell i Excel och kopiera den till datamodellen
-
Ange ett kolumnrubriknamn i cell A1 i ett tomt kalkylblad i Excel för att identifiera ett datumintervall. Vanligtvis ärdet här något som Datum, DatumTid eller DateKey.
-
Skriv ett startdatum i cell A2. Till exempel 2010-01-01.
-
Klicka på fyllningshandtaget och dra det nedåt till ett radnummer som innehåller ett slutdatum. Till exempel 2016-12-31.
-
Markera alla rader i kolumnen Datum (inklusive rubriknamnet i cell A1).
-
Klicka på Formatera som tabell i gruppen Format och välj sedan ett format.
-
Klicka på OK i dialogrutan Formatera som tabell.
-
Kopiera alla rader, inklusive rubriken.
-
Klicka på Klistra in på fliken Start i Power Pivot.
-
I Klistra in förhandsgranskning > Tabellnamn skriver du ett namn som Datum eller Kalender. Lämna Använd första raden som kolumnrubrikermarkerad och klicka sedan på OK.
Den nya datumtabellen (med namnet Kalender i det här exemplet) i Power Pivot ser ut så här:
Obs!: Du kan också skapa en länkad tabell med hjälp av Lägg till i datamodell. Detta gör dock arbetsboken onödigt stor eftersom arbetsboken har två versioner av datumtabellen. en i Excel och en i Power Pivot..
Obs!: Namndatumet är ett nyckelord i Power Pivot. Om du namnger tabellen som du skapar i Power Pivot-datum måste du omge tabellnamnet med enkla citattecken i alla DAX-formler som refererar till den i ett argument. Alla exempelbilder och formler i den här artikeln refererar till en datumtabell som skapats i Power Pivot med namnet Kalender.
Nu har du en datumtabell i datamodellen. Du kan lägga till nya datumkolumner, till exempel År, Månad osv. med dax.
Lägga till nya datumkolumner i datumtabellen
En datumtabell med en enda datumkolumn som har en rad för varje dag för varje år är viktig för att definiera alla datum i ett datumintervall. Det är också nödvändigt för att skapa en relation mellan faktatabellen och datumtabellen. Men den enstaka datumkolumnen med en rad för varje dag är inte användbar när du analyserar efter datum i en pivottabell- eller Power View-rapport. Du vill att datumtabellen ska innehålla kolumner som hjälper dig att aggregera data för ett område eller en grupp med datum. Du kanske till exempel vill summera försäljningsbelopp per månad eller kvartal, eller så kan du skapa ett mått som beräknar tillväxten från år till år. I vart och ett av dessa fall behöver datumtabellen kolumner för år, månad eller kvartal som gör att du kan aggregera data för den perioden.
Om du har importerat datumtabellen från en relationsdatakälla kanske den redan innehåller de olika typer av datumkolumner som du vill använda. I vissa fall kanske du vill ändra vissa av dessa kolumner eller skapa ytterligare datumkolumner. Detta gäller särskilt om du skapar en egen datumtabell i Excel och kopierar den till datamodellen. Som tur är är det enkelt att skapa nya datumkolumner i Power Pivot med datum- och tidsfunktioner i DAX.
Tips: Om du ännu inte har arbetat med DAX kan du börja lära dig på ett bra sätt med Snabbstart: Lär dig grunderna i DAX på 30 minuter på Office.com.
Datum- och tidsfunktioner i DAX
Om du någon gång har arbetat med datum- och tidsfunktioner i Excel-formler känner du förmodligen till funktionerna Datum och tid. Även om dessa funktioner liknar sina motsvarigheter i Excel finns det några viktiga skillnader:
-
Datum- och tidsfunktionerna DAX använder datatypen datetime.
-
De kan ta värden från en kolumn som ett argument.
-
De kan användas för att returnera och/eller ändra datumvärden.
De här funktionerna används ofta när du skapar anpassade datumkolumner i en datumtabell, så de är viktiga att förstå. Vi kommer att använda ett antal av de här funktionerna för att skapa kolumner för År, Kvartal, Räkenskapsmånad och så vidare.
Obs!: Datum- och tidsfunktioner i DAX är inte samma som tidsinformationsfunktioner. Läs mer om Tidsinformation i Power Pivot i Excel.
DAX innehåller följande datum- och tidsfunktioner:
Det finns många andra DAX-funktioner som du kan använda i formlerna också. Många av formlerna som beskrivs här använder till exempel matematiska och trigonometriska funktioner som MOD och TRUNC, logiska funktioner som OM och textfunktioner som FORMAT Mer information om andra DAX-funktioner finns i avsnittet Ytterligare resurser längre fram i den här artikeln.
Exempel på formler för ett kalenderår
I följande exempel beskrivs formler som används för att skapa ytterligare kolumner i en datumtabell med namnet Kalender. En kolumn med namnet Datum finns redan och innehåller ett sammanhängande datumintervall mellan 2010-01-01 till 2016-12-31.
År
=ÅR([datum])
I den här formeln returnerar funktionen ÅR året från värdet i kolumnen Datum. Eftersom värdet i kolumnen Datum är av datatypen datetime vet funktionen ÅR hur året ska returneras från den.
Månad
=MÅNAD([datum])
I den här formeln, ungefär som med funktionen ÅR, kan vi helt enkelt använda funktionen MÅNAD för att returnera ett månadsvärde från kolumnen Datum.
Kvartal
=HELTO(([Månad]+2)/3)
I den här formeln använder vi funktionen HELTAL för att returnera ett datumvärde som ett heltal. Det argument vi anger för funktionen HELTAL är värdet från kolumnen Månad, addera 2 och dividera sedan det med 3 för att få vårt kvartal, 1 till och med 4.
Månadsnamn
=FORMAT([datum];"mmmm")
För att få månadsnamnet i den här formeln använder vi funktionen FORMAT för att konvertera ett numeriskt värde från kolumnen Datum till text. Vi anger datumkolumnen som det första argumentet och sedan formatet. vi vill att vårt månadsnamn ska visa alla tecken, så vi använder "mmmm". Resultatet ser ut så här:
Om vi vill returnera månadsnamnet förkortat till tre bokstäver använder vi "mmm" i argumentet format.
Dag i vecka
=FORMAT([datum];"ddd")
I den här formeln använder vi funktionen FORMAT för att hämta dagnamnet. Eftersom vi bara vill ha ett förkortat dagnamn anger vi "ddd" i argumentet format.
Exempel på pivottabell
När du har fält för datum som År, Kvartal, Månad osv. kan du använda dem i en pivottabell eller en rapport. Följande bild visar till exempel fältet Försäljningsbelopp från faktatabellen Försäljning i VÄRDEN och År och Kvartal från dimensionstabellen Kalender i RADER. Försäljningsbelopp aggregeras för års- och kvartalskontext.
Exempel på formler för ett räkenskapsår
Räkenskapsår
=OM([Månad]<= 6,[År],[År]+1)
I det här exemplet börjar räkenskapsåret den 1 juli.
Det finns ingen funktion som kan extrahera ett räkenskapsår från ett datumvärde eftersom start- och slutdatumen för ett räkenskapsår ofta skiljer sig från ett kalenderår. För att få räkenskapsåret använder vi först en OM-funktion för att testa om värdet för Månad är mindre än eller lika med 6. I det andra argumentet, om värdet för Månad är mindre än eller lika med 6, returnerar du värdet från kolumnen År. Annars returnerar du värdet från År och lägger till 1.
Ett annat sätt att ange ett räkenskapsårs slutmånadsvärde är att skapa ett mått som helt enkelt anger månaden. Till exempel FYE:=6. Du kan sedan referera till måttnamnet i stället för månadsnumret. Exempel: =OM([Månad]<=[FYE],[År],[År]+1). Det ger mer flexibilitet när du refererar till räkenskapsårets slutmånad i flera olika formler.
Räkenskapsmånad
=OM([Månad]<= 6, 6+[Månad], [Månad]- 6)
I den här formeln anger vi om värdet för [Månad] är mindre än eller lika med 6, tar sedan 6 och adderar värdet från Månad, annars subtraheras 6 från värdet från [Månad].
Räkenskapkvartal
=HELTAL(([FiscalMonth]+2)/3)
Formeln vi använder för FiscalQuarter är ungefär densamma som den var för Kvartal under vårt kalenderår. Den enda skillnaden är att vi anger [FiscalMonth] i stället för [Månad].
Helgdagar eller särskilda datum
Du kanske vill ta med en datumkolumn som anger att vissa datum är helgdagar eller något annat specialdatum. Du kanske till exempel vill summera försäljningssummor för nyårsdagen genom att lägga till fältet Semester i en pivottabell, som ett utsnitt eller ett filter. I andra fall kanske du vill utesluta dessa datum från andra datumkolumner eller i ett mått.
Det är ganska enkelt att inkludera helgdagar eller speciella dagar. Du kan skapa en tabell i Excel som innehåller de datum som du vill ta med. Du kan sedan kopiera eller använda Lägg till i datamodell för att lägga till den i datamodellen som en länkad tabell. I de flesta fall är det inte nödvändigt att skapa en relation mellan tabellen och tabellen Kalender. Alla formler som refererar till den kan använda funktionen LETAUPPVÄRDE för att returnera värden.
Nedan visas ett exempel på en tabell som skapats i Excel och som innehåller helgdagar som ska läggas till i datumtabellen:
Datum |
Helgdag |
---|---|
1/1/2010 |
Nya år |
11/25/2010 |
Tacksägelse |
12/25/2010 |
Jul |
2011-01-01 |
Nya år |
11/24/2011 |
Tacksägelse |
12/25/2011 |
Jul |
1/1/2012 |
Nya år |
2012-11-22 |
Tacksägelse |
12/25/2012 |
Jul |
1/1/2013 |
Nya år |
11/28/2013 |
Tacksägelse |
12/25/2013 |
Jul |
11/27/2014 |
Tacksägelse |
12/25/2014 |
Jul |
2014-01-01 |
Nya år |
11/27/2014 |
Tacksägelse |
12/25/2014 |
Jul |
1/1/2015 |
Nya år |
11/26/2014 |
Tacksägelse |
12/25/2015 |
Jul |
2016-01-01 |
Nya år |
11/24/2016 |
Tacksägelse |
12/25/2016 |
Jul |
I datumtabellen skapar vi en kolumn med namnet Högtid och använder en formel som den här:
=LETAUPPVÄRDE(Helgdagar[Semester],Helgdagar[datum],Kalender[datum])
Låt oss titta närmare på den här formeln.
Vi använder funktionen LETAUPPVÄRDE för att hämta värden från kolumnen Semester i tabellen Helgdagar. I det första argumentet anger vi den kolumn där vårt resultatvärde ska vara. Vi anger kolumnen Högtid i tabellen Helgdagar eftersom det är det värde vi vill returnera.
=LETAUPPVÄRDE(Helgdagar[Semester],Helgdagar[datum],Kalender[datum])
Vi anger sedan det andra argumentet, sökkolumnen som innehåller de datum vi vill söka efter. Vi anger kolumnen Datum i tabellen Helgdagar , så här:
=LETAUPPVÄRDE(Helgdagar[Semester],Helgdagar[datum];Kalender[datum])
Slutligen anger vi den kolumn i tabellen Kalender som innehåller de datum vi vill söka efter i tabellen Semester . Det här är naturligtvis kolumnen Datum i tabellen Kalender .
=LETAUPPVÄRDE(Helgdagar[Semester],Helgdagar[datum],Kalender[datum])
Kolumnen Högtid returnerar högtidsnamnet för varje rad som har ett datumvärde som matchar ett datum i tabellen Helgdagar.
Anpassad kalender – tretton fyra veckors perioder
Vissa organisationer, till exempel återförsäljare eller mat, rapporterar ofta om olika perioder, som tretton fyra veckors perioder. Med en tretton kalender med fyra veckor är varje period 28 dagar. Därför innehåller varje period fyra måndagar, fyra tisdagar, fyra onsdagar och så vidare. Varje period innehåller samma antal dagar och vanligtvis infaller helgdagar inom samma period varje år. Du kan välja att påbörja en period på valfri dag i veckan. Precis som med datum i en kalender eller ett räkenskapsår kan du använda DAX för att skapa ytterligare kolumner med anpassade datum.
I exemplen nedan börjar den första fullständiga perioden den första söndagen i räkenskapsåret. I det här fallet börjar räkenskapsåret den 1/7.
Vecka
Det här värdet ger oss veckonumret som börjar med den första hela veckan i räkenskapsåret. I det här exemplet börjar den första hela veckan på söndag, så den första hela veckan i det första räkenskapsåret i tabellen Kalender börjar faktiskt 2010-07-04 och fortsätter hela veckan i tabellen Kalender. Även om det här värdet i sig inte är så användbart i analysen är det nödvändigt att beräkna för användning i andra formler med 28 dagar.
=HELTA([datum]-40356)/7)
Låt oss titta närmare på den här formeln.
Först skapar vi en formel som returnerar värden från kolumnen Datum som ett heltal, så här:
=HELTA([datum])
Vi vill sedan leta efter den första söndagen under det första räkenskapsåret. Vi ser att det är 2010-07-04.
Subtrahera nu 40356 (som är heltal för 2010-06-27, den sista söndagen från föregående räkenskapsår) från det värdet för att få antalet dagar sedan början av dagarna i tabellen Kalender, så här:
=HELTA([datum]-40356)
Dividera sedan resultatet med 7 (dagar i veckan), så här:
=HELTA(([datum]-40356)/7)
Resultatet ser ut så här:
Punkt
Perioden i den här anpassade kalendern innehåller 28 dagar och börjar alltid på en söndag. Den här kolumnen returnerar numret på perioden som börjar med den första söndagen i det första räkenskapsåret.
=HELTA(([Vecka]+3)/4)
Låt oss titta närmare på den här formeln.
Först skapar vi en formel som returnerar ett värde från kolumnen Vecka som ett heltal, så här:
=HELTA([Vecka])
Lägg sedan till 3 till det värdet, så här:
=HELTA([Vecka]+3)
Dividera sedan resultatet med 4, så här:
=HELTA(([Vecka]+3)/4)
Resultatet ser ut så här:
Räkenskapsår för period
Det här värdet returnerar räkenskapsåret för en period.
=HELTO(([Period]+12)/13)+2008
Låt oss titta närmare på den här formeln.
Först skapar vi en formel som returnerar ett värde från Period och adderar 12:
= ([Punkt]+12)
Vi delar resultatet med 13, eftersom det finns tretton perioder på 28 dagar under räkenskapsåret:
=(([Period]+12)/13)
Vi lägger till 2010 eftersom det är det första året i tabellen:
=(([Period]+12)/13)+2010
Slutligen använder vi funktionen HELTAL för att ta bort valfri del av resultatet och returnera ett heltal, om det är dividerat med 13, så här:
=HELTA(([Period]+12)/13)+2010
Resultatet ser ut så här:
Period i räkenskapsår
Det här värdet returnerar periodnumret, 1–13, med början från den första fullständiga perioden (med början på söndag) för varje räkenskapsår.
=OM(REST([Period],13), REST([Period],13);13)
Den här formeln är lite mer komplex, så vi beskriver den först på ett språk som vi bättre förstår. Den här formeln anger att värdet ska divideras från [Period] med 13 för att få ett periodnummer (1–13) under året. Om talet är 0 returnerar du 13.
Först skapar vi en formel som returnerar resten av värdet från Period med 13. Vi kan använda REST-funktionerna (matematiska och trigonometriska funktioner) så här:
=REST([Period],13)
Det här ger oss oftast det resultat vi vill ha, förutom när värdet för period är 0 eftersom dessa datum inte faller inom det första räkenskapsåret, som under de första fem dagarna i vår exempeltabell med kalenderdatum. Vi kan ta hand om detta med en OM-funktion. Om vårt resultat är 0 returnerar vi 13, så här:
=OM(REST([Period],13);REST([Period],13);13)
Resultatet ser ut så här:
Exempel på pivottabell
I bilden nedan visas en pivottabell med fältet Försäljningsbelopp från faktatabellen Försäljning i VÄRDEN och fälten PeriodFiscalYear och PeriodInFiscalYear från dimensionstabellen Kalenderdatum i RADER. Försäljningsbelopp aggregeras för sammanhanget efter räkenskapsår och 28-dagarsperiod under räkenskapsåret.
Relationer
När du har skapat en datumtabell i datamodellen, börjat bläddra bland data i pivottabeller och rapporter och sammanställa data baserat på kolumnerna i datumdimensionstabellen måste du skapa en relation mellan faktatabellen med dina transaktionsdata och datumtabellen.
Eftersom du behöver skapa en relation baserat på datum vill du vara säker på att du skapar relationen mellan kolumner vars värden är av datatypen datumtid (datum).
För varje datumvärde i faktatabellen måste den relaterade uppslagskolumnen i datumtabellen innehålla matchande värden. En rad (transaktionspost) i tabellen Försäljningsfakta med värdet 2012-08-15 2012 12:00 AM i kolumnen DateKey måste ha motsvarande värde i den relaterade kolumnen Datum i tabellen datum (med namnet Kalender). Det här är en av de viktigaste anledningarna till att datumkolumnen i datumtabellen ska innehålla ett sammanhängande datumintervall som innehåller alla möjliga datum i faktatabellen.
Obs!: Datumkolumnen i varje tabell måste ha samma datatyp (Datum), men formatet på varje kolumn spelar ingen roll.
Obs!: Om du inte kan skapa relationer mellan de två tabellerna i Power Pivot kanske datum- och tidsfälten inte lagras på samma precisionsnivå. Beroende på kolumnformateringen kan värdena se likadana ut, men lagras på olika sätt. Läs mer om att arbeta med tid.
Obs!: Undvik att använda heltals surrogatnycklar i relationer. När du importerar data från en relationsdatakälla representeras ofta datum- och tidskolumner av en surrogatnyckel, som är en heltalskolumn som används för att representera ett unikt datum. I Power Pivot bör du undvika att skapa relationer genom att använda heltalstangenter för datum/tid och i stället använda kolumner som innehåller unika värden med en datumdatatyp. Även om användningen av surrogatnycklar anses vara ett bra sätt att använda traditionella datalager, behövs inte heltalsnycklarna i Power Pivot och kan göra det svårt att gruppera värden i pivottabeller efter olika datumperioder.
Om du får ett typfel när du försöker skapa en relation beror det troligtvis på att kolumnen i faktatabellen inte har datatypen Datum. Detta kan inträffa när Power Pivot inte automatiskt kan konvertera ett icke-datum (vanligtvis en textdatatyp) till en datumdatatyp. Du kan fortfarande använda kolumnen i faktatabellen, men du måste konvertera data med en DAX-formel i en ny beräknad kolumn. Se Konvertera datatypsdatum för text till en datumdatatyp längre fram i bilagan.
Flera relationer
I vissa fall kan det vara nödvändigt att skapa flera relationer eller skapa flera datumtabeller. Om det till exempel finns flera datumfält i tabellen Försäljningsfaktura, till exempel DateKey, ShipDate och ReturnDate, kan de alla ha relationer till fältet Datum i tabellen Kalenderdatum, men endast en av dem kan vara en aktiv relation. I det här fallet, eftersom DateKey representerar datumet för transaktionen, och därför det viktigaste datumet, fungerar detta bäst som den aktiva relationen. De andra har inaktiva relationer.
I följande pivottabell beräknas den totala försäljningen efter räkenskapsår och räkenskapskvartal. Ett mått med namnet Total Sales med formeln Total Sales:=SUM([SalesAmount])) placeras i VÄRDEN och fälten Räkenskapsår och Räkenskapskvartr från tabellen Kalenderdatum placeras i RADER.
Den här pivottabellen fungerar korrekt eftersom vi vill summera vår totala försäljning med transaktionsdatumeti DateKey. Måttet Total Sales använder datumen i DateKey och summeras efter räkenskapsår och räkenskapkvartal eftersom det finns en relation mellan DateKey i tabellen Försäljning och kolumnen Datum i tabellen Kalenderdatum.
Inaktiva relationer
Men tänk om vi vill summera vår totala försäljning, inte efter transaktionsdatum, utan efter leveransdatum? Vi behöver en relation mellan kolumnen Leveransdatum i tabellen Försäljning och kolumnen Datum i tabellen Kalender. Om vi inte skapar den relationen baseras våra aggregeringar alltid på transaktionsdatumet. Men vi kan ha flera relationer, även om bara en kan vara aktiv, och eftersom transaktionsdatum är det viktigaste får det den aktiva relationen med tabellen Kalender.
I det här fallet har ShipDate en inaktiv relation, så alla måttformler som skapas för att aggregera data baserat på leveransdatum måste ange den inaktiva relationen med hjälp av funktionen USERELATIONSHIP .
Eftersom det till exempel finns en inaktiv relation mellan kolumnen Leveransdatum i tabellen Försäljning och kolumnen Datum i tabellen Kalender kan vi skapa ett mått som summerar den totala försäljningen efter leveransdatum. Vi använder en formel som den här för att ange vilken relation som ska användas:
Total försäljning efter leveransdatum:=CALCULATE(SUM(Sales[SalesAmount]), USERELATIONSHIP(Sales[ShipDate], Calendar[Date]))
Den här formeln anger helt enkelt: Beräkna en summa för Försäljningsbelopp, men filtrera med hjälp av relationen mellan kolumnen Leveransdatum i tabellen Försäljning och kolumnen Datum i tabellen Kalender.
Om vi skapar en pivottabell och placerar måttet Total försäljning efter leveransdatum i VÄRDEN och Räkenskapsår och Räkenskapskvartal på RADER ser vi samma totalsumma, men alla andra summabelopp för räkenskapsår och räkenskapskvartal är olika eftersom de baseras på leveransdatum och inte transaktionsdatum.
Om du använder inaktiva relationer kan du bara använda en datumtabell, men det krävs att alla mått (t.ex. Total sales by Ship Date) refererar till den inaktiva relationen i formeln. Det finns ett annat alternativ, d.v.s. använda flera datumtabeller.
Flera datumtabeller
Ett annat sätt att arbeta med flera datumkolumner i faktatabellen är att skapa flera datumtabeller och skapa separata aktiva relationer mellan dem. Låt oss titta på tabellexemplet Försäljning igen. Vi har tre kolumner med datum som vi kanske vill sammanställa data på:
-
En DateKey med försäljningsdatum för varje transaktion.
-
Ett Leveransdatum – med datum och tid då artiklarna som såldes levererades till kunden.
-
Ett ReturnDate – med datum och tid då en eller flera returnerade artiklar togs emot.
Kom ihåg att fältet DateKey med transaktionsdatumet är viktigast. Vi kommer att göra de flesta av våra aggregeringar baserat på dessa datum, så vi vill säkert ha en relation mellan den och kolumnen Datum i tabellen Kalender. Om vi inte vill skapa inaktiva relationer mellan Leveransdatum och ReturDatum och fältet Datum i tabellen Kalender, vilket kräver särskilda måttformler, kan vi skapa ytterligare datumtabeller för leveransdatum och returdatum. Sedan kan vi skapa aktiva relationer mellan dem.
I det här exemplet har vi skapat en annan datumtabell med namnet ShipCalendar. Det innebär naturligtvis också att skapa ytterligare datumkolumner, och eftersom datumkolumnerna finns i en annan datumtabell vill vi namnge dem på ett sätt som skiljer dem från samma kolumner i tabellen Kalender. Vi har till exempel skapat kolumner med namnet ShipYear, ShipMonth, ShipQuarter och så vidare.
Om vi skapar pivottabellen och placerar måttet Total Sales i VÄRDEN och ShipFiscalYear och ShipFiscalQuarter på RADER, ser vi samma resultat som vi såg när vi skapade en inaktiv relation och ett särskilt beräknat fält för Total Sales by Ship Date.
Var och en av dessa metoder kräver noggrant övervägande. När du använder flera relationer med en enda datumtabell kan du behöva skapa särskilda mått som transiterar inaktiva relationer med hjälp av funktionen USERELATIONSHIP. Å andra sidan kan det vara förvirrande att skapa flera datumtabeller i en fältlista, och eftersom du har fler tabeller i datamodellen krävs mer minne. Experimentera med det som passar dig bäst.
Egenskapen Datumtabell
Egenskapen Datumtabell anger metadata som behövs för Time-Intelligence funktioner som TOTALYTD, PREVIOUSMONTH och DATESBETWEEN för att fungera korrekt. När en beräkning körs med någon av dessa funktioner vet Power Pivots formelmotor vart den ska gå för att hämta de datum den behöver.
Varning!: Om den här egenskapen inte har angetts kanske mått som använder DAX-Time-Intelligence funktioner inte returnerar korrekta resultat.
När du anger egenskapen Datumtabell anger du en datumtabell och en datumkolumn för datatypen Datum (datumtid) i den.
Så här: Ange egenskapen Datumtabell
-
Välj tabellen Kalender i PowerPivot-fönstret.
-
Klicka på Markera som datumtabell på fliken Design.
-
I dialogrutan Markera som datumtabell väljer du en kolumn med unika värden och datatypen Datum.
Arbeta med tid
Alla datumvärden med datatypen Datum i Excel eller SQL Server är faktiskt ett tal. I det numret ingår siffror som refererar till en tid. I många fall är den tiden för varje rad midnatt. Om till exempel ett DateTimeKey-fält i en försäljningsfaktionstabell har värden som 2010-10-19 2010 12:00:00 betyder det att värdena är till dagsprecisionsnivån. Om datumtimekey-fältvärdena har en tid, till exempel 2010-10-19 2010 08:44:00, innebär det att värdena är till minutnivån för precision. Värdena kan också vara till precisionsnivån för timme eller till och med sekunders precisionsnivå. Precisionsnivån i tidsvärdet påverkar hur du skapar datumtabellen och relationerna mellan den och faktatabellen.
Du måste bestämma om du ska aggregera dina data till en dagsprecisionsnivå eller till en tidsnivå med precision. Med andra ord kanske du vill använda kolumner i datumtabellen, t.ex. Morgon, Eftermiddag eller Timme som tidsdatumfält i områdena Rad, Kolumn eller Filter i en pivottabell.
Obs!: Dagar är den minsta tidsenheten som dax-tidsinformationsfunktioner kan arbeta med. Om du inte behöver arbeta med tidsvärden bör du minska dataprecisionen så att dagar används som minsta enhet.
Om du tänker aggregera dina data till tidsnivån behöver datumtabellen en datumkolumn med den tid som ingår. I själva verket behöver den en datumkolumn med en rad för varje timme, eller kanske till och med varje minut, varje dag, för varje år i datumintervallet. Det beror på att du måste ha matchande värden för att skapa en relation mellan kolumnen DateTimeKey i faktatabellen och datumkolumnen i datumtabellen. Som ni kan föreställa er, om du tar med många år, kan detta ge en mycket stor datumtabell.
I de flesta fall vill du dock bara aggregera dina data till dagen. Med andra ord kommer du att använda kolumner som År, Månad, Vecka eller Veckodag som fält i områdena Rad, Kolumn eller Filter i en pivottabell. I det här fallet behöver datumkolumnen i datumtabellen bara innehålla en rad för varje dag under ett år, som vi beskrev tidigare.
Om datumkolumnen innehåller en tidsnivå med precision, men du bara aggregerar till en dagnivå, kan du behöva ändra faktatabellen genom att skapa en ny kolumn som trunkerar värdena i datumkolumnen till ett dagsvärde. Konvertera med andra ord ett värde som 2010-10-19 08:44:00till2010-10-19 01:00:00. Du kan sedan skapa relationen mellan den nya kolumnen och datumkolumnen i datumtabellen eftersom värdena matchar.
Låt oss titta på ett exempel. Den här bilden visar en DateTimeKey-kolumn i tabellen Försäljningsfaktika. Alla aggregeringar för data i den här tabellen behöver bara vara på dagnivå genom att använda kolumner i tabellen Kalenderdatum som År, Månad, Kvartal osv. Tiden som ingår i värdet är inte relevant, bara det faktiska datumet.
Eftersom vi inte behöver analysera dessa data till tidsnivån behöver vi inte kolumnen Datum i tabellen Kalenderdatum för att ta med en rad för varje timme och varje minut varje dag varje år. Kolumnen Datum i datumtabellen ser alltså ut så här:
Om du vill skapa en relation mellan kolumnen DateTimeKey i tabellen Försäljning och kolumnen Datum i tabellen Kalender kan vi skapa en ny beräknad kolumn i tabellen Försäljningsfaktitet och använda funktionen TRUNC för att trunkera datum- och tidsvärdet i kolumnen DateTimeKey till ett datumvärde som matchar värdena i kolumnen Datum i tabellen Kalender. Formeln ser ut så här:
=TRUNC([DateTimeKey],0)
Det ger oss en ny kolumn (vi heter DateKey) med datumet från DateTimeKey-kolumnen och en tid 00:00:00 för varje rad:
Nu kan vi skapa en relation mellan den här nya kolumnen (DateKey) och datumkolumnen i tabellen Kalender.
På samma sätt kan vi skapa en beräknad kolumn i tabellen Försäljning som minskar tidsprecisionen i kolumnen DateTimeKey till timnivån för precision. I det här fallet fungerar inte funktionen AVKORTA, men vi kan fortfarande använda andra DAX-datum- och tidsfunktioner för att extrahera och sammanfoga om ett nytt värde till en timnivå med precision. Vi kan använda en formel som den här:
= DATUM (ÅR([DateTimeKey]), MÅNAD([DateTimeKey]), DAG([DateTimeKey]) ) + TID (TIMME([DateTimeKey]), 0, 0)
Vår nya kolumn ser ut så här:
Förutsatt att kolumnen Datum i datumtabellen har värden till timnivån med precision kan vi sedan skapa en relation mellan dem.
Göra datum mer användbara
Många av de datumkolumner som du skapar i datumtabellen är nödvändiga för andra fält, men egentligen är inte allt detta användbart i analysen. Fältet DateKey i tabellen Försäljning som vi refererar till och som visas i den här artikeln är till exempel viktigt eftersom den transaktionen registreras för varje transaktion vid ett visst datum och en viss tid för varje transaktion. Men ur analys- och rapporteringssynpunkt är det inte så användbart eftersom vi inte kan använda det som en rad, kolumn eller filterfält i en pivottabell eller rapport.
På samma sätt är kolumnen Datum i tabellen Kalender mycket användbar och kritisk i vårt exempel, men du kan inte använda den som en dimension i en pivottabell.
För att tabellerna och kolumnerna ska vara så användbara som möjligt, och för att göra pivottabell- eller Power View-rapportfältslistor lättare att navigera i, är det viktigt att dölja onödiga kolumner från klientverktyg. Du kanske också vill dölja vissa tabeller. Tabellen Helgdagar som visas tidigare innehåller semesterdatum som är viktiga för vissa kolumner i tabellen Kalender, men du kan inte använda kolumnerna Datum och Semester i själva tabellen Helgdagar som fält i en pivottabell. För att göra fältlistor enklare att navigera i kan du dölja hela tabellen Helgdagar.
En annan viktig aspekt av att arbeta med datum är namngivningskonventioner. Du kan namnge tabeller och kolumner i Power Pivot vad du vill. Men kom ihåg, särskilt om du kommer att dela arbetsboken med andra användare, en bra namngivningskonvention gör det enklare att identifiera tabeller och datum, inte bara i fältlistor, utan också i Power Pivot och i DAX-formler.
När du har en datumtabell i datamodellen kan du börja skapa åtgärder som hjälper dig att få ut mesta möjliga av dina data. Vissa kan vara så enkla som att summera försäljningssummor för det aktuella året och andra kan vara mer komplexa, där du behöver filtrera på ett visst intervall med unika datum. Mer information finns i Mått i funktionerna Power Pivot och Tidsinformation.
Bilaga
Konvertera datatypsdatum för text till en datumdatatyp
I vissa fall kan en faktatabell med transaktionsdata innehålla datum för datatypen text. Ett datum som visas som 2012-12-04T11:47:09 är alltså i själva verket inte ett datum alls, eller åtminstone inte den typ av datum som Power Pivot kan förstå. Det är egentligen bara text som ser ut som ett datum. För att kunna skapa en relation mellan en datumkolumn i faktatabellen och en datumkolumn i en datumtabell måste båda kolumnerna ha datatypen Datum .
Vanligtvis när du försöker ändra datatypen för en kolumn med datum som är textdatatyp till en datumdatatyp kan Power Pivot tolka datumen och konvertera dem automatiskt till en sann datumdatatyp. Om Power Pivot inte kan utföra en datatypskonvertering får du ett typfel.
Du kan dock fortfarande konvertera datumen till en sann datumdatatyp. Du kan skapa en ny beräknad kolumn och använda en DAX-formel för att tolka år, månad, dag, tid osv. från textsträngarna och sedan sammanfoga den på ett sätt som Power Pivot kan läsa som ett sant datum.
I det här exemplet har vi importerat en faktatabell med namnet Försäljning till Power Pivot. Den innehåller en kolumn med namnet DateTime. Värden visas så här:
Om vi tittar på Datatyp i gruppen Formatering på fliken Start i Power Pivot ser vi att det är datatypen Text.
Vi kan inte skapa en relation mellan kolumnen DateTime och datumkolumnen i vår datumtabell eftersom datatyperna inte matchar. Om vi försöker ändra datatypen till Datum får vi ett typfel:
I det här fallet gick det inte att konvertera datatypen från text till datum i Power Pivot. Vi kan fortfarande använda den här kolumnen, men för att få den till en sann datumdatatyp måste vi skapa en ny kolumn som tolkar texten och återskapar den till ett värde som Power Pivot kan göra till datatypen Datum.
Kom ihåg från avsnittet Arbeta med tid tidigare i den här artikeln. om det inte är nödvändigt att analysen är en precisionsnivå för tid på dagen bör du konvertera datum i faktatabellen till en dagsprecisionsnivå. Med det i åtanke vill vi att värdena i vår nya kolumn ska vara på dagsprecisionsnivån (exklusive tid). Vi kan både konvertera värdena i kolumnen DateTime till en datumdatatyp och ta bort tidsnivån för precision med följande formel:
=DATUM(VÄNSTER([DateTime],4), MID([DateTime],6,2), MID([DateTime],9,2))
Då får vi en ny kolumn (i det här fallet datum). Power Pivot identifierar även värden som datum och anger datatypen automatiskt till Datum.
Om vi vill behålla tidsnivån för precision utökar vi formeln till att omfatta timmar, minuter och sekunder.
=DATUM(VÄNSTER([DateTime],4), MID([DateTime],6,2), MID([DateTime],9,2)) +
TIME(MID([DateTime],12,2), MID([DateTime],15,2), MID([DateTime],18,2))
Nu när vi har en datumkolumn med datatypen Datum kan vi skapa en relation mellan den och en datumkolumn i ett datum.
Ytterligare resurser
Snabbstart: Grunderna i DAX på 30 minuter