Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Kreuztabellenabfrage unter Kriterien variabilisieren

Begonnen von ToBu, April 12, 2020, 16:20:10

⏪ vorheriges - nächstes ⏩

ToBu

Besteht die Möglichkeit, in einer Kreuztabellenabfrage unter Kriterien eine Variable für ein Feld - Zeilenüberschrift - zu setzen, die Bezug nimmt auf den Inhalt eines Namen eines KombinationsListenfeldes in einem Formular z.B. [forms]![Formularname]![Listenfeldname]? Funktioniert bei "normaler" Abfrage! Aber bei Wechsel zur Kreuztabellenabfrage leider nicht! Kann mir jemand einen Tipp geben?
Ostergrüße von ToBu

MzKlMu

Hallo,
nimm die normale gefilterte (mit den Kriterien) Abfrage als Datenbasis für die Kreuztabellenabfrage.
Gruß Klaus

ebs17

ZitatFunktioniert  ...
Ja ...

Für eine konkrete Antwort bräuchte man  vielleicht(?) eine konkrete Vorgabe => SQL-Anweisung als Text.
Mit freundlichem Glück Auf!

Eberhard

ToBu

Hier der SQL-Satz:
TRANSFORM First(Zwischenspeicherung.[Import-t]) AS [ErsterWertvonImport-t]
SELECT Zwischenspeicherung.Jahr, Zwischenspeicherung.[Land(engl)]
FROM [AuswertungsZeitraum ab] INNER JOIN Zwischenspeicherung ON [AuswertungsZeitraum ab].Jahr = Zwischenspeicherung.Jahr
WHERE (((Zwischenspeicherung.[Land(engl)])=IIf([forms]![Berichte öffnen]![Wahlland]="Alle",[Länder].[Land(engl)],[forms]![Berichte öffnen]![Wahlland])))
GROUP BY Zwischenspeicherung.Jahr, Zwischenspeicherung.[Land(engl)]
ORDER BY Zwischenspeicherung.Jahr DESC , Zwischenspeicherung.[Land(engl)]
PIVOT Zwischenspeicherung.[HS-Nr];

Fehlermeldung: erkennt Kriterium nicht als Feldnamen bzw. Ausdruck.
Habe dann in einer zugrundeliegenden Tabellenabfrage das Kriterium erfolgreich gesetzt. Die Kreuztabellenabfrage ohne Kriterien meldet dennoch den gleichen Fehler! Bin ratlos!
Gruß Thomas

ToBu

PS: Da ich nicht mit Formularbezug weiterkam, habe ich die entsprechende Abfrage als Tabellenerstellungsabfrage Basis1Zwischenspeicherung gewählt, auf die die Kreuztabellenabfrage zugreift. Etwas umständlich, aber funktioniert.
Deshalb möchte ich eine komfortablere Lösung bekommen - ohne Zwischenspeicherung!
Daher eben meine Frage, ob es überhaupt möglich ist, bei Kreuztabellenabfragen sozusagen "variabel" "vorzufiltern"?
Gruß Thomas

ToBu

Zitat von: MzKlMu am April 12, 2020, 16:49:03
Hallo,
nimm die normale gefilterte (mit den Kriterien) Abfrage als Datenbasis für die Kreuztabellenabfrage.

DF6GL

Hallo,

setz das SQL-Statement (SQL-String)  mit VBA-Code zusammen und weise den String der Kreutztabellenabfrage zu:

Querydefs!Abf_KTAbfrage.SQL = "Transform..............WHERE [Land(engl)] Like '" & IIf (Me![Wahlland]="Alle","*" ,Me![Wahlland])  &  "' GROUP BY ......"
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ToBu

Erstmal vielen Dank! Aber das ist mir als VBA-Laien zu hoch! Werde aber mal probieren, ob ich da so etwas einbauen kann! Mal schauen!!! Beste Grüße ToBu

DF6GL

Hallo,

dann hier mal ausführlich (trotzdem Luftcode!) mit einem Button ("btnShowKTA") im Formular, in dem das Kombi "Wahlland" liegt:


Private Sub btnShowKTA_Click ()

