Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: ToBu am April 12, 2020, 16:20:10

Titel: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 12, 2020, 16:20:10
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
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: MzKlMu am April 12, 2020, 16:49:03
Hallo,
nimm die normale gefilterte (mit den Kriterien) Abfrage als Datenbasis für die Kreuztabellenabfrage.
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ebs17 am April 12, 2020, 22:00:09
ZitatFunktioniert  ...
Ja ...

Für eine konkrete Antwort bräuchte man  vielleicht(?) eine konkrete Vorgabe => SQL-Anweisung als Text.
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 13, 2020, 18:03:59
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
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 13, 2020, 18:14:33
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
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 17, 2020, 11:58:49
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.
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: DF6GL am April 17, 2020, 13:02:51
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 ......"
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 20, 2020, 18:09:53
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
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: DF6GL am April 21, 2020, 09:47:40
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

Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 22, 2020, 16:13:01
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.
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 25, 2020, 17:43:17
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.
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: DF6GL am April 25, 2020, 19:17:00
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"?

Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 26, 2020, 14:41:15
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.
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: DF6GL am April 26, 2020, 15:50:11
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.
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 26, 2020, 16:36:55
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
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 26, 2020, 16:59:35
Hallo Franz! Leider wird trotz Einfügen von Column(1)... noch immer nicht gefiltert, d.h. es werden keine Werte zurückgebracht!
Bin ratlos!
Viele Grüße ToBu
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: DF6GL am April 26, 2020, 17:23:15
Hallo,

lad die DB hier hoch, komprimiert/repariert, kompiliert und gezippt.


Vielleicht liegt es auch an "fixierten Spaltenüberschriften"
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 27, 2020, 18:13:54
Hallo Franz,
ich hoffe, du kannst die von mir gezippte db öffnen. Habe dort 2 Versionen von KT erstellt. Beide nicht wirklich zufriedenstellend!
Bin auf deine Antwort gespannt. Gruß ToBu
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: DF6GL am April 27, 2020, 19:42:57
Hallo,

anbei...
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 27, 2020, 23:02:28
Hallo Franz,
einfach genial! Wäre ich als Anfänger nie drauf gekommen! Herzlichen Dank! Muss mich unbedingt mehr mit dem Thema Module beschäftigen und viel lernen! Werde jetzt meine db daraufhin umstellen. Hoffentlich klappt das auch bei mir! Nochmals herzlichen Dank und viele Grüße,
ToBu.
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: DF6GL am April 28, 2020, 07:58:29
Hallo,

ich hab das Ding doch schon bei #9 gepostet.....
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 30, 2020, 14:51:01
Hallo Franz,
habe noch eine weitere Frage zur Where-Klausel:
Es gibt in meinem Formular auch noch eine weitere Filterung, die die Auswertungen begrenzt über ein KF Basisjahr.
Leider wirkt der Filter nicht! Was ist nachstehend verkehrt?:

Private Sub Befehl15_Click()
Dim Basisjahr As Long
Dim stDocName As String
Dim strSQl As String
strSQl = "TRANSFORM Sum(Basis1.[Import-t]) AS [SummevonImport-t]" & _
" SELECT Basis1.Jahr, Basis1.[Land(engl)]" & _
" FROM Basis1  Where Basis1.[Land(engl)]  = '" & Me!Wahlland & "' or " & CInt(Me!Wahlland = "Alle") & _
" AND Basis1.Jahr >= '" & Me!Basisjahr & "'" & _
" GROUP BY Basis1.Jahr, Basis1.[Land(engl)]" & _
" PIVOT Basis1.[HS-Nr]"
CurrentDb.QueryDefs![Basis1-Import-t_Kreuztabelle].SQL = strSQl
stDocName = "Silk and Silk Products-Import-t"
DoCmd.OpenReport stDocName, acViewPreview
End Sub

Gruß ToBu
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: DF6GL am April 30, 2020, 15:04:45
Hallo,
falsch ist die Umschließung von "Me!Basisjahr" mit Hochkommata.
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 30, 2020, 15:47:20
Habe die ' ' herausgenommen, aber es wird dennoch nicht gefiltert:
" AND Basis1.Jahr >= " & Me!Basisjahr & " " & _

werden auch noch die beiden " " weggenommen, kommt eine Fehlermeldung: fehlender Ausdruck oder erkennt ME!Basisjahr nicht als gültigen Feldnamen.
Könntest du bitte die Zeile einmal mit Filterungsfunktion schreiben?
Vielen Dank!
Gruß ToBu
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: DF6GL am April 30, 2020, 16:08:33
Hallo


.
.
" AND Basis1.Jahr >= " & nz(Me!Basisjahr,Year(Date))  &  _
.
.



sollte funktionieren, sofern "Basisjahr" ein Formular-Textfeld ist und eine Jahreszahl enthält.  Die nz()-Funktion sorgt nur dafür, dass das aktuelle Jahr benutzt wird, wenn "Basisjahr" leer ist. Ansonsten gäbe es in diesem Fall eine Fehlersituation.


Auf "Jahr" als Benennung für ein Tabellenfeld würde ich verzichten, weil es zu Komplikationen mit der Jahr()-Funktion (Year()-Funktion)  kommen könnte.
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 30, 2020, 17:56:14
Es funktioniert leider auch nicht!
Basisjahr ist der Name in einem Kombinationsfeld, dessen Inhalt numerische Jahreszahlen sind.
Kann es sein, dass in einer Kt-Abfrage nur eine begrenzte Anzahl von Bedingungen realisiert werden?
Im Kt-Abfrageentwurf zeigen sich mittlerweile 3 Bedingungsfelder: für das Wahlland, 0 <> falsch und Basisjahr.
Mir scheint, dass mehr als 2 Bedingungen nicht ausgeführt und somit alle Jahre ungefiltert ausgegeben werden.
Gruß ToBu
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: DF6GL am April 30, 2020, 19:02:35
Hallo,

nein, die Anzahl der Kriterien spielt hier keine Rolle.

Zeige mal die Datensatzherkunft des Kombis.


PS:

sehe gerade, dass da eine OR-Verknüpfung vorhanden ist. Diese OR-Bedingung muss geklammert werden:

" FROM Basis1  Where (Basis1.[Land(engl)]  = '" & Me!Wahlland & "' or " & CInt(Me!Wahlland = "Alle") & _
") AND Basis1.Jahr >= '" & Me!Basisjahr & "'" & _
Titel: Re: Kreuztabellenabfrage unter Kriterien variabilisieren
Beitrag von: ToBu am April 30, 2020, 22:17:51
Hallo Franz,
ja, das ist es ! 100 Punkte!!!
Jetzt läuft es optimal!
Vielen Dank für Deine Hilfe!
Gruß ToBu.