Diagramme aus Arrays (Beispiele)

4D - Documentation   Français   English   German   4D Chart, Befehle nach Themen   4D Chart, Befehle alphabetisch   Back   Previous   Next

Version 6.0 (Geändert)


Dieser Abschnitt zeigt Beispiele für zwei- und dreidimensionale Diagramme, die mit der Funktion CT Chart arrays erstellt wurden.

Wie Sie zwei- und dreidimensionale Diagramme aus Datensätzen einer Datenbank erstellen, erfahren Sie im Abschnitt Diagramme aus Datensätzen einer Datenbank (Beispiele).

Jedes Beispiel enthält:

Eine Beschreibung der Ausgangssituation,

Die Struktur der Beispieldatenbank,

Ein Diagramm, das anhand der Beispieldaten komplett programmiert wurde,

Den Code zum Erstellen dieses Diagramms.

Zweidimensionales Diagramm aus Arrays


Nehmen wir an, Sie sind neuer Manager der Engineering Abteilung einer Firma, die Waren herstellt. Eine Ihrer Aufgaben ist, die Zeit herabzusetzen, welche die einzelnen Abteilungen benötigen, um Anfragen von Kunden zu beantworten.

Dafür richten Sie eine Datenbank ein, die die Antwortzeit der einzelnen Abteilungen verwaltet. Die Tabelle hierfür lautet:

Um die gesammelte Information zu analysieren, erstellen Sie für das vergangene Jahr ein Diagramm mit der im Monat durchschnittlich benötigten Zeit pro Abteilung. Der Durchschnittswert ergibt sich aus der Berechnung:

Datum der Antwort - Datum der Anfrage / Anzahl der Anfragen.

Mit 4D Chart erstellen Sie folgendes Diagramm:

Dieses Diagramm wurde mit der Methode DIAGRAMM ANTWORT erstellt. Sie füllt Arrays mit Daten, erstellt aus den Arrays ein Diagramm und paßt dann einige Elemente individuell an, wie z.B. Bezeichnung der Achsen und Farben der Reihen.

Der erste Teil der Methode erstellt und füllt die Arrays mit Hilfe von 4th Dimension Befehlen und Funktionen. Der Inhalt des Array Kategorien ist fest vorgegeben, der Inhalt des Array Reihen stammt direkt aus der Datenbank, der Inhalt des Array Werte ergibt sich durch die Berechnung: Größe des Array Werte = Größe des Array Kategorien * Größe des Array Reihen.

Diese Methode verwaltet die Auswahl der Datensätze über Mengen. Haben Sie eine Menge erstellt, können Sie die Auswahl der benötigten Datensätze durch erneutes Suchen verändern und immer wieder zur Originalmenge der Datensätze zurückkehren. Diese Methode verwendet eine Menge, um die Auswahl der Datensätze für das ganze Diagramm zu bewahren. Die Auswahl wird nämlich beim Füllen des Array Werte verändert, da sich die Werte nach einer neuen Auswahl richten, die sich aus der Suche nach den Datensätzen pro Abteilung und pro Monat ergibt.

Sind die Arrays gefüllt, wird das Diagramm mit 4D Chart Routinen erstellt und angepaßt.

