Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: BikeArno am Februar 20, 2021, 09:55:34

Titel: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am Februar 20, 2021, 09:55:34
Guten Tag ins Forum,

ich versuche ein Diagramm in einem Access-Bericht zu erstellen. Dieses baut momentan auf eine gesamte Abfrage auf. Nun will ich dieses Diagramm jedoch nur auf einen Teil des Datensatzes aufbauen. Ich dachte, dazu kann ich einfach den Code im Eigenschaftsblatt unter Datensatzherkunft anpassen, bekomme es aber nicht hin. Der Code soeht momentan so aus:

TRANSFORM Count(*) AS [Anzahl] SELECT [qry_PBAT].[Land] FROM [qry_UB] GROUP BY [qry_PBAT].[Land] PIVOT [Status];
Nun möchte ich den Code z.B. so anpassen, dass das Diagramm nur auf Datensätze aufbaut, die in der ID beginnen mit "WK.00.*" (es gibt WK.00.123 bis WK.19.123).

Geht das? Ich habe es über Where-Clausel probiert, aber ich bin zu ungeübt...

Danke schonmal, falls jemand sein Wissen teilen möchte :-)
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: DF6GL am Februar 20, 2021, 10:03:19
Hallo,



zunächst ist ID-Feld (Primärschlüssel) vom Datentyp TEXT nicht sehr hilfreich und sollte den Datentyp LONG besitzen.


Versuch es so:

TRANSFORM Count(*) AS [Anzahl] SELECT [qry_PBAT].[Land] FROM [qry_UB] Where ID Like "WK.00.*"  GROUP BY [qry_PBAT].[Land] PIVOT [Status]
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am Februar 20, 2021, 10:15:35
Super, das funktioniert! Danke vielmals.
Danke für den Hinweis mit der ID, da muss ich dir völlig recht geben; leider wurde die ID von andere Stelle mit Buchstabenkombinationen versehen ...
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: Beaker s.a. am Februar 20, 2021, 14:50:09
Hallo Arno,
Zitatwurde die ID von andere Stelle mit Buchstabenkombinationen versehen
Was aber nicht heisst, dass du dieses Feld auch als PK verwenden musst.
Das ist einfach ein zum PK (Autowert, Long) zusätzliches Feld mit einem
eindeutigen Index.

Wenn das Feld von "aussen" kommt (importiert wird) würde ich es i.Ü. beim
Import auch in atomare Inhalte aufteilen. Damit entgehst du auch den Problemen,
die du in dem anderen Thread mit diesem Feld hast.

gruss ekkehard
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 04, 2021, 16:09:18
Hallo nochmal ins Forum,

ich habe ein weiteres Problem bei der Erstellung eines Diagramms in einem Access-Bericht, welches sicherlich zu lösen ist, wenn man weiß wie:

Und zwar habe ich zwei relevante Felder als Grundlage:
v_Alter = Zahlen von 1 bis 100
v_Mitglied = ja/nein

Ich möchte das Alter gruppiert in einem Tortendiagramm darstellen, WENN v_Mitglied = ja.

Bisher habe ich das Alter nur ungruppiert darstellen können

SELECT [v_Alter],Count(*) AS [Anzahl] FROM [qry_Datensatz] Where v_Mitglied Like "ja"  GROUP BY [v_Alter];
Frage: Wie muss ich den Code gestalten, um das Alter im Diagramm wie folgt zu gruppieren:
1-25, 26-50, 51-75 und 76 bis 100?

