Microsoft Office Online
Logg på Mitt Office Online (Hva er dette?) | Logg på

 
 
Microsoft Office Access
Søk
Søk
 
 
 
 
Advarsel! Du viser denne siden med en webleser som ikke støttes. Dette webområdet fungerer best med Microsoft Internet Explorer 6.0 eller senere, Firefox 1.5 eller Netscape Navigator 8.0 eller senere. Lær mer om lesere som støttes.

Telle i rapporter
 
Bilde av spaltelogo

20. juli 2004

av Sal Ricciardi

Hvor mange ordrer mottok du i forrige rapporteringsperiode? I denne leksjonen lærer du hvordan du teller artiklene og inkluderer denne verdien i Access-rapportene.




Gjelder
Microsoft Office Access 2003
Microsoft Access 2000 og 2002


Spørsmål: Hvordan viser jeg en telling av antallet artikler i en rapport?

I den forrige leksjonen drøftet vi hvordan du beregner og plasserer summer i rapportene (se Summere i rapporter.) Noen ganger trenger du ikke bare å summere en verdi, men også telle antallet artikler. Du vil for eksempel kanskje vise antallet bestillinger av et bestemt produkt i tillegg til en sum for de individuelle salgsbeløpene. Du kan telle bestillingene ved hjelp av mengdefunksjonen Antall. Access bruker SQL (strukturert spørringsspråk) til å foreta en spørring i databasen, og Antall er én av SQL-mengdefunksjonene du kan bruke til å utføre beregninger i kolonneverdier.

Bruke Antall-funksjonen

Anta at du har en Salg per produkt-rapport og vil legge til en telling for antallet bestillinger. Du teller antallet bestillinger ved å opprette en tekstbokskontroll og sette Kontrollkilde-egenskapen til et uttrykk som ser slik ut:


=Count(*)

Stjernen forteller Access at alle radene i Detalj-inndelingen skal telles, men resultatet avhenger av hvor du plasserer tekstboksen. I likhet med når du beregner en sum, er det viktig hvilken inndeling i rapporten du plasserer tekstboksen i, ettersom Access bestemmer hvordan antallet skal beregnes basert på rapportinndelingen du velger. Hvis du plasserer tekstbokskontrollen i toppteksten eller bunnteksten for gruppe, vil antallet bare inkludere detaljradene for gruppen. Hvis du plasserer tekstbokskontrollen i toppteksten eller bunnteksten i rapport, inkluderer antallet alle detaljradene for hele rapporten. I diagrammet nedenfor vises uttrykket Antall(*) i egenskapsboksen Kontrollkilde for tekstboksen, og totalsummen som genereres av Antall-funksjonen, vises i bunnteksten i rapport.

Antall vist i bunntekst i rapport og Antall-funksjon vist i egenskapsboks

Se følgende utvidbare del for detaljerte, trinnvise instruksjoner som viser hvordan du oppretter et antall i en bunntekst i en rapport:

VisTrinnvis: Slik plasserer du et antall i en bunntekst i en rapport

Slik åpner du rapporten i utformingsvisning  

  1. Klikk Rapporter under Objekter i databasevinduet.
  2. Klikk rapporten, og klikk deretter Utforming i databasevinduet.

Slik oppretter du tekstbokskontrollen  

  1. Klikk Topptekst/bunntekst i rapportVis-menyen. Kontroller at dette alternativet forblir valgt. Det vil sikre at inndelingene Topptekst i rapport og Bunntekst i rapport vises i rapportutformingen.
  2. Klikk Tekstboks-verktøyet i verktøykassen.

     Obs!   Hvis verktøykassen ikke vises, klikker du VerktøykasseVis-menyen.

  3. Dra pekeren til inndelingen Bunntekst i rapport for å opprette tekstboksen. Hvis det vises en etikett ved siden av tekstboksen, sletter du den.

Slik angir du Kontrollkilde-egenskapen for tekstboksen  

  1. Høyreklikk tekstboksen, og klikk deretter Egenskaper på hurtigmenyen.
  2. Klikk kategorien Data.
  3. Du kan endre verdien for Kontrollkilde-egenskapen ved å skrive inn =Antall(*) i egenskapsboksen Kontrollkilde.
  4. Lukk egenskapsarket.
  5. Klikk LagreFil-menyen, og lukk deretter rapporten.

Se følgende utvidbare del for detaljerte, trinnvise instruksjoner som viser hvordan du oppretter et antall i en bunntekst for en gruppe:

VisTrinnvis: Slik plasserer du et antall i en bunntekst for en gruppe