Die Methode lautet:

    `Methode: DIAGRAMM ANTWORT
     `Kategorien: Monate des Jahres
     `Reihen: Namen der Abteilungen
     `Werte: Durchschnittliche Bearbeitungsdauer (in Tagen)

   C_LONGINT ($x;$y;$z;$Counter)
   C_LONGINT ($Left;$Top;$Right;$Bottom)
   C_LONGINT ($Left2;$Top2;$Right2;$Bottom2)
   C_LONGINT ($Area;$Chart;$Title;$Locate;$Duration;$Color;$Font)

     `Array Kategorien festlegen und füllen
   ARRAY STRING (3;$aCategories;12)
   $aCategories{1}:="Jan"
   $aCategories{2}:="Feb"
   $aCategories{3}:="Mär"
   $aCategories{4}:="Apr"
   $aCategories{5}:="Mai"
   $aCategories{6}:="Jun"
   $aCategories{7}:="Jul"
   $aCategories{8}:="Aug"
   $aCategories{9}:="Sep"
   $aCategories{10}:="Okt"
   $aCategories{11}:="Nov"
   $aCategories{12}:="Dez"

     `Erstelle Auswahl der Datensätze für das Diagramm
     `Speichere Datensätze in einer Menge zur späteren Verwendung
   QUERY BY FORMULA ([Antwortzeit];Year of ([Antwortzeit]Datum der Anfrage)=2000)
   CREATE SET ([Antwortzeit];"MDatenDiagramm")

     `Array Reihen festlegen und mit den Abteilungsnamen füllen
   ARRAY STRING (20;$aSeries;0)
   DISTINCT VALUES ([Antwortzeit]Abteilung;$aSeries)

     `Anzahl der Werte für das Diagramm festlegen
     `(Anzahl der Werte = Kategorien * Reihen)
     `Größe des Arrays Werte
   ARRAY REAL ($aValues;12*Size of array($aSeries))

     `Array Werte festlegen und füllen
     `Ermittle für jede Abteilung die durchschnittliche Bearbeitungszeit pro Monat
   $Counter:=0  `Zähler zum Verwalten der Werte
   For ($x;1;Size of array ($aSeries))  `…durchlaufe die Anzahl der Abteilungen
      For ($y;1;12)  `…durchlaufe die 12 Monate
         $Counter:=$Counter+1
         QUERY SELECTION ([Antwortzeit];[Antwortzeit]Abteilung=$aSeries{$x})
         QUERY SELECTION BY FORMULA ([Antwortzeit];Month of ([Antwortzeit]Datum der Anfrage)=$y)
         If (Records in selection ([Antwortzeit])>0)
            $Duration:=0  `Zähler zum Erhöhen der Dauer 
            For ($z;1;Records in selection ([Antwortzeit]))
               GOTO SELECTED RECORD ([Antwortzeit];$z)
               $Duration:=$Duration+([Antwortzeit]Datum der Antwort-[Antwortzeit]Datum der Anfrage)
            End for 
            $aValues{$Counter}:=$Duration/Records in selection([Antwortzeit])  
         End if 
         USE SET("MDatenDiagramm")  `Speichere Originalauswahl der Datensätze
      End for 
   End for 

     `Oberflächenelemente ausblenden
   CT SET DISPLAY (Bereich;1;0)  `Menüleiste ausblenden
   CT SET DISPLAY (Bereich;2;0)  `Chart Toolbar ausblenden
   CT SET DISPLAY (Bereich;3;0)  `Objekt Toolbar ausblenden
   CT SET DISPLAY (Bereich;6;0)  `Rollbalken ausblenden
   CT SET DISPLAY (Bereich;9;0)  `Lineal ausblenden

     `Erstelle Säulendiagramm
   $Chart:=CT Chart arrays (Bereich;2;1;$aCategories;$aSeries;$aValues)

     `Füge Bezeichnung für die Achsen Kategorie und Wert hinzu
   CT SET TITLE ATTRIBUTES (Bereich;$Chart;2;2;3;"Antwortzeit in Tagen")
   CT SET TITLE ATTRIBUTES (Bereich;$Chart;0;3;0;"Anfragen pro Monat")

     `Setze Farben für Reihen (Grün, Gelb, Blau)
   CT SET CHART FILL ATTRIBUTES (Bereich;$Chart;8;100;3;CT Index to color (10))
   CT SET CHART FILL ATTRIBUTES (Bereich;$Chart;8;200;3;CT Index to color (2))
   CT SET CHART FILL ATTRIBUTES (Bereich;$Chart;8;300;3;CT Index to color (7))

     `Setze Position der Legende auf oben zentriert, horizontal ausgerichtet
   CT SET LEGEND ATTRIBUTES (Bereich;$Chart;1;0;0;0;7;0;0)

     `Füge oben links Diagrammtitel hinzu
   $Title:=CT Draw text (Bereich;1;1;300;3;"Durchschnittliche Antwortzeit pro Abteilung")

     `Setze Format für Diagrammtitel (Palatino, 14 Punkt, Fett, Zentriert, Schwarz)
   $Color:=CT Index to color (16)
   $Font:=CT Font number ("Palatino")
   CT SET TEXT ATTRIBUTES (Bereich;$Title;$Font;14;1;$Color;1)

     `Erhalte Größe des Bereichs zum Zentrieren
   CT GET AREA BOUNDARY (Bereich;1;$Left;$Top;$Right;$Bottom)

     `Passe Diagramm an die Fenstergröße minus 50 Punkt an
   CT SIZE (Bereich;$Chart;$Right-50;$Bottom-50)

     `Zentriere Diagramm
   CT GET BOUNDARY (Bereich;$Chart;$Left2;$Top2;$Right2;$Bottom2)
   $Locate:=(($Right-$Left)-($Right2-$Left2))/2
   CT MOVE (Bereich;$Chart;$Locate;$Top2)

     `Zentriere Diagrammtitel
   CT GET BOUNDARY (Bereich;$Title;$Left2;$Top2;$Right2;$Bottom2)
   $Locate:=(($Right-$Left)-($Right2-$Left2))/2
   CT MOVE (Bereich;$Title;$Locate;$Top2)

      `Bewege Diagramm 10 Punkt nach unten
   CT GET BOUNDARY (Bereich;$Chart;$Left;$Top;$Right;$Bottom)
   CT MOVE (Bereich;$Chart;$Left;$Top+10)

     `Alle Objekte abwählen
   CT SELECT (Bereich;-1;0)