Freue mich über Hilfe.
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: Beaker s.a. am März 04, 2021, 16:34:28
Hallo Arno,
Zitatv_Mitglied = ja/nein
Ist das wirklich ein Feld vom Typ "Text" (String)?
Für einen Wahrheitswert gibt es den Typ "Ja/Nein" (Boolean).
Dann entfällt auch dieses bescheuerte ('Tschuldigung) LIKE ohne
Joker.
SELECT [v_Alter],Count(*) AS [Anzahl] FROM [qry_Datensatz] Where v_Mitglied = -1  GROUP BY [v_Alter];(-1 = "Ja", 0 = "Nein")
ZitatWie muss ich den Code gestalten, um das Alter im Diagramm wie folgt zu gruppieren:
Dazu wirst du wohl eine Tabelle benötigen, die die Altersgruppen
bereitstellt. Zur Verwendung dieser Tabelle schaust du mal hier (http://www.office-loesung.de/p/viewtopic.php?f=167&t=860341)

gruss ekkehard
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 04, 2021, 17:00:36
Hallo,

danke. Kann man diese Gruppierung nicht doch irgendwie direkt im Code vornehmen, ohne zusätzliche Tabellen?

Dank und Gruß
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: crystal am März 05, 2021, 03:07:08
Hallo,
es könnte mit einer globalen Funktion klappen, definiert in einem Modul:
public function Altersgruppe(Alter as long) as long
   select case alter
      case < 26:
         Altersgruppe = 1
      case < 51:
         Altersgruppe = 2
      case < 76:
         Altersgruppe = 3
      case else:
         Altersgruppe = 4
   end select
end function
und im SELECT:
SELECT Altersgruppe([v_Alter]) as AG, Count(*) AS [Anzahl] FROM [qry_Datensatz] Where v_Mitglied = -1  GROUP BY AG;

Oder noch einfacher ohne globale Funktion:
SELECT int(([v_Alter]+24)/25) as AG, Count(*) AS [Anzahl] FROM [qry_Datensatz] Where v_Mitglied = -1  GROUP BY AG;

Gruß,
crystal
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 05, 2021, 09:27:23
Danke crystal, klingt eigentlich alles logisch. Funktioniert bei mir aber nicht.
Das Diagramm wird unverändert ausgegeben. Mein Vorgehen war:

Ich habe ein neues Modul geöffnet:
Public Function Altersgruppe(v_Alter As Long) As Long
   Select Case Altersgruppe
      Case Is < 25:
         Altersgruppe = 1
      Case Is < 50:
         Altersgruppe = 2
      Case Is < 75:
         Altersgruppe = 3
      Case Else:
         Altersgruppe = 4
   End Select
End Function

Im Eigenschaftsblatt habe ich bei Datensatzherkunft des Diagramms eingegeben:
Select Altersgruppe([v_Alter]) as AG, Count (*) As [Anzahl] FROM [qry_Datensatz] GROUP BY AG;
Die "Mitgliedschaft" (WHERE-Code) habe ich der Einfachheit wegen erstmal weggelassen.

Das Diagrammm zeigt nun gar keine Daten mehr aus meinem Datensatz an, sondern die Original Microsoft-Daten der Northwind-Datenbank...

Der zweite (einfachere) Code funktionierte bei mir leider auch so nicht... Bestimmt mache ich was falsch?
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: ebs17 am März 05, 2021, 09:55:15
Vielleicht so.
SELECT
   (v_Alter - 1) \ 25 AS AG,
   MIN(v_Alter) AS UG,
   MAX(v_Alter) AS OG,
   COUNT(*) AS Anzahl
FROM
   qry_Datensatz
WHERE
   v_Mitglied = True
GROUP BY
   (v_Alter - 1) \ 25
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 05, 2021, 11:34:16
Hallo,

auch damit gehts leider nicht.
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: ebs17 am März 05, 2021, 11:52:12
Ich sag mal so: Mit einer eigenen Zahlentabelle zeigte sich bei mir ein "gehen".
Über eigene Gestaltungen, auch rundherum, muss sich jeder eigene Gedanken machen.

Es ist ja auch eine Abfrage und keine Diagrammgestaltung.
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: crystal am März 05, 2021, 13:17:18
Hallo BikeArno,

also die Query selbst funktioniert bei mir, auch die Version mit INT...
Allerdings habe ich kein Diagramm getestet. Prüfe doch mal, welche Daten aus der Query im Diagramm benutzt werden.

Daten aus der Northwind-DB werden angezeigt??? Die können ja nicht "irgendwoher" kommen. Also bitte prüfe die Datenquelle deines Diagramms nochmal genau. Und teste die Abfrage mal direkt. Wenn du im Abfrage-Generator unten im "Feld:" die rechte Maustaste klickst, kannst du die Formel aufbauen... Wichtig sind die Klammern:
SELECT INT(([v_Alter]+24)/25) as AG, Count(*) AS [Anzahl] FROM [qry_Datensatz] Where v_Mitglied = -1  GROUP BY AG;
          ^^            ^  ^

Und sorry - richtig muss es so lauten:

SELECT INT(([v_Alter]+24)/25) as AG, Count(*) AS [Anzahl] FROM [qry_Datensatz] Where v_Mitglied = -1  GROUP BY INT(([v_Alter]+24)/25);


Gruß,
crystal
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 06, 2021, 13:55:15
Zitat von: crystal am März 05, 2021, 13:17:18Und sorry - richtig muss es so lauten:

SELECT INT(([v_Alter]+24)/25) as AG, Count(*) AS [Anzahl] FROM [qry_Datensatz] Where v_Mitglied = -1  GROUP BY INT(([v_Alter]+24)/25);


Hallo cystal,

dieser Code funktioniert, d.h. er gruppiert das Alter tatsächlich. Bin begeistert, Danke!

Nun würde ich gern die Logik dahinter verstehen. Als Ergebnis erhalte ich durch die Formel [(Alter + 24)/25] offenbar 4 Ganzzahlen, die das Alter kategorisieren in <=25, 26 bis 50, 51 bis 75 usw, richtig? Wie kann ich mir diesbezüglich die Funkionsweise der o.g. Codes vorstellen? Wenn ich vom Alter 0 bis 100 Jahre ausgehe, komme ich auf eine Spannweite von 0,96 bis 4,96. 

Wie müsste denn der Code beispielsweise verändert werden, wenn ich eine Gruppierung in 10er Schritten haben möchte (0 bis 9 Jahre, 10 bis 19, 20 bis 29 usw.)? Vielleicht wird es dann für mich deutlicher.

Abschließend, aber wichtig: Kann ich die im Diagramm angezeigten errechneten gruppierten Zahlen auch als Text wiedergeben (also statt 1 "unter 26", 2 = "..." usw.)?

Grüße
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: crystal am März 07, 2021, 09:56:37
Hallo,
du hast natürlich Recht: meine Formel gibt für das Alter 0 Gruppe 0 aus (statt 1 wie gewünscht). Obwohl Alter 0 ja wohl eher nicht vorkommt...
Die Berechnung ist ja ganz einfach.
Beispiel: Alter 5 Jahre. 5/25 ergäbe 0,2. Also addieren wir 25 zum Alter, teilen durch 25 und erhalten 1,2. Davon der ganzzahlige Anteil (INT) ist 1.

Eine Formel nach meinem Schema
INT((Alter + (Gruppengroesse-1))/Gruppengroesse) ergibt für Alter 0 eine 0, für Alter 1 bis 25 eine 1, für 26 bis 50 2 usw.

Eine Formel
INT((Alter + Gruppengroesse)/Gruppengroesse) ergibt für für Alter 0 bis 24 eine 1, für 25 bis 49 eine 2 usw.

Willst du also 10er-Gruppen, schreibst du
INT((Alter + 9)/10) und erhälst für 0 bis 9 eine 1, für 10 bis 19 eine 2 usw.
oder
INT((Alter + 10)/10) und erhälst für 0 eine 0, für 1 bis 10 eine 1, für 11 bis 20 eine 2 usw.

Um das Alter 0 doch noch in die erste Gruppe zu "quetschen" könntest du schreiben:
INT((Alter + 10)/10) + (Alter = 0)
Der Ausdruck (Alter = 0) ist entweder wahr (1) oder falsch (0)

Irgendwie ist die Beispiel-Funktion "Altersgruppe" dann doch etwas einfacher zu verstehen...

Nicht vergessen: der jeweils komplette Ausdruck muss auch als GROUP BY erscheinen.

Im Diagramm würde ich die Altersgruppen-Bezeichnungen einfach so lassen und stattdessen eine entsprechende Legende einfügen, z. B.:
1: < 25
2: 25 bis 49
3: 50 bis 79
4: 75 bis 99
bzw.
1: 0 bis 10
2: 11 bis 20
3: 21 bis 30
usw.

Gruß,
crystal
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 09, 2021, 09:29:44
Zitat von: crystal am März 07, 2021, 09:56:37Gruß,
crystal

Hallo crystal,

vielen Dank für die Super-Erklärung, das hilft mir wirklich weiter, die Dinge auch zu verstehen, statt nur zu kopieren!

Gruß
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: crystal am März 09, 2021, 19:43:06
@BikeArno
Danke für dein Lob! Es freut mich, dass ich dir helfen konnte und du etwas lernen konntest!

Gruß,
crystal
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 10, 2021, 15:52:36
Hallo,

ich hätte eine weitere kleine Frage zum Thema Diagrammaufbau in Access. Und zwar habe ich eine Tabelle mit zwei relevanten Feldern: Bundesland und Ausgaben, ungefähr 3.000 Datensätze. Ich möchte nun mittels Balkendiagramm pro Bundesland den Mittelwert der Ausgaben als Balken ausgeben lassen. Funktioniert das mittels Code, oder kann man das in Access vergessen? Derzeit sieht der Code so aus, liefert aber nicht das gewünschte Resultat: 

SELECT [Bundesland],Count([Ausgaben]) AS [MittelwertVonAusgaben] FROM [qry_Datensatz] GROUP BY [Bundesland];
Würde mich über Tipps freuen.

Gruß
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 12, 2021, 13:51:10
Hallo,

ich möchte nochmal auf folgenden Code eingehen:

SELECT INT(([v_Alter]+24)/25) as AG, Count(*) AS [Anzahl] FROM [qry_Datensatz] Where v_Mitglied = -1  GROUP BY INT(([v_Alter]+24)/25);

Diese gruppiert das Alter. Naturgemäß ist dieses ja auch begrenzt, sodas der Code super klappt.
Wie ist es aber, wenn ich andere Variablen/Felder gruppieren möchte, die eine sehr große Streuung mit Ausreisern aufweisen, wobei ich letztere in eine separate Gruppe stecken möchte.

Beispiel: Umfang von Unterrichtsstunden in Fortbildungen. So hat in meinem Fall die Mehrheit einen Stundenumfang von 0 bis 100 Stunden. Ca. 1% aller Fälle hat jedoch Stunden von über 1.000. Folgende Gruppierung böte sich da an:

0 Stunden
1-10
11-20
...
91-100
über 100 Stunden

Kann man die Formel oben entsprechend anpassen, oder ist das nicht möglich?

Nachsatz: Alternativ habe ich versucht, den Zahlenbereich für die Gruppierung einzugrenzen, so dass der Stundenumfang im Datensatz nich mehr von 0 bis 20.000, sondern nur noch bis 100 geht. Auch dieser Code funktioniert nicht :-(

SELECT INT(([Stunden]+9)/10) as AG, Count(*) AS [Anzahl] FROM [qry_Datensatz] Where Stunden < 100 GROUP BY INT(([Stunden]+9)/10)
Ich grübel den halben Tag und finde keine Lösung...
Danke
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: Beaker s.a. am März 12, 2021, 16:31:47
Hallo Arno,
Count()zählt die DS, die der Bedingung entsprechen
Sum() summiert, und
Avg() bildet den Mittelwert

Auf den Rest hab ich jetzt keine Lust.

gruss ekkehard
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 13, 2021, 11:48:25
Danke Ekkehard,

1. mit dem Mittelwert habe ich es wie folgt versucht, mit dem Ziel ein einfaches Balkendiagramm zu bekommen, welches den Mittelwert eines Feldes ausweist, klappt nicht. Wo könnte der Fehler liegen?

SELECT [Stunden], AVG(*) AS [Mittelwert] FROM [qry_Datensatz] GROUP BY [Stunden];

2. Zu dem oben angesprochenen Thema: Wie begrenze ich den zu gruppierenden Wertebereich der Zahlen, irgendwas mache ich hier falsch:

SELECT INT(([Stunden]+9)/10) as AG, Count(*) AS [Anzahl] FROM [qry_Datensatz] Where Stunden < 100 GROUP BY INT(([Stunden]+9)/10)
Wie gesagt, der Wertebereich der Daten geht von 0 bis mehrere 1.000 (Ausreißer oder Fehleingaben). Die möchte ich nicht mir in die Gruppierung einschließen, da mittels der o.g. Formel für jeden Ausreißer separate Gruppen gebildet werden... Ich möchte nur Fälle zählen im Wertebereich 0 bis 100.

Das muss doch irgendwie machbar sein...

Gruß
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: crystal am März 13, 2021, 17:03:12
Hallo,
nochmal ganz einfach.
Mit einer Formel wie oben INT(...) wird der Zahlenstrahl (z. B. Alter von 0 bis 100) linear in gleich große Stücke geteilt. Um nun für ein Balkendiagramm zu zählen, wie viele Alter in jeder dieser Stücke fallen, muss man - eben - die Anzahlen zählen (Count). Mit AVG würdest du den Mittelwert aller Alter in dem betreffenden Stück erhalten. Das wird oft auch gleichzeitig in einem Diagramm dargestellt.

Um nun einen Zahlenstrahl in ungleich große Stücke zu teilen, kommst du mit so einer einfachen Formel nicht weiter. Da hilft m. E. nur eine Funktion, die das macht. Code nochmal, korrigiert:

public function Altersgruppe(Alter as long) as long
  select case alter
      case < 26:
        Altersgruppe = 1
      case < 51:
        Altersgruppe = 2
      case < 76:
        Altersgruppe = 3
      case < 101:
        Altersgruppe = 4
      case else:
        Altersgruppe = 5
  end select
end function
und im SELECT:

SELECT Altersgruppe([v_Alter]) as AltersGr, Count(*) AS [Anzahl] FROM [qry_Datensatz] Where (v_Mitglied = -1)  GROUP BY Altergruppe([v_Alter]);

Alles was älter als 101 ist, wird im obigen Beispiel in Gruppe 5 gezählt.

Ändere doch mal deinen Code
SELECT INT(([Stunden]+9)/10) as AG, Count(*) AS [Anzahl] FROM [qry_Datensatz] Where Stunden < 100 GROUP BY INT(([Stunden]+9)/10)
so
SELECT INT(([Stunden]+9)/10) as Stundengruppe, Count(*) AS [Anzahl] FROM [qry_Datensatz] Where ([Stunden] < 100) GROUP BY INT(([Stunden]+9)/10)

Hier ist es oft hilfreich, im Abfrage-Generator zwischen Entwurfs- und SQL-Ansicht hin- und herzuschalten, damit die eckigen und runden Klammern richtig gesetzt werden. Oft hilft es auch, sich mal die Tabellen-Ansicht anzuschauen und ggf. noch ein paar Felder zeitweise hinzuzufügen.

Da du aber in deinen Beispielen die Abkürzung "AG" immer unverändert übernommen hast, vermute ich, dass du nicht weißt, was "AG" überhaupt bedeuten soll (stand ursprünglich einfach nur für "ArbeitsGruppe"). Auch scheint es so zu sein, dass du den Abfrage-Generator nicht benutzt, da die Klammersetzungen immer gleich sind.

Deine Idee, die Mittelwerte als Balkendiagramm darzustellen ist natürlich falsch. Balken dienen immer dazu, Anzahlen darzustellen.

Schließlich: eine Aussage wie "klappt nicht" ist wenig hilfreich. Du solltest schon beschreiben, was genau nicht klappt, ob Syntaxfehler gemeldet werden oder oder.

Gruß,
crystal
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 13, 2021, 17:36:19
Hallo crystal,

vielen Dank für deine hilfreichen Erklärung. Den Abfragegenerator habe ich bisher nicht genutzt, das stimmt...

Ich werde deine Hinweise einmal testen. Aber: Bisher habe ich den Code bzw. die o.g. Formel lediglich im Eigenschaftenblatt / Datensatzherkunft des jeweiligen Diagramms eingetragen. Deshalb ist mir leider nicht klar, wo ich die von dir oben ausgeführte Altersgruppen-Funktion

public function Altersgruppe(Alter as long) as long
[...]

hinterlegen muss. Muss ich da im ersten Schritt zunächst ein Modul mit dieser Funktion erstellen und dann im nächsten Schritt den SELECT wie gehabt im Eigenschaftenblatt hinterlegen?

Der zweite Code

SELECT INT(([Stunden]+9)/10) as Stundengruppe, Count(*) AS [Anzahl] FROM [qry_Datensatz] Where ([Stunden] < 100) GROUP BY INT(([Stunden]+9)/10)
"funktioniert" bei mir nicht. Das heisst, wenn ich das Diagramm aus der Entwurfsansicht in die Berichtsansicht umstelle, bleibt es unverändert wie zuvor (die Änderungen wirken sich also nicht aus).Fehlermeldungen gibt es keine.

Und zuletzt: Deine Anmerkung mit dem Mittelwert im Balkendiagramm klingt plausibel. Dann gibt es vermutlich keine Möglichkeit, den Mittelwert mittels einfacher Formel als Diagramm anzuzeigen, oder doch?

Nochmal vielen Dank... Gruß
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: crystal am März 14, 2021, 11:38:51
Hallo,
Vorbemerkung: ich dachte immer an Excel-Diagramme. Leider ist die Diagramm-Funktionalität in Access-Berichten etwas anders und sehr "gewöhnungsbedürftig"...

Das klappt bei mir:
SELECT Int(([Stunden]+9)/10) AS Stundengruppe, Count(*) AS Anzahl
FROM Tabelle1
WHERE ((([Stunden])<100))
GROUP BY Int(([Stunden]+9)/10);

Und als zweites Diagramm im Bericht (Typ Linie):
SELECT Int(([Stunden]+9)/10) AS Stundengruppe, Avg(Stunden) AS Mittel
FROM Tabelle1
WHERE (((Stunden)<100))
GROUP BY Int(([Stunden]+9)/10);

2021-03-14 11_36_50-Window.jpg

Da das zweite Diagramm nicht sehr aussagekräftig ist, würde ich im Bericht wohl eher eine Tabelle der Mittelwerte darstellen.

Blöderweise steht im Diagramm "Sum of Anzahl", eigentlich müsste es "Anzahl" heißen. Ist leider etwas schwierig, das zu ändern, weil dann der SQL-Select "verhunzt" wird.

Vielleicht hat jemand mehr Erfahrung mit der schrecklichen Bedien-Oberfläche der Diagramm-Eigenschaften...

Gruß,
crystal
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 14, 2021, 12:00:36
Hallo crystal,

danke für die Tipps. Es klingt alles plausibel, aber es funktioniert bei mir nicht. Vielleicht gehe ich falsch vor? Mein Vorgehen:

1. Ich habe im Microsoft VBA-Editor folgenden angepassten Code eingegeben:

Public Function Stundengruppe(Stunden As Long) As Long
  Select Case Stundengruppe
      Case Is < 26:
        Stundengruppe = 1
      Case Is < 51:
        Stundengruppe = 2
      Case Is < 76:
        Stundengruppe = 3
      Case Is < 101:
        Stundengruppe = 4
      Case Else:
        Stundengruppe = 5
  End Select
End Function

2. Dann habe im Eigenschaftenblatt des Access-Berichts (Datensatzherkunft) folgenden Code hinterlegt:

SELECT Stundengruppe([Stunden]) as StundenGr, Count(*) AS [Anzahl] FROM [qry_Datensatz] GROUP BY Stundengruppe([Stunden]);
Ergebnis: Keins. Diagramm wird unverändert angezeigt.
 
Da ich diese Funktion öfters benötige, würde ich gerne verstehen, wie ich das selbständig anwende. Wo könnte mein Fehler liegen?


Nachtrag: Der folgende o.g. Code führt leider auch nicht zum gewünschten Ergebnis, der Datensatz wird also nicht eingegerenzt:
SELECT Int(([Stunden]+9)/10) AS Stundengruppe, Count(*) AS Anzahl
FROM Tabelle1
WHERE ((([Stunden])<100))
GROUP BY Int(([Stunden]+9)/10);

Gruß
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: DF6GL am März 14, 2021, 13:57:09
Hallo,

der Code ist falsch und sollte so lauten:

Public Function Stundengruppe(Stunden As Long) As Long
  Select Case Stunden
      Case Is < 26:
        Stundengruppe = 1
      Case Is < 51:
        Stundengruppe = 2
      Case Is < 76:
        Stundengruppe = 3
      Case Is < 101:
        Stundengruppe = 4
      Case Else:
        Stundengruppe = 5
  End Select
End Function
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 14, 2021, 15:19:50
Zitat von: DF6GL am März 14, 2021, 13:57:09der Code ist falsch und sollte so lauten:

Hallo,

vielen Dank für den Hinweis. Das stimmt zwar  (mein Versehen), aber das Ganze führt trotz Korrektur immer noch n icht zum Erfolg.
Ich frage mich, ob mein oben beschriebenes (siehe #24) Vorgehen richtig ist? Oder wie würdet ihr das angehen?

 
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: DF6GL am März 14, 2021, 18:11:22
Hallo,

am besten setzt Du einen Haltepunkt an den Anfang des Codes und prüft was genau denn da abläuft..

Zum eigentlichen Problem will ich jetzt nichts beitragen, da wurde schon viel erzählt.
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 15, 2021, 08:39:35
Nach setzen des Haltepunktes im Code und Einzelschrittdurchlauf öffnet sich lediglich ein Fenster "Makros", welches leer ist. In der Zeile Makroname steht nichts.

Ich habe auch ein neues Modul mit identischem Code angelegt, mit gleichem Ergebnis.

Wenn ich das Diagramm vom Entwurfsmodus in den Berichtsmodus umschalte, rödelt Access zwar, aber der Code führt nicht zu den Änderungen. Wenn ich im Entwurfsmodus einen Doppelklick auf das Diagramm ausübee (es öffnet sich u.a. die Datentabelle), sieht man auch, dass der Code nicht zum Erfolg führt, denn dort steht noch immer "AG" (aus dem vorherigen Code) statt "Stundengruppe" (aus dem aktuellen Code).

Gruß
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: DF6GL am März 15, 2021, 09:53:50
Hallo,

das scheint noch mehr im Argen zu liegen...



Wenn möglich, lade die Db hier hoch, datenreduziert, komprimiert/repariert und gezippt.

Ich weiß allerdings nicht, ob ich (selber) dazu komme, alles anzusehen.
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 15, 2021, 10:47:18
Zitat von: DF6GL am März 15, 2021, 09:53:50Wenn möglich, lade die Db hier hoch, datenreduziert, komprimiert/repariert und gezippt.

Hallo,

gute Idee. Ich habe den betreffenden Teil exemplarisch (nur einen kleinen Auszug der betreffenden Tabelle und zwei Beispieldiagramme) anbei hochgeladen.

Im ersten Diagramm wird die Anzahl der Stunden per Formel automatisch gruppiert, das funktioniert prinzipiell sehr gut und eignet sich für begrenzte Datenbereiche, wie crystal schon schrieb.
Im zweiten Diagramm möchte ich den Datenbereich des Feldes Stunden gruppiert (5 Gruppen sollen herauskommen, siehe Code im Editor) ausgeben. Das funktioniert leider so nicht. Ich finde den Fehler nicht.

Gruß
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: DF6GL am März 15, 2021, 13:10:20
Hallo,

die Funktion gehört in ein Standardmodul und nicht in das Berichtsklassenmodul.

In der Tabelle gibt es "NULL"-Stunden,soll heißen Feld "Stunden" ist leer. Das muss berücksichtigt werden:
ZitatOption Compare Database
Option Explicit   'Unbedingt in JEDEN Modulkopf einfügen!



Public Function Stundengruppe(Stunden) As Long
 


 Stunden = Nz(Stunden, 0)
 
  Select Case Stunden
      Case Is < 26:
        Stundengruppe = 1
      Case Is < 51:
        Stundengruppe = 2
      Case Is < 76:
        Stundengruppe = 3
      Case Is < 101:
        Stundengruppe = 4
      Case Else:
        Stundengruppe = 5
  End Select
End Function



Die Performance mit dieser Funktion, nach der gruppiert wird, ist suboptimal.
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am März 15, 2021, 14:50:53
Zitat von: DF6GL am März 15, 2021, 13:10:20die Funktion gehört in ein Standardmodul und nicht in das Berichtsklassenmodul.

Hallo Franz,

ich weiß gar nicht, wie ich danken soll! Funktioniert wie es soll.

Ja, die Performance lässt sehr zu wünschen übrig. Bis der Gesamtbericht aufgebaut wird, dauert es fast eine halbe Minute.

Nochmals herzlichen Dank für deine Hilfe.

Gruß
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: DF6GL am März 15, 2021, 15:04:55
Hallo,


verbesserte Performance wird mit diesem SQL-Statement für die Rowsource des 2. Diagramms erreicht.

SELECT IIf(([Stunden])>100,5,([Stunden]\25)) AS SG, Count(qry_Datensatz.ID) AS AnzahlvonID
FROM qry_Datensatz
GROUP BY IIf(([Stunden])>100,5,([Stunden]\25));


und wenn der Datentyp des Tabellenfeldes "Stunden" von TEXT nach LONG geändert und dafür gesorgt wird, dass es nicht "NULL" enthält.

Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am April 13, 2021, 14:04:50
Hallo,

ich habe in einem Access-Bericht ein Diagramm mit Hilfe folgenden SQL-Codes erstellt. Dieser gruppiert bestimmte Werte.

Meine Frage ist  nun, ob ich die so erstellten Gruppierungen im Diagramm irgendwie sortieren kann. Aktuell erfolgt die Sortierung der Balken weder so, dass zuerst die Balken mit kleinsten Werten hin zu den größten Werten erfolgt. Sie erfolgt aber auch nicht in Reihenfolge des Codes. Zudem wird der TExt auch nicht so dargestellt, wie  im Code". So wird z.B. im Diagramm ausgegeben

"bis unter 10.000
5.000"
statt
"5.000 bis unter 10.000"

Public Function Ausgabe(A_Ausgaben) As String
 
A_Ausgaben = Nz(A_Ausgaben, 0)
  Select Case A_Ausgaben
      Case Is < 5000:
        Ausgabe= "unter 5.000"
      Case Is < 10000:
        Ausgabe= "5.000 bis unter 10.000"
      Case Is < 15000:
        Ausgabe= "10.000 bis unter 15.000"
      Case Is < 20000:
        Ausgabe= "15.000 bis unter 20.000"
      Case Is < 25000:
        Ausgabe= "20.000 bis unter 25.000"
           
      Case Else:
        Ausgabe= "25.000 und mehr"
  End Select
End Function

Weiß jemand, nach welchem Prinzip die Sortierung im aktuellen Status erfolgt und wie ich die Balken von den kleinsten vorhandenen Balken zu den größten Balken (also Anzahl der Nennungen) sortieren kann?

Danke und Gruß
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am April 15, 2021, 16:52:03
Hat keiner eine Idee, ob man die Datenbeschriftung (Reihenfolge) im Diagramm ändern kann? Oder ist das grundsätzlich nicht vorgesehen?
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am April 16, 2021, 11:19:41
Um das Thema fortzuführen: Mit dem o.g. Code komme ich ganz gut zurecht, bis an folgenden Punkt:

Ich möchte Datumsangaben verarbeiten. Und zwar habe ich in einem Feld das Datum, wann ein Schulabschluss erworben wurde. Im Diagramm möchte ich nun ausgeben, wieviele SuS einen Abschluss in einem bestimmten Zeitraum (bis 2015, zwischen 2016 und 2020, Sonstiges) erworben haben. Ich dachte, ich könnte es wie folgt lösen:

Public Function Schulende(Abschlussjahr) As Long
 
Schulende= Nz(Abschlussjahr, 0)
  Select Case Abschlussjahr
      Case Is < "31.12.2015":
        Schulende= 1
      Case Is < "31.12.2020":
        Schulende= 2
      Case Else:
        Schulende= 3
  End Select
End Function

Leider kommen völlig unplausibel Berechnungen heraus. Offenbar funktioniert also meine Vorgehensweise so nicht. Was mache ich falsch? Danke :-)



Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am April 21, 2021, 09:56:01
Hallo,

eine weitere Frage in der Kategorie "Diagramme in Access". Vielleicht hat jemand einen Rat, wie ich mein Vorgehen verbessern kann:

Ich möchte eine Balkendiagramm mit der Summe von bestimmten Nennungen in einem Feld erstellen. In dem Feld wird z.B. gefragt, wieviele Personen an einem bestimmten Schulungskurs teilnahmen. Nun möchte ich mittels dem Feld Bundesland auszählen, wieviele Personen in Summe pro Bundesland teilnahmen.

Hierzu habe ich folgenden Code erstellt, der zwar funktioniert, aber das Ergebnis über eine Kreuztabelle ermittelt. Hier mein bisheriger Code:

TRANSFORM Sum(Schüler) AS [Anzahl] SELECT [Bundesland] FROM [qry_DatensatzTN] Where KriteriumA Like "ok" GROUP BY [Bundesland] PIVOT [Bundesland];
Das muss doch auch einfacher für ein solches Balkendiagramm auszuzählen sein (also ohne Kreuztabelle), oder gehe ich so korrekt vor?
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: BikeArno am Mai 06, 2021, 09:53:07
Hallo,

ich möchte das Thema um eine weitere Frage erweitern. Und zwar möchte ich ein Diagramm erstellen, in dem ich für jedes Bundesland einen einen Mittelwert (Euro) ausgeben lasse. Ich komme mit meinem Code nicht voran, es wird nichts berechent, scheinbar ist er falsch:

TRANSFORM Mittelwert(Euro) AS [Mittelwert] SELECT [Land] FROM [qry_Abfrage1] GROUP BY [Land] PIVOT [Land];
Hat jemand einen TIpp, was ich faslch mache?

Danke vielmals.
Titel: Re: SLQ-Code anpassen Diagramm
Beitrag von: markusxy am Mai 06, 2021, 16:42:12
Zitat von: BikeArno am Mai 06, 2021, 09:53:07Hat jemand einen TIpp, was ich faslch mache?

Du solltest dich vermutlich auch mal in das Thema einlesen.
Transform braucht zumindest 3 Argumente.
Du kannst doch nicht im Haupt-Select, das gleiche Argument wie in Pivot verwenden?!?!
Die zwei Argumente müssen ja miteinander interagieren.

Einfach mal das Bild ansehen und damit beschäftigen.
https://www.google.com/search?q=sql+pivot&rlz=1C1CHBF_deAT869AT869&sxsrf=ALeKk02RVOVTO5WkFffikBXBs9jGkJeyeA:1620312061390&source=lnms&tbm=isch&sa=X&ved=2ahUKEwjgn-DmpLXwAhUZ_6QKHds8DcEQ_AUoAXoECAEQAw&biw=1920&bih=937#imgrc=rfaykrisG2u9oM