Slik åpner du rapporten i utformingsvisning  

  1. Klikk Rapporter under Objekter i databasevinduet.
  2. Klikk rapporten, og klikk deretter Utforming i databasevinduet.

Slik viser du bunnteksten for en gruppe  

  1. Klikk Sortering og grupperingVis-menyen. Når dialogboksen Sortering og gruppering vises, klikker du feltet eller uttrykket for gruppen du vil vise bunnteksten for, og deretter setter du egenskapen BunntekstForGruppe til Ja. Legg merke til at inndelingen Bunntekst for gruppe vises i utformingsvinduet.
  2. Lukk dialogboksen Sortering og gruppering.

Slik oppretter du et nytt gruppenivå  

  1. Klikk Sortering og grupperingVis-menyen. Når dialogboksen Sortering og gruppering vises, klikker du i den første tilgjengelige tomme raden i Felt-/Uttrykk-kolonnen, og deretter feltet eller uttrykket du vil gruppere etter. Sett egenskapen BunntekstForGruppe til Ja. Legg merke til at den nye Bunntekst for gruppe-inndelingen vises i utformingsvinduet. Tittelen på inndelingen er utledet fra navnet på feltet eller uttrykket gruppenivået er basert på. Hvis du for eksempel grupperer etter Produktnavn-feltet, er tittelen Bunntekst for Produktnavn.
  2. Du kan endre rekkefølge på gruppenivåene ved å klikke og dra radvelgeren for det merkede gruppenivået oppover eller nedover i listen.
  3. Lukk dialogboksen Sortering og gruppering.

Slik oppretter du tekstbokskontrollen  

  1. Klikk Tekstboks-verktøyet i verktøykassen.

     Obs!   Hvis verktøykassen ikke vises, klikker du VerktøykasseVis-menyen.

  2. Dra pekeren til inndelingen Bunntekst for gruppe for å opprette tekstboksen. Hvis det vises en etikett ved siden av tekstboksen, sletter du den.

Slik angir du Kontrollkilde-egenskapen for tekstboksen  

  1. Høyreklikk tekstboksen, og klikk deretter Egenskaper på hurtigmenyen.
  2. Klikk kategorien Data.
  3. Du kan endre verdien for Kontrollkilde-egenskapen ved å skrive inn =Antall(*) i egenskapsboksen Kontrollkilde.
  4. Lukk egenskapsarket.
  5. Klikk LagreFil-menyen, og lukk deretter rapporten.

Du kan også bruke et alternativt skjema som angir feltet med verdier du vil telle. Følgende uttrykk teller for eksempel antallet verdier i OrdreID-kolonnen:


=Count([OrderId])

Når du angir et felt på denne måten, inkluderer ikke det resulterende antallet rader der feltverdien er ukjent (en nullverdi), så du bør vanligvis velge et felt som alltid har en verdi. I dette tilfellet er OrdreID-feltet et godt valgt, ettersom det er et obligatorisk felt som alltid vil ha en verdi.

Du bør imidlertid være varsom med bruken av feltnavnargumentet. Foretrukket metode for telling av radene er å sende Antall-funksjonen en stjerne i parenteser, ettersom Access gjenkjenner dette spesialformatet av Antall-uttrykket og har innebygde optimaliseringer som gjør at resultatet kommer raskere.

Arbeide med manglende informasjon

En vanlig kilde til forvirring når det gjelder telling, og også gjennomsnittsberegning, er hvordan manglende informasjon håndteres i Access. Tenk deg for eksempel at du vil registrere kostnaden for et nytt produkt du har tenkt å selge, men at du ikke har nøyaktig kostnadsinformasjon ennå. Et databasebehandlingssystem som ikke støtter en metode for merking av informasjon som manglende, kan tvinge deg til å registrere kostnaden som null til den faktiske kostnaden blir tilgjengelig. Dette vil selvsagt bli unøyaktig, ettersom kostnaden ikke er null (så sant du er en lovlydig borger). I en viss periode er kostnaden ganske enkelt ukjent.

Null representerer derfor bare fraværet av informasjon. Det representerer ikke en null, eller noen verdi i det hele tatt, men en manglende verdi. Access støtter denne ideen om manglende informasjon fordi begrepet er særdeles viktig for integriteten til en database. I den virkelige verden mangler vi ofte informasjon, selv om det bare er midlertidig. En database som gir en modell av en enhet i den virkelige verden, for eksempel et firma, må derfor kunne registrere informasjon som manglende. Du kan selvsagt velge ikke å registrere rader til all viktig informasjon er tilgjengelig. Access støtter dette ved at du har mulighet til å definere et felt som obligatorisk. Når en verdi for et felt er obligatorisk, kan ikke feltet inneholde en nullverdi, og du kan ikke lagre posten før du har angitt en gyldig verdi.

