En korsfråga kan göra det lättare att läsa och förstå sammanfattningsdata i Access. En korsfråga beräknar en summafunktion, medelvärdesfunktion eller en annan mängdfunktion och grupperar sedan resultatet i två uppsättningar med värden: en uppsättning längs sidan av databladet och en annan längs överkanten. Klicka på Skapa i menyfliksområdet och klicka sedan på Frågeguiden i gruppen Frågor. Dubbelklicka på Korsfrågeguiden i dialogrutan Ny fråga.
Om en uppsättning rubriker innehåller datumvärden kan du gruppera posterna baserat på standardintervall, t.ex. månader eller kvartal, i guiden.
Artikelinnehåll
Obs!: Korsfrågor är inte tillgängliga i Access-webbapp och stöds bara delvis i en webbdatabas: de kan inte användas av alla webbobjekt.
Översikt
En korsfråga är en typ av välj fråga. När du kör en korsfråga visas resultatet i ett datablad med en annan struktur från andra typer av datablad.
Strukturen för en korsfråga kan göra den enklare att läsa än en enkel urvalsfråga som visar samma data, enligt följande bild
1. Den här urvalsfrågan sammanfattar data lodrätt efter anställd och kategori.
2. En korsfråga kan visa samma data men grupperar data både vågrätt och lodrätt så att databladet kan vara mer kompakt och lättare att läsa
När du skapar en korsfråga anger du vilka fält som innehåller radrubriker, vilka fält som innehåller kolumnrubriker och vilka fält som innehåller värden som ska summeras. Du kan bara använda ett fält av varje när du anger kolumnrubriker och vilka värden som ska summeras. Du kan använda upp till tre fält när du anger radrubriker.
Du kan även använda ett uttryck för att producera radrubriker, kolumnrubriker eller värden för att sammanfatta. Se SQL-mängdfunktioner för mer information.
1. En, två eller tre kolumner på den här sidan innehåller radrubriker. Namnen på fälten som du använder som radrubriker visas i den översta raden i dessa kolumner.
2. Radrubrikerna visas här. Antalet rader i korstabellens datablad kan snabbt växa när du använder fler än ett radrubrikfält, eftersom varje kombination av radrubriker visas.
3. Kolumnerna på den här sidan innehåller kolumnrubriker och summeringsvärden. Observera att namnet på kolumnrubrikfältet inte visas i databladet.
4. Summeringsvärden visas här.
Metoder för att skapa en korsfråga
Använda Korsfrågeguiden Korsfrågeguiden är normalt det snabbaste och enklaste sättet att skapa en korsfråga. Det gör de mesta av arbetet åt dig men det finns några alternativ som inte finns i guiden.
Guiden har följande fördelar:
-
Den är enkel att använda. Använd guiden genom att starta den och besvara en rad guidade frågor.
-
Den kan automatiskt gruppera datum i intervall. Om du använder ett fält som innehåller datum-/tidsinformation för kolumnrubriker hjälper guiden dig även att gruppera datumen i intervall, som månader eller kvartal.
Tips: Om du vill använda värden från ett Datum/Tid-fält för kolumnrubriker men vill gruppera datumen i intervall som guiden inte ger, till exempel räkenskapsår eller tvåårsperiod, ska du inte använda guiden när du skapar frågan. Skapa istället korsfrågan i designvyn och använd ett uttryck till att skapa intervallen.
-
Den kan användas som en utgångspunkt. Du kan skapa den grundläggande korsfrågan i guiden och finjustera frågans design i designvyn.
Men med guiden kan du inte:
-
Använda fler än en tabell eller fråga som en datakälla.
-
Använda en uttryck till att skapa fält.
-
Lägga till en parameterprompt.
-
Ange en lista med fasta värden som ska användas som kolumnrubriker.
I guidens sista steg kan du välja att ändra frågan i designvyn. Då kan du lägga till frågedesignelement som guiden inte stödjer, till exempel ytterligare postkällor.
Arbeta i designvyn I designvyn får du större kontroll över frågans utformning. Där stöds funktioner som inte är tillgängliga i guiden.
Du kan använda designvyn till att skapa korsfrågan om du vill:
-
Ha mer kontroll över processen. Guiden fattar de besluten åt dig.
-
Använda fler än en tabell eller fråga som en postkälla.
-
Lägga till en parameterprompt i frågan.
-
Använda uttryck som fält i frågan.
-
Ange en lista med fasta värden som ska användas som kolumnrubriker.
-
Öva på att använda designrutnät.
Skriva en fråga i SQL-vyn Du kan skriva en korsfråga i SQL-vyn, om du vill. Men du kan inte ange parameterdatatyper genom att använda SQL-vyn. Om du vill använda en parameter i korsfrågan måste du ange parameterdatatypen genom att ändra frågan i designvyn.
Tips: Kom ihåg – du är inte begränsad till att bara använda en metod till att skapa en korsfråga. Du kan använda guiden till att skapa en fråga och sedan ändra frågedesignen i designvyn.
Skapa en korsfråga med hjälp av Korsfrågeguiden
Om du använder Korsfrågeguiden krävs att du använder en enstaka tabell eller fråga som postkällan för korsfrågan. Om en enskild tabell inte innehåller alla data som du vill ta med i korsfrågan börjar du med att skapa en urvalsfråga som returnerar rätt uppsättning data. Mer information om hur du skapar en urvalsfråga finns i avsnittet Se även.
I det här exemplet skapar vi en korsfråga med tabellen Produkter från Northwind-exemplet i exempeldatabasen. Vi vill visa antalet produkter i varje kategori från alla leverantörer.
-
På fliken Skapa i gruppen Frågor klickar du på Frågeguiden.
-
Klicka på Korsfrågeguiden i dialogrutan Ny fråga, och sedan på OK.
Korsfrågeguiden startar.
-
På den första sidan i guiden väljer du den tabell eller fråga du vill använda för att skapa en korsfråga. För det här exemplet väljer du Produkter och klickar sedan på Nästa.
-
På nästa sida väljer du det fält som innehåller värdena du vill använda som radrubriker. Du kan välja upp till tre fält som källa till radrubriker, men ju färre rubriker du använder desto enklare blir korsfrågans datablad att läsa. Om du väljer fler än ett fält för radrubriker sorteras resultatet i samma ordning som du väljer fälten.
I det här exemplet väljer du Leverantörs-ID.Värde och klickar sedan på knappen med en > symbol. Observera att Access visar fältnamnet längs den vänstra sidan av exempelfrågans förhandsgranskning längst ned i dialogrutan. Klicka på Nästa för att fortsätta.
-
På nästa sidan väljer du det fält som innehåller värdena du vill använda som kolumnrubriker. Allmänt sett ska du välja ett fält som innehåller få värden, så att resultaten blir lättlästa. Att välja ett fält som bara har några möjliga värden (t.ex. kön) kan vara bättre att använda ett fält som kan ha många olika värden (t.ex. ålder).
Om fältet som du väljer att använda för kolumnrubriker är av datatypen Datum/tid får guiden ett steg till där du kan ange hur du vill gruppera datum i intervall, till exempel månader eller kvartal.
I det här exemplet väljer du Kategori och märker att Access visar kategoriexempelnamn längst upp i exempelfrågans förhandsgranskning längst ned i dialogrutan. Klicka på Nästa för att fortsätta.
-
Om du väljer ett Datum/tid-fält som kolumnrubrik visas en uppmaning på nästa sida i guiden där du ska ange vilket intervall som datumen ska grupperas med. Du kan ange År, Kvartal, Månad, Datum eller Datum/tid. Om du inte väljer ett Datum/tid-fält som kolumnrubrik visas inte den här sidan.
-
På nästa sida ska du välja ett fält och en funktion som beräknar summeringsvärdena. Datatypen för fältet som du väljer avgör vilka funktioner som är tillgängliga.
På samma sida ska du markera eller avmarkera kryssrutan Ja, ta med radsummor om du vill ta med respektive utelämna radsummor.
Om du tar med radsummor får korsfrågan en extra radrubrik som använder samma fält och funktion som fältvärdet. Om du tar med en radsumma infogas en extra kolumn som summerar resten av kolumnerna. Om korsfrågan till exempel beräknar medelvärdet efter placering och kön (med kön som kolumnrubrik) beräknar den extra kolumnen medelåldern efter plats, för båda könen.
För det här exemplet väljer du ID i rutan Fält och Antal i rutan Funktioner för att Access ska räkna antalet produkter i varje skärningspunkt mellan leverantör och kategori. Lämna kryssrutan Ja, ta med radsummor markerad. Access skapar en kolumn där antalet produkter från varje leverantör summeras. Klicka på Nästa för att fortsätta.
-
På den sista sidan i guiden ska du skriva ett namn på frågan och ange om du vill visa resultatet eller ändra frågans design.
Du kan byta vilken funktion som används för att skapa radsummor genom att redigera korsfrågan i designvyn.
-
Om du har gått igenom det här exemplet med tabellen Produkter från Northwind-databasen visar korsfrågan listan med leverantörsnamn som rader, produktkategorinamnen som kolumner och antalet produkter i varje skärningspunkt.
Genom att använda designvyn till att skapa korsfrågan kan du använda så många postkällor (tabeller och frågor) som du vill. Men du kan hålla designen enkel genom att först skapa en urvalsfråga som returnerar alla data som du vill använda och sedan använda den frågan som den enda postkällan för korsfrågan. Mer information om hur du skapar en urvalsfråga finns i avsnittet Se även.
När du skapar en korsfråga i designvyn ska du använda raderna Totalt och Korstabell i rutnätet för att ange vilka fälts värden som ska användas som kolumnrubriker, radrubriker respektive för att beräkna summor, medelvärden, antal och annat.
1. Inställningarna på dessa rader anger om fältet är en radrubrik, kolumnrubrik eller ett summeringsvärde.
2. Den här inställningen visar fältets värden som radrubriker.
3. Den här inställningen visar fältets värden som kolumnrubriker.
4. Dessa inställningar skapar summeringsvärden.
Skapa frågan
-
Klicka på Frågedesign i gruppen Frågor på fliken Skapa.
-
Dubbelklicka i dialogrutan Visa tabell på varje tabell eller fråga som du vill använda som datakälla.
Om du använder fler än en datakälla måste tabellerna och frågorna kopplas till de fält som de har gemensamt. Mer information om hur du kopplar tabeller och frågor finns i avsnittet Se även.
-
Stäng dialogrutan Visa tabell.
-
Klicka på Korstabell i gruppen Frågetyp på fliken Design.
-
Dubbelklicka i frågedesignfönstret på varje fält som du vill använda som radrubrik. Du kan välja upp till tre fält som radrubriker.
-
Välj Radrubrik på raden Korstabell i frågerutnätet för varje radrubrikfält.
Du kan ange ett uttryck på raden Villkor om du vill begränsa resultatet för det fältet. Du kan också använda raden Sortera om du vill ange en sorteringsordning för ett fält.
-
Dubbelklicka på fältet som du vill använda som källa för kolumnrubriker i designfönstret. Du kan bara välja ett fält som kolumnrubrik.
-
Välj Kolumnrubrik på raden Korstabell i frågerutnätet för kolumnrubrikfältet.
Du kan ange ett uttryck på raden Villkor om du vill begränsa resultatet för kolumnrubrikfältet. Om du använder ett villkorsuttryck tillsammans med kolumnrubrikfältet begränsas emellertid inte antalet kolumner som returneras av korsfrågan. I stället begränsas vilka kolumner som innehåller data. Anta att du har ett kolumnrubrikfält som har tre möjliga värden: rött, grönt och blått. Om du använder villkoret ='blått' på kolumnrubrikfältet visas en kolumn för rött och en för grönt, men bara kolumnen för blått innehåller data.
Om du vill begränsa vilka värden som visas som kolumnrubriker kan du ange en lista med fasta värden genom att använda egenskapen Kolumnrubriker för frågan. Mer information finns i nästa avsnitt.
-
Dubbelklicka i frågedesignfönstret på fältet som du vill använda för att beräkna summeringsvärden. Du kan bara välja ett fält för detta.
-
Välj i raden Totalt i frågerutnätet för summeringsfältsvärdena en mängdfunktion som ska användas för att beräkna värdena.
-
Markera Värde på raden Korstabell för summeringsvärdesfältet.
Du kan inte ange villkor för eller sortera efter ett summeringsvärdesfält.
-
Klicka på Kör i gruppen Resultat på fliken Design.
Ange fasta värden för kolumnrubriker
Om du vill ange fasta värden för kolumnrubriker kan du ange egenskapen Kolumnrubriker för frågan.
-
Öppna korsfrågan i designvyn.
-
Om egenskapssidan inte visas trycker du på F4 så att den öppnas.
-
Kontrollera att Markeringstyp anges till Frågeegenskaper precis ovanför fliken Allmänt i egenskapssidan. Om så inte är fallet klickar du på en tom punkt ovanför frågerutnätet.
-
Ange i egenskapen Kolumnrubriker på fliken Allmänt en semikolonavgränsad lista med värden som du vill använda som kolumnrubriker.
Vissa tecken (till exempel de flesta interpunktionstecken) går inte att använda i kolumnrubriker. Om du använder dessa tecken i listan med värden byts de automatiskt ut mot ett understreck (_).
SQL-syntax för en korsfråga
En korsfråga uttrycks i SQL som en TRANSFORM-instruktion. En TRANSFORM-instruktion har följande syntax:
TRANSFORM aggfunction
selectstatement PIVOT-pivotfält [IN (värde1[, värde2[, ...]]])]TRANSFORM-uttrycket består av följande delar:
Element |
Beskrivning |
mängdfunktion |
En SQL-mängdfunktion som fungerar på den markerade informationen. |
select-uttryck |
Ett SELECT-uttryck |
pivotfält |
Fält eller uttryck som du vill använda till att skapa kolumnrubriker i frågans resultatuppsättning. |
värde1, värde2 |
Fasta värden som används för att skapa kolumnrubriker. |
SQL-vyn begränsar inte antalet tabeller eller frågor som du kan använda som postkällor för en korsfråga. Men du kan hålla designen enkel genom att skapa en urvalsfråga som returnerar alla data som du vill använda i korsfrågan och sedan använda den frågan som postkälla. Mer information om hur du skapar en urvalsfråga finns i avsnittet Se även.
-
Klicka på Frågedesign i gruppen Annat på fliken Skapa.
-
Stäng dialogrutan Visa tabell.
-
Klicka på Visa i gruppen Vyer på fliken Design och klicka sedan på SQL-vy.
-
På fliken SQL-objekt skriver eller klistrar du in följande SQL:
TRANSFORM SELECT FROM GROUP BY PIVOT ;
-
På första raden, efter TRANSFORM, skriver du ett uttryck som ska användas till att beräkna summerade värden, till exempel, Summa([Belopp]).
Om du använder fler än en tabell eller fråga som postkälla inkluderar du tabell- eller frågenamnet som en del av varje fältnamn, till exempel Summa([Kostnad].[Belopp]).
-
På den andra raden, efter SELECT, skriver du en lista med värden eller fältuttryck som du vill använda som radrubriker. Avgränsa listobjekten med kommatecken, till exempel [Budget].[Avd-ID], [Kostnad].[Typ].
-
På den tredje raden, efter FROM, skriver du en lista med tabeller eller frågor du använder som postkällor, till exempel Budget, Kostnad.
-
På den fjärde raden, efter GROUP BY, skriver du samma lista med fält som du har använt i SELECT-satsen, i steg 6.
-
På den femte raden, efter PIVOT, skriver du ett fältnamn eller ett uttryck som du vill använda som kolumnrubriker, till exempel PIVOT [Budget].[År].
Lägg till en sorteringsordning i en korsfråga i SQL-vyn med en ORDER BY-sats.
-
Infoga en rad mellan GROUP BY-satsen och PIVOT-satsen.
-
På den nya raden skriver du ORDER BY följt av ett blanksteg.
-
Skriv det fältnamn eller uttryck som du vill sortera efter, till exempel ORDER BY [Kostnad].[Kostnadsklass]
Som standard sorterar en ORDER BY-sats värden stigande. Om du vill sortera fallande skriver du DESC efter fältnamnet eller uttrycket.
-
Om du vill sortera efter ett ytterligare fält eller uttryck skriver du ett komma och sedan det ytterligare fältnamnet eller uttrycket. Sortering förekommer i den ordning som fälten eller uttrycken visas i ORDER BY-satsen.
-
I slutet av PIVOT-satsen i SQL-vyn för korsfrågan skriver du IN, följt av en kommaavgränsad lista med värden (inom parentes) som ska användas som kolumnrubriker. Till exempel ger IN (2007, 2008, 2009, 2010) fyra kolumnrubriker: 2007, 2008, 2009, 2010.
Om du anger ett fast värden som inte motsvarar något fältvärde i pivotfältet blir det fasta värde en kolumnrubrik för en tom kolumn.
-
Infoga en rad efter FROM-satsen i SQL-vyn för korsfrågan.
-
Skriv WHERE följt av ett fältvillkor.
Om du vill använda ytterligare villkor kan du använda operatorerna AND och OR till att utöka WHERE-satsen. Du kan också använda parenteser som gruppvillkor i logiska uppsättningar.
Ibland vill du, istället för att använda varje värde för ett fält som rad- eller kolumnrubriker, gruppera värdena i ett fält i intervall och sedan använda de intervallen som rad- eller kolumnrubriker. Anta att du använder ett fält av typen Ålder för kolumnrubriker. I stället för att använda en kolumn för varje ålder kanske du vill använda kolumner som representerar åldersintervall.
Du kan använda funktionen OOM i ett uttryck om du vill skapa intervall som rad- eller kolumnrubriker.
Tips: Om du vill skapa intervall med ett Datum/tid-fält bör du använda Korsfrågeguiden. I guiden kan du gruppera datum i intervallen År, Kvartal, Månad, Datum och Datum/tid. Om inget av intervallen passar bör du skapa korsfrågan i designvyn och sedan skapa önskade intervall med den metod som beskrivs i det här avsnittet.
-
Öppna korsfrågan i designvyn.
-
Högerklicka på raden Fält i frågerutnätet, högerklicka i en tom kolumn och klicka sedan på Zooma på snabbmenyn i tredje kolumnen i rutnätet.
-
I rutan Zooma skriver du ett fältalias, följt av ett kolon (:).
-
Skriv OOM().
-
I parentesen som finns efter OOM skriver du ett jämförelseuttryck som definierar det första intervallet med fältvärden.
Anta att du skapar intervall för fältet Ålder (Age, kodexemplet nedan är på engelska och uttrycket heter då OOM), och vill att varje intervall ska omfatta 20 år. Jämförelseuttrycket för det första intervallet är [Age]<21.
-
Skriv ett semikolon efter jämförelseuttrycket och sedan ett namn på intervallet, inom citattecken. Namnet du anger blir korstabellrubriken för värden som infaller i det intervallet.
Skriv ett semikolon efter [Age]<21 och sedan "0-20 years".
-
Skriv ett semikolon efter intervallnamnet (utanför citattecknen) och gör sedan något av följande:
-
Skriv OOM() och upprepa sedan steg 5, 6 och 7 om du vill skapa ett till intervall.
-
För det sista intervallet skriver du bara namnet.
Ett fullständigt kapslat OOM-uttryck som avgränsar fältet Age i tjugoårsintervall kan se ut så här (radbrytningar har lagts till så att det blir enklare att läsa):
IIf([Age]<21,"0-20 years", IIf([Age]<41,"21-40 years", IIf([Age]<61,"41-60 years", IIf([Age]<81,"61-80 years", "80+ years"))))
Obs!: När uttrycket utvärderas avslutas utvärderingen när något av OOM-kommandona utvärderas till sant. Du behöver inte ange någon nedre gräns för varje intervall, eftersom alla värden som infaller under den nedre gränsen i ett givet intervall redan har utvärderats till sant.
-
-
Markera Gruppera efter på raden Totalt i frågerutnätet.
-
Ange på raden Korstabell om intervallen ska användas som rad- eller kolumnrubriker. Kom ihåg att du kan ange mellan en och tre radrubriker, men bara en kolumnrubrik.
Du kanske vill att korsfrågan ska visa en uppmaning om indata när den körs. Anta att du använder flera radrubriker, där en är Land. I stället för att visa data för varje land kanske du vill att frågan ska be om ett namn och sedan visa information enligt användarens indata.
Du kan lägga till en parameteruppmaning för valfritt radrubrikfält.
Obs!: Du kan även lägga till en parameterprompt i ett kolumnrubrikfält men det begränsar inte kolumnerna som visas.
-
Öppna korsfrågan i designvyn.
-
Skriv frågetext inom hakparentes på raden Villkor för det radrubrikfält som du vill visa en uppmaning om indata för. Texten visas sedan som en uppmaning när frågan körs.
Om du till exempel skriver [Vilket land?] på raden Villkor visas en dialogruta när frågan körs som innehåller frågan "Vilket land?", en indataruta samt knappen OK.
Tips: Om du vill att parametern ska vara flexibel sammanfogar du uttrycket med jokertecken, genom att använda operatorn SOM. I stället för att använda [Vilket land?] som villkor kan du använda SOM [Vilket land?]&"*" så att parametern matchar fler indata. Om du använder SOM ändras inte utseendet på parameteruppmaningen.
-
Klicka på Parametrar i gruppen Visa/dölj på fliken Konstruktion.
-
Skriv i kolumnen Parametrar i dialogrutan Frågeparametrar samma parameteruppmaning som du använder på raden Villkor. Ta med hakparentesen, men inte några sammanfogande jokertecken eller operatorn SOM.
-
Välj datatypen för parametern i kolumnen Datatyp. Datatypen ska matcha datatypen för radrubrikfältet.
Om fältet som du använder för att beräkna summeringsvärden i korsfrågan innehåller nullvärden, ignoreras dessa värden i de mängdfunktioner som du använder. I vissa mängdfunktioner kan detta påverkar resultatet. Om du till exempel vill beräkna ett medelvärde adderar du alla värdena och dividerar resultatet med antalet värden. Men om vissa fält innehåller nullvärden, räknas dessa inte med i antalet värden.
I vissa fall kanske du föredrar att byta ut nullvärden mot nollor så att värdena räknas under mängdberäkningar. Med funktionen Nnoll kan du byta ut nullvärden mot nollor.
Syntax för Nnoll
Nnoll ( variant [, värdeomnull ] )
Funktionen Nnoll har följande argument:
Argument |
Beskrivning |
variant |
Obligatoriskt. En variabel av datatyp Variant. |
värdeomnull |
Valfritt. Ett Variant-värde som anger det värde som ska returneras om argumentet variant är null. Argumentet är det värde som ska returneras i stället för noll eller en tom sträng. Obs!: Om du använder funktionen Nnoll i ett uttryck i en fråga utan att ange argumentet värdeomnoll returnerar funktionen en tom sträng för de fält som innehåller nullvärden. |
-
Högerklicka i fältet Värde i frågerutnätet när frågan är öppen i designvyn.
-
Klicka på Zooma på snabbmenyn.
-
Omslut fältnamnet eller uttrycket i rutan Zooma med parentes och skriv sedan Nnoll före parentesen.
-
Skriv , 0 innanför högerparentesen.
Om du till exempel använt nnoll med ett område som kallas "Timmar förlorade" för att ändra nullvärden till nollor kommer det färdiga uttrycket att se ut så här:
Nz([Hours Lost], 0)
-
Förenkla Korsfrågor kan bli svåra att läsa allt eftersom antalet radkombinationer växer. Använd inte fler rader än vad som behövs.
-
Skapa gärna korstabellen i steg Begränsa inte dig själv till att bara använda tabeller. Du kan ofta börja med att skapa en summafråga och sedan använda den som datakälla för korsfrågan.
-
Välj kolumnrubrikfält med omsorg Korstabelldatablad tenderar att bli enklare att läsa när antalet kolumnrubriker är relativt få. När du har identifierat fälten som du vill använda som rubriker bör du skapa kolumnrubrikerna utifrån fältet med minst antal distinkta värden. Om frågan till exempel beräknar ett värde efter ålder och kön, bör du använda kön som kolumnrubrik i stället för ålder, eftersom kön för det mesta har färre möjliga värden än ålder.
-
Använda en underfråga i en WHERE-sats Du kan använda en underfråga som en del av en WHERE-sats i en korsfråga.