Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 4/2012.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erfahren Sie, wie Sie dynamische Kreuztabellen-Abfragen mit den entsprechenden Spaltenüberschriften versehen.

Techniken

Kreuztabellen-Abfragen, VBA

Voraussetzungen

Access 2000 und höher

Beispieldateien

DynamischeKreuztabellen-Abfragen.mdb

Shortlink

www.access-im-unternehmen.de/846

Kreuztabellen-Abfragen mit Kriterien

André Minhorst, Duisburg

Kreuztabellen-Abfragen erlauben die Gruppierung von Daten nach zwei Kriterien, die als Spalten- und Zeilenköpfe dargestellt werden. Solange Sie eine solche Abfrage manuell und statisch erstellen, können Sie diese mit aussagekräftigen Spaltenüberschriften versehen. Sobald die Daten jedoch etwa per Parameter gefiltert werden sollen, wird es kompliziert, denn auch die Spaltenüberschriften müssen dann dynamisch angepasst werden. Dieser Beitrag zeigt Möglichkeiten, dieses Problem zu lösen.

Wenn Sie eine Kreuztabelle aufbauen, welche die Umsätze für alle Kunden nach Monaten gruppieren und summieren soll, legen Sie für die Spaltenüberschriften der Kreuztabellen-Abfrage einen Ausdruck wie den folgenden fest:

Bestellung: Monat([Bestelldatum]) & "/" & Jahr([Bestelldatum])

Dies führt im Ergebnis zwar zur korrekten Anzeige der Spaltenüberschriften (s. Abb. 1).

pic001.png

Abb. 1: Kreuztabellen-Abfrage mit unsortierten Spaltenüberschriften

Allerdings werden die Überschriften alphabetisch sortiert und nicht nach Jahr und Monat, wie es eigentlich sein sollte.

Nun: Wir haben es der Kreuztabellen-Abfrage ja auch nicht mitgeteilt. Dies erledigen Sie, indem Sie für die Eigenschaft Fixierte Spaltenüberschriften einen Ausdruck wie den folgenden eintragen (s. Abb. 2):

pic002.png

Abb. 2: Entwurf der Kreuztabellen-Abfrage mit fixierten Spaltenüberschriften

"7/2011";"8/2011";"9/2011";...

Das Ergebnis stellt uns zunächst zufrieden, denn die Spaltenüberschriften werden nun nach Jahr und Monat sortiert (s. Abb. 3).

pic003.png

Abb. 3: Kreuztabelle mit korrekt sortierten Spaltenüberschriften

Dabei müssen Sie darauf achten, dass Sie die Spaltenüberschriften den tatsächlich vorhandenen Daten anpassen. Wenn Sie also Daten von 1/2012 bis 12/2012 anzeigen und Spaltenüberschriften für die Monate 7/2012 bis 7/2013 angeben, dann werden zwar die Spalten für 7/2012 bis 6/2013 angezeigt, aber es sind nur die Spalten 1/2012 bis 6/2012 mit Daten gefüllt. Die übrigen Spalten bleiben leer, weil ja aufgrund des Filterkriteriums keine Daten vorliegen. Dies macht auch deutlich, dass die Spaltenüberschriften ungeachtet der enthaltenen Daten angelegt werden.

Wie aber erhalten wir nun sortierte Spaltenüberschriften für beliebig gefilterte Daten?

Die erste Möglichkeit ist es, den Ausdruck für die Spaltenüberschriften so anzupassen, dass er trotz alphabetischer Sortierung die richtige Reihenfolge liefert. Dazu muss das Jahr nach vorn gestellt werden und der Monat immer mit zwei Stellen angezeigt werden. Der Ausdruck für die Spaltenüberschriften sieht dann so aus:

Bestellung: Jahr([Bestelldatum]) & "/"

& Format(Monat([Bestelldatum]);"00")

Das Ergebnis finden Sie in Abb. 4. Die Abfrage zeigt die Spaltenüberschriften nun in der richtigen Reihenfolge an. Allerdings könnte ein Kunde damit unzufrieden sein, weil er sich höchste Perfektion wünscht. Und wenn Sie, wie ich, dem Kunden immer mitteilen, dass man mit Access praktisch jede Anforderung erfüllen kann, möchten Sie vielleicht wissen, wie dieses Problem gelöst wird.

pic004.png

Abb. 4: Richtig sortierte Spaltenüberschriften, allerdings im Format yyyy/mm

Basis-Abfrage

Um gleich einen überschaubareren SQL-Ausdruck zu erhalten, erstellen Sie zunächst eine Basis-Abfrage, die alle benötigten Daten für die Kreuztabellen in einer Abfrage zusammenfasst.

Diese sieht wie in Abb. 5 aus und enthält die Felder KundeID, Firma der Tabelle tblKunden, das Feld Bestelldatum der Tabelle tblBestellungen sowie einen Ausdruck zur Berechnung des Umsatzes auf Basis der Felder Einzelpreis, Anzahl und Rabatt der Tabelle tblBestelldetails:

pic005.png

Abb. 5: Basisabfrage für die Kreuztabelle

Umsatz: [Einzelpreis]*[Anzahl]

*(1-ZCurrency([Rabatt]))

Auf Basis dieser Abfrage erstellen wir die Kreuztabellen-Abfrage. Legen Sie eine neue Abfrage an und fügen Sie die Abfrage qryUmsaetzeNachKundeUndMonat_Base als Datenherkunft hinzu.

Wandeln Sie die Abfrage in der Entwurfsansicht mit dem Kontextmenüeintrag Abfragetyp|Kreuztabellen-Abfrage in eine Kreuztabelle um. Fügen Sie alle Felder der Datenherkunft zum Entwurfsraster hinzu. Das Feld Bestelldatum ersetzen Sie durch den folgenden Ausdruck:

Bestellung: Monat([Bestelldatum]) & "/" & Jahr([Bestelldatum])

Danach stellen Sie den Wert in der Zeile Kreuztabelle für die einzelnen Felder wie folgt ein:

  • KundeID und Firma: Zeilenüberschrift
  • Bestellung: Spaltenüberschrift
  • Umsatz: Wert (hier stellen Sie außerdem den Wert in der Zeile Funktion auf Summe ein)

Die Abfrage sieht nun wie in Abb. 6 aus.

pic006.png

Abb. 6: Aufbau der Kreuztabelle

Geben Sie dann diesen Ausdruck als Wert der Eigenschaft Fixierte Spaltenüberschriften ein:

"7/2011";"8/2011";"9/2011";"10/2011";"11/2011";"12/2011";"1/2012";"2/2012";"3/2012";"4/2012";"5/2012";"6/2012";"7/2012";"8/2012";"9/2012";"10/2012";"11/2012";"12/2012";"1/2013";"2/2013";"3/2013";"4/2013";"5/2013"

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.