Obligatorisk-egenskapen for et felt satt til Ja

Så hvordan har dette innvirkning på Antall-funksjonen? Hvis du velger å telle verdiene i et felt som tillater nullverdier, telles ikke radene som inneholder en nullverdi. De regnes som manglende, men ikke null. Dette kan føre til uventede resultater hvis du for eksempel bruker verdien som blir returnert i en slik telling, som en del av en gjennomsnittsberegning. Hvis du for eksempel bruker Antall([Artikkelkostnad]) og tabellen har 108 poster, men 18 av disse inneholder nullverdier, inkluderes bare de 90 postene som ikke inneholder en nullverdi.

Når du sender Antall-funksjonen en stjerne i parenteser, telles rader selv om de inneholder nullverdier.

Slik gjør du det når det ikke finnes noen poster

Hvis du begynner å selge et nytt produkt, vil det sannsynligvis være en viss periode (forhåpentligvis kort) der du ikke har solgt noe ennå. Du bør derfor vurdere muligheten for at rapporten ikke har noe å rapportere, det vil si ingen detaljposter, og Antall-funksjonen har kanskje ikke noe å telle. Du kan håndtere en slik forekomst på en god måte ved å legge til noen få linjer nøye plassert VBA-kode (Microsoft Visual Basic® for Applications) i rapporten. VBA er programmeringsspråket som brukes i Access.

Du legger til VBA-koden i rapportens hendelsesprosedyre  (hendelsesprosedyre: En prosedyre som automatisk utføres som svar på en hendelse initialisert av brukeren eller programkode, eller som er utløst av systemet.) VedIngenData. Hendelsen (hendelse: En handling som gjenkjennes av et objekt, for eksempel et museklikk eller tastetrykk, som du kan definere et svar for. En hendelse kan forårsakes av en brukerhandling eller en Visual Basic-setning, eller den kan utløses av systemet.) VedIngenData aktiveres hver gang det viser seg at en rapport ikke inneholder poster. Du kan plassere kode i hendelsesprosedyren som viser en melding og avbryter utskriften av rapporten. Koden kjøres når rapporten kjøres uten poster.

Gjør følgende for å opprette koden:

Slik åpner du rapporten i utformingsvisning  

  1. Klikk Rapporter under Objekter i databasevinduet.
  2. Klikk rapporten, og klikk deretter Utforming i databasevinduet.

Slik redigerer du hendelsesprosedyren VedIngenData  

  1. Klikk Velg rapportRediger-menyen.
  2. Klikk EgenskaperVis-menyen, og velg deretter kategorien Hendelse.
  3. Klikk egenskapsboksen Ved ingen data. Klikk deretter ellipseknappen (...) når den vises.
  4. Når dialogboksen Makroverktøy vises, klikker du Kodeverktøy og deretter OK.
  5. Skriv inn følgende kode i Visual Basic-redigering (Visual Basic-redigering: Et miljø der du kan skrive ny og redigere eksisterende Visual Basic for Applications-kode og prosedyrer. Visual Basic-redigering inneholder et fullstendig sett verktøy for feilsøking for å finne syntaks-, kjøretids- og logikkproblemer i koden.) slik at Rapport_VedIngenData-prosedyren vises nøyaktig slik når du er ferdig:
    Private Sub Report_NoData(Cancel As Integer)
      MsgBox "There are no records to report", vbExclamation, "No Records"
      Cancel = True
    End Sub
    

Når du er ferdig, klikker du LagreFil-menyen. Deretter klikker du Avslutt og gå tilbake til Microsoft Office AccessFil-menyen. Til slutt lukker du alle vinduer bortsett fra databasevinduet. Når du nå kjører rapporten og det ikke vises noen data, vises følgende melding:

Meldingsboks som vises under hendelsesprosedyren VedIngenData

Prosedyren Rapport_VedIngenData bruker Meldingsboks-funksjonen til å vise meldingen "Ingen poster å rapportere" og en OK-knapp. Når du klikker OK, angir Cancel=True-linjen i prosedyren at rapporten skal avbrytes. Cancel er et argument som automatisk sendes til hendelsesprosedyren, og sjekkes automatisk i Access når hendelsesprosedyren fullføres.

