Så här skapar du en löpande summeringsfråga i Microsoft Access

Anteckning

Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.

Avancerat: Kräver expertkodning, interoperabilitet och fleranvändarfärdigheter.

Den här artikeln gäller en Microsoft Access-databasfil (.mdb) eller en Microsoft Access-databasfil (.accdb).

Sammanfattning

I den här artikeln visas två metoder som du kan använda för att skapa en löpande summeringsfråga. En löpande summafråga är en fråga där summan för varje post är en summa av den posten och eventuella tidigare poster. Den här typen av fråga är användbar när du vill visa ackumulerade summor över en grupp med poster (eller över en tidsperiod) i ett diagram eller en rapport.

Obs! Du kan se en demonstration av den teknik som används i den här artikeln i exempelfilen Qrysmp00.exe.

Mer information

Metod 1

Den första metoden använder en DSumma-funktion och villkor i en fråga för att skapa en löpande summering över tid. Med funktionen DSumma summerar du den aktuella posten och eventuella tidigare poster. När frågan flyttas till nästa post körs funktionen DSumma igen och uppdaterar den kumulativa summan.

I följande exempelfråga används tabellen Order från exempeldatabasen Northwind för att skapa en löpande summering av fraktkostnaderna för varje månad 1997. Av prestandaskäl är exempeldata begränsade till ett år. Eftersom funktionen DSumma körs en gång för varje post i frågan kan det ta flera sekunder (beroende på datorns hastighet) innan frågan slutförs. Så här skapar och kör du frågan:

  1. Öppna exempeldatabasen Northwind.

  2. Skapa en ny urvalsfråga och lägg till tabellen Order.

  3. Klicka på SummorVisa-menyn.

    Obs! I Access 2007 klickar du på Summor i gruppen Visa/döljfliken Design.

  4. I den första kolumnen i frågerutnätet skriver du följande uttryck i rutan Fält och gör följande val för rutorna Summa, Sortera och Visa:

    Field: AYear: DatePart("yyyy",[OrderDate])
    Total: Group By
    Sort: Ascending
    Show: Yes
    

    Uttrycket i rutan Fält visar och sorterar årsdelen av fältet Orderdatum.

  5. I den andra kolumnen i frågerutnätet skriver du följande uttryck i rutan Fält och gör följande val för rutorna Summa, Sortera och Visa:

    Field: AMonth: DatePart("m",[OrderDate])
    Total: Group By
    Sort: Ascending
    Show: Yes
    

    Uttrycket i rutan Fält sorterar och visar månadsdelen av fältet Orderdatum som ett heltalsvärde från 1 till 12.

  6. I den tredje kolumnen i frågerutnätet skriver du följande uttryck i rutan Fält och gör följande val för rutorna Summa och Visa.

    OBS! I följande exempel används ett understreck (_) i slutet av en rad som ett rad fortsättningstecken. Ta bort understreck från slutet av raden när du skapar det här exemplet igen.

    Field: RunTot: DSum("Freight","Orders","DatePart('m', _
    [OrderDate])<=" & [AMonth] & " And DatePart('yyyy', _
    [OrderDate])<=" & [AYear] & "")
    Total: Expression
    Show: Yes
    

    Uttrycket i rutan Fält använder funktionen DSumma() för att summera fältet Frakt när värdena i fälten AMonth och AYear är mindre än eller lika med den aktuella posten som frågan bearbetar.

  7. I den fjärde kolumnen i frågerutnätet skriver du följande uttryck i rutan Fält och gör följande val för rutorna Summa, Sortera och Visa:

    Field: FDate: Format([OrderDate],"mmm")
    Total: Group By
    Sort: Ascending
    Show: Yes
    

    Uttrycket i rutan Fält visar varje månad i textformat, t.ex. jan, feb, mar och så vidare.

  8. I den femte kolumnen i frågerutnätet skriver du följande uttryck i rutan Fält och gör följande val för rutorna Summa, Villkor och Visa:

    Field: DatePart("yyyy",[OrderDate])
    Total: Where
    Criteria: 1997
    Show: No
    

    Uttrycket i rutan Fält filtrerar frågans postuppsättning så att data från 1997 endast inkluderas.

  9. Kör frågan. Observera att följande poster visas i RunTot-fältet med en löpande summering:

    AYear AMonth RunTot FDate
    --------------------------------------
    1997 1 2238.98 Jan
    1997 2 3840.43 Feb
    1997 3 5729.24 Mar
    1997 4 8668.34 Apr
    1997 5 12129.74 May
    1997 6 13982.39 Jun
    1997 7 17729.29 Jul
    1997 8 22204.73 Aug
    1997 9 26565.26 Sep
    1997 10 32031.38 Oct
    1997 11 36192.09 Nov
    1997 12 42748.64 Dec
    

Metod 2

Den andra metoden använder en summafråga med en DSumma()-funktion för att skapa en löpande summa över en grupp.

I följande exempelfråga används tabellen Order för att summera fraktkostnader per anställd samt för att beräkna en löpande fraktsumma. Så här skapar och kör du frågan:

  1. Öppna exempeldatabasen Northwind.mdb.

  2. Skapa en ny urvalsfråga och lägg till tabellen Order.

  3. Klicka på Summor på menyn Visa.

    Obs! I Access 2007 klickar du på Summor i gruppen Visa/döljfliken Design.

  4. I den första kolumnen i frågerutnätet lägger du till följande fält i rutan Fält och gör följande val för rutorna Summa och Visa:

    Field: EmpAlias: EmployeeID
    Total: Group By
    Show: Yes
    

    I det här fältet grupperas data efter Anställningsnr.

  5. I den andra kolumnen i frågerutnätet lägger du till följande fält i rutan Fält och gör följande val för rutorna Summa och Visa:

    Field: Freight
    Total: Sum
    Show: Yes
    

    I det här fältet summerar du fraktdata.

  6. I den tredje kolumnen i frågerutnätet skriver du följande uttryck i rutan Fält och gör följande val för rutorna Summa och Visa.

    OBS! I följande exempel används ett understreck (_) i slutet av en rad som ett rad fortsättningstecken. Ta bort understreck från slutet av raden när du skapar det här exemplet igen.

    Field: RunTot: Format(DSum("Freight","Orders","[EmployeeID]<=" _& [EmpAlias] & ""),"$0,000.00")
    Total: Expression
    Show: Yes
    

    Uttrycket i rutan Fält använder en DSumma()-funktion för att summera fältet Frakt när Anställnings-ID är mindre än eller lika med den aktuella Anst. Sedan formateras fältet i dollar.

  7. Kör frågan. Observera att följande poster visas i RunTot-fältet med en löpande summering:

    Employee SumOfFreight RunTot
    -------------------------------------------------
    Davolio, Nancy $8,836.64 $8,836.64
    Fuller, Andrew $8,696.41 $17,533.05
    Leverling,Janet $10,884.74 $28,417.79
    Peacock, Margaret $11,346.14 $39,763.93
    Buchanan, Steven $3,918.71 $43,682.64
    Suyama, Michael $3,780.47 $47,463.11
    King, Robert $6,665.44 $54,128.55
    Callahan, Laura $7,487.88 $61,616.43
    Dodsworth, Anne $3,326.26 $64,942.69