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
Hallo,
nimm die normale gefilterte (mit den Kriterien) Abfrage als Datenbasis für die Kreuztabellenabfrage.
ZitatFunktioniert ...
Ja ...
Für eine konkrete Antwort bräuchte man vielleicht(?) eine konkrete Vorgabe => SQL-Anweisung als Text.
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
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
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.
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 ......"
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
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
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.
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.
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"?
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.
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.
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
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
Hallo,
lad die DB hier hoch, komprimiert/repariert, kompiliert und gezippt.
Vielleicht liegt es auch an "fixierten Spaltenüberschriften"
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
Hallo,
anbei...
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.
Hallo,
ich hab das Ding doch schon bei #9 gepostet.....
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
Hallo,
falsch ist die Umschließung von "Me!Basisjahr" mit Hochkommata.
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
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.
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
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 & "'" & _
Hallo Franz,
ja, das ist es ! 100 Punkte!!!
Jetzt läuft es optimal!
Vielen Dank für Deine Hilfe!
Gruß ToBu.