Plassere et antall i topptekst eller bunntekst på en side

Du vil kanskje plassere et antall i rapporten nederst på hver side i stedet for per gruppe eller per rapport. Du kan ikke bruke SQL-mengdefunksjoner i topptekst eller bunntekst på en side, men som vi drøftet i den forrige leksjonen (se Summere i rapporter), kan du opprette sidesummer ved å skrive litt VBA-kode.

Antall vist i bunntekst på en side i en rapport

Dette gjør du ved å initialisere en teller ved å sette den til null under Topptekst på side øverst på siden, som forberedelse til akkumulering av antallet. Deretter inkrementerer du telleren i Skriv ut-hendelsen under Detalj, slik at verdien 1 legges til for hver detaljrad under Detalj. Til slutt viser du telleren i en tekstboks i bunnteksten på siden. Når neste side skrives ut, blir prosessen gjentatt. Koden ser slik ut:


Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
  If PrintCount = 1 Then
    txtPageCount = txtPageCount + 1
  End If
End Sub

Private Sub PageHeaderSection_Print(Cancel As Integer, PrintCount As Integer)
  txtPageCount = 0
End Sub

Se følgende utvidbare del for detaljerte, trinnvise instruksjoner om oppretting av et antall nederst på hver side:

VisTrinnvis: Slik plasserer du et antall nederst på hver side i en rapport

Slik åpner du rapporten i utformingsvisning  

  1. Klikk Rapporter under Objekter i databasevinduet.
  2. Klikk rapporten, og klikk deretter Utforming i databasevinduet.

Slik oppretter du tekstbokskontrollene  

  1. Klikk Topptekst/bunntekst på sideVis-menyen. Kontroller at dette alternativet forblir valgt. Det vil sikre at inndelingene Topptekst på side og Bunntekst på side vises i rapportutformingen.
  2. Klikk Tekstboks-verktøyet i verktøykassen.

     Obs!   Hvis verktøykassen ikke vises, klikker du VerktøykasseVis-menyen.

  3. Dra pekeren til inndelingen Bunntekst på side for å opprette tekstboksen. Hvis det vises en etikett ved siden av tekstboksen, sletter du den.
  4. Merk tekstboksen, og klikk deretter EgenskaperVis-menyen.
  5. Klikk kategorien Alle, og skriv deretter inn txtPageCount i egenskapsboksen Navn.
  6. Lukk egenskapsarket.

Slik angir du Skriv ut-egenskapen for topptekst på siden  

  1. Dobbeltklikk kantlinjen for topptekst på siden. Egenskapsarket vises.
  2. Kontroller at tittellinjen på egenskapsarket inkluderer TopptekstPåSideInndeling. Hvis den ikke gjør det, klikker du kategorien Alle, klikker egenskapsboksen Navn, klikker pilen som vises, og klikker deretter TopptekstPåSideInndeling i listen.
  3. Klikk kategorien Alle, klikk egenskapsboksen Ved utskrift, og klikk deretter ellipseknappen (...) som vises.
  4. Klikk Kodeverktøy i dialogboksen Velg verktøy, og klikk deretter OK.
  5. Rediger prosedyren TopptekstPåSideInndeling_SkrivUt slik at den ser nøyaktig slik ut:
    Private Sub PageHeaderSection_Print(Cancel As Integer, PrintCount As Integer)
      txtPageCount = 0
    End Sub

  6. Klikk Avslutt og gå tilbake til Microsoft Office AccessFil-menyen.
  7. Lukk egenskapsarket.

Slik angir du Skriv ut-egenskapen for Detalj-inndelingen  

  1. Dobbeltklikk kantlinjen for Detalj-inndelingen. Egenskapsarket vises.
  2. Kontroller at tittellinjen på egenskapsarket inkluderer Detalj. Hvis den ikke gjør det, klikker du kategorien Alle, klikker egenskapsboksen Navn, klikker pilen som vises, og klikker deretter Detalj i listen.
  3. Klikk kategorien Alle, klikk egenskapsboksen Ved utskrift, og klikk deretter ellipseknappen (...) som vises.
  4. Klikk Kodeverktøy i dialogboksen Velg verktøy, og klikk deretter OK.
  5. Rediger prosedyren Detalj_SkrivUt slik at den ser nøyaktig slik ut:
    Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
      If PrintCount = 1 Then
        txtPageCount = txtPageCount + 1
      End If
    End Sub
    

  6. Klikk Avslutt og gå tilbake til Microsoft Office AccessFil-menyen.
  7. Lukk egenskapsarket.
  8. Klikk LagreFil-menyen, og lukk deretter rapporten.