Dreidimensionales Diagramm aus Arrays


Nehmen wir an, Sie sind Leiter eines Ausbildungsprogramms für Bayern und möchten feststellen, ob sich die Testergebnisse der Auszubildenden ihres Bundeslandes verbessert haben. Ihre Datenbank enthält die Punktzahlen der Auszubildenden der verschiedenen Bundesländer, sortiert nach Testdatum und Bundesland.

Hinweis: Die Daten stammen aus dem Beispiel Zweidimensionales Diagramm mit Reihen aus Daten von Datensätzen im Abschnitt Diagramme aus Datensätzen einer Datenbank (Beispiele).

Die Tabelle lautet:

Da es in jedem Jahr mehrere Testdaten gab, können Sie die Daten nicht direkt aus der Datenbank darstellen. Stattdessen erstellen Sie eine Methode, die die Daten in Arrays legt. So können Sie jedes Jahr als Kategorie und die einzelnen Bundesländer als Reihen verwenden.

Dieses Diagramm wurde mit der Methode 3D DIAGRAMM TESTERGEBNISSE erstellt. Diese Methode füllt die Arrays mit Daten, generiert ein Diagramm aus den Arrays und gestaltet dann einige Aspekte des Diagramms.

Der Inhalt des Arrays Kategorien wird fest vorgegeben. Der Inhalt des Arrays Reihen stammt aus der Datenbank. Der Inhalt des Array Werte ergibt sich aus dem Durchschnitt der Testergebnisse jedes Bundeslandes pro Jahr. Die Größe des Arrays Werte ist gleich der Größe des Arrays Kategorien multipliziert mit der Größe des Array Reihen.

Über 4D Chart Befehle werden die Menüleiste, Rollbalken, Lineale und Werkzeugpaletten von 4D Chart ausgeblendet. Der 4D Chart Bereich wird auf nicht-eingebbar gesetzt, d.h. der Benutzer kann weder ein Objekt im Bereich auswählen, noch Änderungen ausführen.

