September 23, 2021, 13:34:28

Neuigkeiten:

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


Einfachen Mittelwert in einem Bericht anzeigen

Begonnen von BikeArno, März 15, 2021, 10:00:30

⏪ vorheriges - nächstes ⏩

BikeArno

Zitat von: MzKlMu am April 13, 2021, 17:15:50Bitte die Fehlermeldungen immer vollständig zitieren.

Die Fehlermeldung lautet #Fehler.

Ich wollte oben noch die Frage ergänzen, wie man den Code so ergänzen kann, dass Werte für eine Mittelwertsberechnung nur dann hinzugezogen werden, wenn diese in einem Wertebereich (also z.B. zwischen 1.000 und 5.000) liegen. Mit einem AND kann das ja nicht funktionieren...

MzKlMu

Hallo,
natürlich geht das mit And.
=DomMittelwert("Betrag";"qry_Datensatz";"Betrag >=1000 And Betrag <=5000 AND KriteriumA= True AND KriteriumB like 'DS*'")Wenn True aus einem Ja/Nein Feld kommt, so entspricht True der Zahl -1, dann müssen die Hochkomma entfallen.
Runden habe ich mir jetzt gespart.
Gruß
Klaus

BikeArno

Hallo Klaus,

es bleibt bei meiner Fehlermeldung (#Fehler), wenn ich den Code anwende, ohne die Zahlen für das Kriterium in Hochkomma zu setzen:
 
=DomMittelwert("Betrag";"qry_Datensatz";"Betrag >=1000 And Betrag <=5000 AND KriteriumA= True AND KriteriumB like 'DS*'")
Der Fehler bleibt auch, wenn ich  nur ein Kriterium anwende (also z.B. <=5000).

Setze ich hingegen eine Zahl (<='5000') in Hochkomma, kommt kein #Fehler, aber es wird nicht das korrekte Ergebnis berechnet (Mittelwert wird größer, obwohl ich den Wertebereich eingegrenzt habe). Setze ich beide Zahlen des Wertebereichs in Hochkomma, erscheint wieder ein #Fehler. Ratlos.


MzKlMu

Gruß
Klaus

BikeArno

Zitat von: MzKlMu am April 14, 2021, 09:50:36zeige bitte mal die Abfrage (SQL).

So:

=Runden(DomMittelwert("Betrag";"qry_Datensatz";"Betrag >=300 AND Betrag<=3000 AND KriteriumA='ok' AND KriteriumB like 'DS*'");2)
Der Wert "true" ist inzwischen durch "ok" ersetzt, deshalb in Hochkomma.

MzKlMu

Hallo,
nein, das ist doch kein SQL einer Abfrage.
Ich meine den SQL Text der Abfrage qry_Datensatz.

Wo kommt denn das Ok her, wird das als Text genau so eingetragen ?
Gruß
Klaus

BikeArno

Die Datengrundlage kommt ursprünglich aus einer Union-Abfrage. Diese wird dann nochmals mit einer anderen Abfrage per Select kombiniert. Das Feld "Betrag" wird dabei aber nicht verändert. Ich befürchte aber, dass der "Betrag", also die "Zahlen", vom Datenzuliefererer als Text formatiert sind. Kann man diese in der o.g. Abfrage als Zahl umwandeln um zu schauen, ob das eine Lösung bringt? (Merkwürdig aber, dass eine (wenn auch fehlerhafte) MW-Berechnung stattfindet, wenn die "Zahlen" in Hochkomma stehen; aber nur mit einem Kriterium.)

Das OK über die o.g Abfrage als Text "Ok" vergeben.

 

MzKlMu

Hallo,
warum zeigst Du nicht diese Abfrage ?

Der Betrag ist vermutlich Text, das muss als Zahl umgewandelt werden.
ZitatMerkwürdig aber, dass eine (wenn auch fehlerhafte) MW-Berechnung stattfindet,
Access ist da tolerant bei Berechnungen, aber ein Vergleich mit <= bzw. >= funktioniert bei Text nicht.
Da wäre z.B. "60" gößer als "500".

Versuche es mal so:
=Runden(DomMittelwert("Betrag";"qry_Datensatz";"ZCurrency(Betrag) >=300 AND ZCurrency(Betrag) <=3000 AND KriteriumA='ok' AND KriteriumB like 'DS*'");2)
Gruß
Klaus

BikeArno

Zitat von: MzKlMu am April 14, 2021, 17:31:28Versuche es mal so:
=Runden(DomMittelwert("Betrag";"qry_Datensatz";"ZCurrency(Betrag) >=300 AND ZCurrency(Betrag) <=3000 AND KriteriumA='ok' AND KriteriumB like 'DS*'");2)

Klingt plausibel. Ich habe den Code genauso versucht, erhalte jedoch wieder #Fehler (auch, wenn ich nur ein Werte-Kriterium nehme).

MzKlMu

Hallo,
ich "bettele" jetzt zum letzten Mal um den SQL Text der Abfrage (qry_Datensatz).
Gruß
Klaus

BikeArno

Zitat von: MzKlMu am April 15, 2021, 11:03:47ich "bettele" jetzt zum letzten Mal um den SQL Text der Abfrage (qry_Datensatz).

Der Code sieht wie folgt aus, wobei mir hinsichtlich der betreoffenen Felder nichts besonders auffällt bzw. dieser Code mehrere Seiten lang wäre. Ich habe den hier gekürzt. Es geht um die Felder Betrag1 bis Betrag3:

SELECT qry_Datensatz.ID, tbl_Land.Bundesland, qry_Kurse.[Name], qry_Kurse.Bundesland, IIf([StatusV]="Begonnen","Begonnen",[StatusA]) AS Status, qry_Datensatz.Beginn, qry_Datensatz.Ende, qry_Datensatz.Vertrag, qry_Datensatz.ID, qry_Datensatz.Geburtstag, qry_Datensatz.Geschlecht, qry_Datensatz.Betrag1, qry_Datensatz.Betrag2, qry_Datensatz.Betrag3, IIf(Val(Nz([GeburtsdatumTN],0))=0,0,DateDiff("yyyy",[GeburtsdatumTN],Date())+(Format(Date(),"mmdd")<Format([GeburtsdatumTN],"mmdd"))) AS AntragAlter
FROM (qry_Datensatz LEFT JOIN qry_Kurse ON qry_Datensatz.ID = qry_Kurse.[Träger-ID]) LEFT JOIN tbl_Land ON qry_Datensatz.ID = tbl_Land.TID;

MzKlMu

Hallo,
der gezeigte Code ist nicht der Code der Abfrage "qry_Datensatz".

Das ist ziemlich verwirrend.
In dem Mittelwertausdruck steht "Betrag", laut Deiner Aussage gibt es aber Betrag1, Betrag2 und Betrag3, aber im Ausdruck ist davon nichts zu sehen.
Gruß
Klaus

BikeArno

Zitat von: MzKlMu am April 15, 2021, 12:46:20Das ist ziemlich verwirrend.
In dem Mittelwertausdruck steht "Betrag", laut Deiner Aussage gibt es aber Betrag1, Betrag2 und Betrag3, aber im Ausdruck ist davon nichts zu sehen.

Entschuldigung für die Verwirrung: Ich hatte oben den Code oben gekürzt, um die Fehlersuche zu vereinfachen. Feld "Betrag" kommt mehrfach vor, ist aber identisch formatiert. Wenn es bei Betrag1 richtig berechnet wird, geht es auch bei den anderen Feldern.

Ich habe inzwischen folgendes probiert: In der Abfrage qry_Datensatz habe ich bei "Betrag1" die Zahlen (die als Text formatiert sind) mittels ZCurrency im Euro-Werte umgewandelt. Dannach erneut den Code für den Mittelwert genutzt.

Der Mittelwert wird nun für die Kriterien "KriteriumB und "DS*" korrekt berechnet:

=Runden(DomMittelwert("Betrag";"qry_Datensatz";"KriteriumA='ok' AND KriteriumB like 'DS*'");2)
Sobald jedoch als weiteres Kriterium der Wertebereich 300 bis 3000 ins Spiel kommt, ernte ich wieder diese #Fehler-Meldung.

=Runden(DomMittelwert("Betrag";"qry_Datensatz";"Betrag >=300 AND Betrag<=3000 AND KriteriumA='ok' AND KriteriumB like 'DS*'");2)
Also schein die MW-Berechnung mit den Eurowerten schon grundsätzlich zu funktionieren, nur mit der Eingrenzung des Wertebereichs scheint es ein Problem zu geben. Aber welches?

MzKlMu

Hallo,
der SQL Text der Abfrage fehlt immer noch. Der in #25 gezeigte SQL Text ist nicht die Abfrage.

Die Abfrage (qry_Datensatz) selbst solltest Du bitte mal zeigen.
Gibt es in dieser Abfrage das Feld "Betrag" (also ohne eine Zahl hinten).
Du sprichst von Betrag1 und im Ausdruck steht nur Betrag, was ist denn nun richtig? Daher hätte ich ja gern mal die Abfrage gesehen, aber die scheint streng geheim zu sein.
Gruß
Klaus

BikeArno

April 16, 2021, 08:52:50 #29 Letzte Bearbeitung: April 16, 2021, 09:09:08 von BikeArno
Zitat von: MzKlMu am April 15, 2021, 19:48:19Gibt es in dieser Abfrage das Feld "Betrag" (also ohne eine Zahl hinten).

Danke für die Geduld. Ist nicht geheim, aber ich schäme mich etwas für die Qualität und der SQL-Code ist unmenschlich lang. Sowohl in der Abfrage (qry_Datensatz) als auch im Diagramm-Code steht der Feldname korrekt (also "Betrag1" usw.). Habe alles abgeglichen.

Vielleicht reden wir aneinander vorbei: Das Feld "Betrag1" generiert sich bei mir wie folgt:
1) Es gibt in eine Tabelle mit den ursprünglichen Feldern "Betrag1" usw.; hier sind Zahlen als TExt formatiert. 
2) Dann gibt es eine Unionabfrage, in der mehrere Tabellen vereint werden (auch das Feld "Betrag1".
3) Es gibt die im #25 gepostete Abfrage. Möchtest du zusätzlich die Union-Abfrage 2) sehen?

In 1-3 ist das Feld unverändert als "Betrag1" gelabelt und es findet auch keine Berechnung und dergleichen statt. Die Werte werden quasi "durchgereicht".

Am Ende steht halt eine Abfrage mit den Werten die ich für die MW-Berechnung eingrenzen möchte und eigtenlich müsste das doch unabhängig von der vorherigen Abfragen gehen? Oder worauf sollte ich da vielleicht noch achten?

Fazit: Die MW-Berechnung funktioniert ja auch, nur nicht die Eingrenzung des Wertebereichs. Der Wurm muss doch dann hier drin sein?
Nachtrag: Ich habe nun testweise die Werte ("Betrag1") in der Ursprungstabelle von Text in Zahlen umformatiert. Auch so funktioniert die Werteeingrenzung mittels o.g. Code nicht. Gleiches Ergebnis, wenn ich die Berechnung direkt mittels der Werte in der Ursprungstabelle vornehme (die Abfragen also umgehe).