Telle (nummerere) artiklene

Noen ganger vil du nummerere artiklene i rapporten. I rapporten Salg per vare vil du kanskje at det skal stå 1 foran den første artikkelen i en produktgruppe, 2 foran den andre artikkelen og så videre. Når neste produktgruppe starter, begynner tellingen på nytt, og 1 står foran det første elementet. Jeg drøftet teknikken for dette i spalten Summere i rapporter (30. mai 2004), under Tips: Nummerere radene. Ettersom det er en vanlig forespørsel i forbindelse med telling i rapporter, vil jeg også kort gå gjennom det her.

Nummerere elementene i en rapport

Du kan nummerere artiklene i rapporten ved hjelp av en beregnet kontroll og egenskapen LøpendeSum. Først oppretter du en tekstboks og setter egenskapen Kontrollkilde til =1.

Deretter angir du LøpendeSum-egenskapen for tekstboksen. Hvis du vil at nummereringen skal starte på nytt for hver gruppe, setter du egenskapen til Over grupper. Hvis du vil akkumulere en løpende sum for hele rapporten, setter du egenskapen til Over alle. Hvis du vil ha mer informasjon om løpende summer og LøpendeSum-egenskapen, se delen Beregne løpende summer (akkumulerte totalsummer) i kolonnen Summere i rapporter (30. mai 2004).

Uttrykket setter verdien for tekstbokskontrollen til 1. LøpendeSum-egenskapen brukes til å akkumulere verdien, og derfor økes verdien i tekstboksen med én for hver rad. Rapporten Salg per produkt med Løpende sum og Nummererte rader i eksempeldatabasen illustrerer denne metoden. Hvis du setter inn et punktum (.) i egenskapsboksen Format, vises det et punktum på slutten av nummeret.

Se følgende utvidbare del for detaljerte, trinnvise instruksjoner om hvordan du nummererer artiklene:

VisTrinnvis: Slik nummerer du artiklene i en rapport

Slik åpner du rapporten i utformingsvisning  

  1. Klikk Rapporter under Objekter i databasevinduet.
  2. Klikk rapporten, og klikk deretter Utforming i databasevinduet.

Slik oppretter du tekstbokskontrollen  

  1. I Detalj-inndelingen klikker du der du vil at nummeret skal vises.
  2. Klikk Tekstboks-verktøyet i verktøykassen.

     Obs!   Hvis verktøykassen ikke vises, klikker du VerktøykasseVis-menyen.

  3. I Detalj-inndelingen for rapporten drar du pekeren for å opprette en tekstboks, samtidig som du kontrollerer at den er bred nok til å få plass til det største artikkelnummeret. Hvis du for eksempel vil bruke hundre bestillinger, må du ha plass til minst tre tegn (100). Hvis en etikett vises ved siden av tekstboksen, sletter du etiketten.
  4. Merk tekstboksen, og klikk deretter EgenskaperVis-menyen.
  5. Klikk kategorien Alle, og skriv deretter inn txtItemNumber i egenskapsboksen Navn.
  6. Klikk kategorien Data, og velg deretter Over gruppe i egenskapsboksen Løpende sum.
  7. Skriv inn =1 i egenskapsboksen Kontrollkilde.
  8. Klikk kategorien Format, og sett deretter inn #. i egenskapsboksen Format.
  9. Lukk egenskapsarket.
  10. Klikk LagreFil-menyen, og lukk deretter rapporten.

Hva nå?

Hva bør jeg skrive om neste gang? Send kommentarer, spørsmål, tips og forslag til msaccess@microsoft.com.

Ytterligere informasjon

  • Hvis du vil ha informasjon om summering i rapporter, se spalten Summere i rapporter.
  • En utmerket innføring i SQL (strukturert spørringsspråk) er The Practical SQL Handbook: 4th Edition av Judith Bowman, Sandra Emerson og Marcy Darnovsky, Pearson Education, 2001.
  • Du finner en variert og svært nyttig samling løsninger og forslag for Access i Access Cookbook av Ken Getz, Paul Litwin og Andy Baron, O'Reilly Media, Inc., 2003.
  • Du finner en utmerket, teknisk drøfting av mange emner som gjelder spørringer og rapporter, i Access 2002 Desktop Developer's Handbook av Ken Getz, Paul Litwin og Mike Gunderloy, SYBEX, Inc., 2001.

Om forfatteren

Sal Ricciardi er ansatt i Microsoft Office User Assistance-gruppen.

annonse