Die Methode 3D DIAGRAMM TESTERGEBNISSE lautet:

     `Methode:3D DIAGRAMM TESTERGEBNISSE
     `Kategorien: Jahre
     `Reihen: Bundesländer
     `Werte: Testergebnisse

   C_LONGINT ($x;$y;$z;$Counter)
   C_LONGINT ($Left;$Top;$Right;$Bottom)
   C_LONGINT ($Left2;$Top2;$Right2;$Bottom2)
   C_LONGINT ($Area;$Chart;$Title;$Locate;$Score;$Color;$Font;$Rect)

     `Definiere und fülle das Array Kategorien
   ARRAY STRING (4;$aCategories;2)
   $aCategories{1}:="2000"
   $aCategories{2}:="2001"

     `Definiere und fülle das Array Reihen mit den Namen der Bundesländer
   ALL RECORDS ([Testergebnisse])
   ARRAY STRING (20;$aSeries;0)
   DISTINCT VALUES ([Testergebnisse]Bundesland;$aSeries)

     `Ausmaß des Array Werte
     `(Anzahl der zu zeichnenden Werte = Kategorien * Reihen)
   ARRAY REAL ($aValues;2*Size of array ($aSeries))

        `Bestimme und fülle das Array Werte
        `Finde für jedes Bundesland die durchschnittl. Punktezahl
   $Counter:=0  `Zähler zum Verwalten der Werte
   For ($x;1;Size of array ($aSeries))  `…durchlaufe für die Anzahl der Bundesländer
      For ($y;1;2)  `…durchlaufe für die 2 Jahre
         $Counter:=$Counter+1
         QUERY([Testergebnisse];[Testergebnisse]Bundesland=$aSeries{$x})
         QUERY SELECTION BY FORMULA([Testergebnisse];
                     String(Year of([Testergebnisse]Testdatum))=$aCategories{$y})
         If (Records in selection([Testergebnisse])>0)
            $Score:=0  `Temp Speichern für steigende Punkte
            For ($z;1;Records in selection ([Testergebnisse]))
               GOTO SELECTED RECORD ([Testergebnisse];$z)
               $Score:=$Score+[Testergebnisse]Punkte
            End for 
               `Durchschnitt der Punkte
            $aValues{$Counter}:=$Score/Records in selection ([Testergebnisse])   
         End if 
      End for 
   End for 

     `Auswahl wiederherstellen
   ALL RECORDS ([Testergebnisse])

     `Elemente der Oberfläche ausblenden
   CT SET DISPLAY (Bereich;1;0)  `Menüs ausblenden
   CT SET DISPLAY (Bereich;2;0)  `Diagrammwerkzeuge ausblenden
   CT SET DISPLAY (Bereich;3;0)  `Objektwerkzeuge ausblenden
   CT SET DISPLAY (Bereich;6;0)  `Rollbalken ausblenden
   CT SET DISPLAY (Bereich;9;0)  `Lineale ausblenden

     ` 3D Säulendiagramm erstellen
   $Chart:=CT Chart arrays (Bereich;100;1;$aCategories;$aSeries;$aValues)

     `Achsenbezeichnung ein/ausblenden
   CT SET TITLE ATTRIBUTES (Bereich;$Chart;0;3;0;"Geprüftes Jahr")
   CT SET TITLE ATTRIBUTES (Bereich;$Chart;1;1;0;"Bundesland")  `Titel ausblenden
   CT SET TITLE ATTRIBUTES (Bereich;$Chart;2;2;3;"Durchschnittsergebnis (in Punkt)")

     `Position der Legende setzen auf oben zentriert, horizontale Ausrichtung
   CT SET LEGEND ATTRIBUTES (Bereich;$Chart;1;0;0;0;7;0;0)

     `Diagrammtitel in die obere linke Ecke setzen
   $Title:=CT Draw text (Bereich;1;1;350;3;"Testergebnisse Azubis in Deutschland")

     `Format für Diagrammtitel (Geneva, 14 Punkt, Fett, Zentriert, Blau)
   $Color:=CT Index to color (7)
   $Font:=CT Font number ("Geneva")
   CT SET TEXT ATTRIBUTES (Bereich;$Title;$Font;14;1;$Color;1)

     `Erhalte Fenstergröße zur Zentrierung
   CT GET AREA BOUNDARY (Bereich;1;$Left;$Top;$Right;$Bottom)

     `Passe Diagramm an die Fenstergröße minus 50 Punkt an
   CT SIZE (Bereich;$Chart;$Right-50;$Bottom-50)

     `Zentriere Diagramm horizontal
   CT GET BOUNDARY (Bereich;$Chart;$Left2;$Top2;$Right2;$Bottom2)
   $Locate:=(($Right-$Left)-($Right2-$Left2))/2
   CT MOVE (Bereich;$Chart;$Locate;$Top2)

     `Richte Titel horizontal aus
   CT GET BOUNDARY (Bereich;$Title;$Left2;$Top2;$Right2;$Bottom2)
   $Locate:=(($Right-$Left)-($Right2-$Left2))/2
   CT MOVE (Bereich;$Title;$Locate;$Top2)

     `Bewege Diagramm vom Titel 10 Punkt nach unten
   CT GET BOUNDARY (Bereich;$Chart;$Left;$Top;$Right;$Bottom)
   CT MOVE (Bereich;$Chart;$Left;$Top+10)

     `Setze um Diagramm und Titel graues Rechteck
   $Rect:=CT Draw rectangle (Bereich;$Left-2;$Top2-2;$Right+2;$Bottom+2+10;0)
   CT SET FILL ATTRIBUTES (Bereich;$Rect;3;CT Index to color (13))

     `Richte alle Objekte vertikal aus
   CT GET AREA BOUNDARY (Bereich;1;$Left;$Top;$Right;$Bottom)
   CT GET BOUNDARY (Bereich;-1;$Left2;$Top2;$Right2;$Bottom2)
   $Locate:=(($Bottom-$Top)-($Bottom2-$Top2))/2
   CT MOVE (Bereich;-1;$Left2;$Locate)

     `Setze Rechteck in den Hintergrund
   CT SELECT (Bereich;-1;0)  `Alles abwählen
   CT SELECT (Bereich;$Rect;1)  `Wähle Rechteck
   CT DO COMMAND (Bereich;24002)  `Setze in Hintergrund
   CT SELECT (Bereich;-1;0)  `Alles abwählen

     `Alle Objekte abwählen
   CT SELECT (Bereich;-1;0)

Referenz

Diagramme aus Datensätzen einer Datenbank (Beispiele).


4D - Documentation   Français   English   German   4D Chart, Befehle nach Themen   4D Chart, Befehle alphabetisch   Back   Previous   Next