Dim strSQL AS String
strSQL = "TRANSFORM First(Zwischenspeicherung.[Import-t]) AS [ErsterWertvonImport-t] " & _
          " SELECT Zwischenspeicherung.Jahr, Zwischenspeicherung.[Land(engl)] " & _
          " FROM [AuswertungsZeitraum ab] INNER JOIN Zwischenspeicherung ON [AuswertungsZeitraum ab].Jahr = Zwischenspeicherung.Jahr "  & _
          " WHERE [Land(engl)] Like '" & IIf (Me![Wahlland]="Alle","*" ,Me![Wahlland])  &  "'" & _
          " GROUP BY Zwischenspeicherung.Jahr, Zwischenspeicherung.[Land(engl)] " &  _
          " ORDER BY Zwischenspeicherung.Jahr DESC , Zwischenspeicherung.[Land(engl)] " & _
          " PIVOT Zwischenspeicherung.[HS-Nr] "
Currentdb.Querydefs!qry_DeineKTAbfrage.SQL = strSQL
Docmd.OpenQuery "qry_DeineKTAbfrage"   'Nur zum Test der Ansicht

End Sub

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ToBu

Vielen Dank, Franz, für den SQL-String! Werde mir den mal durchdenken und ausprobieren, wenn ich etwas mehr Ruhe habe! Im Moment bin ich anderweitig beschäftigt. Aber toll, dass du mir hiermit helfen willst! Bis bald und viele Grüße,
ToBu.

ToBu

Hallo Franz, habe die Where-Klausel eingefügt. Erfolg: Die Kreuztabellenabfrage wird korrekt ausgeführt! Aber es kommen die Feldüberschriften ohne die gewünschten Dateninhalte! Was fehlt da noch, damit das [Wahlland] auch als Kriterium akzeptiert wird?
Schönes Wochenende und Gruß, ToBu.

DF6GL

Hallo,

versteh nicht...

ZitatDie Kreuztabellenabfrage wird korrekt ausgeführt
ZitatAber es kommen die Feldüberschriften ohne die gewünschten Dateninhalte

Dann wäre das doch nicht korrekt?

Zitat, damit das [Wahlland] auch als Kriterium akzeptiert wird?

versteh ich gar nicht..   Wird denn nicht gefiltert?

Wie lautet die Datensatzherkunft des Listenfeldes "Wahlland"?

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ToBu

Hallo Franz,
die zugrunfe liegende Tabelle heißt Länder.
im Entwurfmodus des Kombinationesfeldes namens Wahlland steht unter Datenherkunft:
SELECT Länder.[Land(Eurostat)], Länder.[Land(engl)] FROM Länder ORDER BY [Land(engl)];
Das Komifeld funktioniert richtig! Bei meiner Hilfskrücke einer TabellenErstellunsgabfrage zur Zwischenspeicherung funktioniert unter Kriterien:
[forms]![Berichte öffnen]![Wahlland] einwandfrei! Ändere ich allerdings diese TabellenErstellungsabfrage in eine "normale" Abfrage ceteris paribus und setze darauf bezugnehmend die KreuzTabellenAbfrage an (anstelle Tabelle Zwischenspeicherung), kommt eben eine Fehlermeldung: Falscher Ausdruck oder Erkenne Feldname nicht oder so ähnlich! Für mich ist das nicht zu verstehen!!! (Halt: "E"nde "D"er "V"ernunft!).
Weißt du weiteren Rat?
Schönen Sonntag noch!
Gruß ToBu.

DF6GL

Hallo,

der Kriteriumwert für den Vergleich steht in der 2. Spalte des Listenfeldes, wenn ich das richtig sehe.
Dann sollte die Where-Condition  so lauten:

Zitat
WHERE [Land(engl)] Like '" & IIf (Me![Wahlland].Column(1)="Alle","*" ,Me![Wahlland].Column(1))  &  "'" & _


ZitatÄndere ich allerdings diese TabellenErstellungsabfrage in eine "normale" Abfrage ceteris paribus und setze darauf bezugnehmend die KreuzTabellenAbfrage an

Formular-Bezüge werden bei einer KT-Abfrage nicht aufgelöst Wenn zuerst eine Tbl-Erst.-Abfrage ausgeführt wird, funktioniert ein Formularbezug in der Where-Condition.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ToBu

Vielen Dank, Franz! Endlich mal eine Aussage, dass bei KT-Abfragen Formularbezüge nicht funktionieren können, warum auch immer!
Die Me-Funktion ist für mich neu und noch nicht richtig zu begreifen. Ist sie denn nicht auch ein Formularbezug? Was genau ist der Unterschied?
Werde gleich mal probieren, wie das mit der Column-Condition funktioniert!
Und melde mich dann nochmals!
Gruß ToBu