Zum Hauptinhalt springen

Diagramme (Charts)

Ab Version 25.1.111

Folgende Diagrammtypen werden unterstützt:

  • Balken (Bar)
  • Torten (Pie)
  • Linien (Line)
  • Punkt (Point)

Zum erzeugen eines Diagrammes wird ein Bild Steuerelement in Kombination mit einer C# Funktion verwendet. C# Kenntnisse sind hierbei von Vorteil. Sollten Sie Probleme haben wenden Sie sich bitte an unsere Hotline oder einen C# Entwickler.

Erzeugen Sie zuerst eine Script Funktion, in dem Sie oben auf den Script-Knopf klicken.

Im Script Code Fenster sehen sie folgenden Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XSystem;
using Mum.Geo.ReportDesigner;

namespace Report
{
public class MyReportPlugIn : ReportPlugIn
{
public MyReportPlugIn(IReportApiHost host) : base(host)
{
//
}

public string MyFunction()
{
return "Test";
}
//HIER NEUEN CODE EINFUEGEN
}
}

Fügen Sie unter die Zeile "using Mum.Geo.ReportDesigner;" eine neue Zeile "using Mum.Geo.ReportDesigner.Charts;" ein.

Fügen Sie nun am Ende, aber vor den letzten zwei geschweiften Klammern eine neue Funktion zur Erzeugung des Diagrams ein. Die Funktion können Sie selbst benennen.

Hier ein Beispiel Code für eine Balken Diagramm (Bar)

public string CreateBarChart()
{
Chart chart = new Chart();
chart.ChartType = ChartType.Bar;
chart.Title = "Bar Chart";
chart.XAxis.Title = "X Title";
chart.YAxis.Title = "Y Title";
chart.Sql = "select content_type as label, count(content_type) as x from ME_TABLE group by content_type";
return this.Report.CreateChart(chart);
}

Im Code Editor gibt es eine Option Example Code hier stehen diverse Code Beispiele für die verschiedenen Diagrammtypen.

Bei "chart.Sql" wird das SQL angegeben das die Daten für das Diagramm bereitstellen soll.

Nach dem definieren der C# Funktion fügen sie ein Bild Steuerelement in ihren Bericht ein. Statt einer URL geben Sie einen Platzhalter für die gerade eben erzeugte Funktion an. In diesem Fall:

{Fun.CreateBarChart()}

Bei erzeugen des Berichtes wird, wenn das Bild geladen wird dann das Diagramm über die Funktion angezeigt und geladen.

SQL bei Balken und Torten Diagramme

Bei Balken und Torten Diagrammen wird das Feld label und x verwendet.

Die Balken werden in der Reihenfolge gezeichnet wie sie in der SQL Abfrage zurück kommen.

Der Wert x gibt die Höhe des Balkens an.

Beispiel:

chart.Sql = "select content_type as label, count(content_type) as x from ME_TABLE group by content_type";

Verwenden wie im Beispiel Aliasnamen wenn ihre Felder nicht label oder x heissen.

Das Feld "label" wird für den Anschriebnamen verwendet. Im Obigen Beispiel sind diese Custom, Point, LineString usw.

Für Linien und Punkt Diagramme muss der SQL die Felder

label, x und y

zurück liefern.

Tip:

Sie können den X Wert in die Beschriftung mit aufnehmen in dem Sie diese im Label Feld mit definieren.

Beispiel:

chart.Sql = "select (content_type||' '||count(content_type)) as label, count(content_type) as x from ME_TABLE group by content_type";

SQL Linien und Punkte Diagramme

Die Koordinaten bei Linien und Punkte Diagrammen werden in der Reihenfolge gezeichnet wie sie in der SQL Abfrage zurück kommen. Sobald der Wert des Feldes "label" sich ändert wird eine neue Linie begonnen.

Beispiel

chart.Sql = "select label, x, y from CHART_LINES ORDER BY label, sort_index";

Inhalt der Tabelle CHART_LINES

LABEL X Y  SORT_INDEX
----- - -- ----------
A 1 1 1
A 2 3 2
A 3 5 3
A 4 7 4
A 5 3 5
B 2 2 1
B 4 5 2
B 5 11 3
B 6 5 4
B 7 1 5
Hinweis

Verwenden Sie Aliasnamen wenn ihre Felder nicht label, x, x heissen.

Code Beispiel für Balken (Bar) Diagramm

public string CreateBarChart()
{
Chart chart = new Chart();
chart.ChartType = ChartType.Bar;
chart.Title = "Bar Chart";
chart.XAxis.Title = "X Title";
chart.YAxis.Title = "Y Title";
chart.Sql = "select content_type as label, count(content_type) as x from ME_TABLE group by content_type";
return this.Report.CreateChart(chart);
}

Code Beispiel für Kuchen (Pie) Diagramm

public string CreatePieChart()
{
Chart chart = new Chart();
chart.ChartType = ChartType.Pie;
chart.Title = "Pie Chart";
chart.XAxis.Title = "X Title";
chart.YAxis.Title = "Y Title";
chart.PieLabelType = PieLabelType.Name;
//chart.PieLabelType = PieLabelType.Value;
//chart.PieLabelType = PieLabelType.Percent;
//chart.PieLabelType = PieLabelType.NameAndValue;
//chart.PieLabelType = PieLabelType.NameAndPercent;
//chart.PieLabelType = PieLabelType.NameAndValueAndPercent;
//chart.PieLabelType = PieLabelType.None;
chart.Sql = "select content_type as label, count(content_type) as x from ME_TABLE group by content_type";

return this.Report.CreateChart(chart);
}

Code Beispiel für Linien (Line) Diagramm

public string CreateLineChart()
{
Chart chart = new Chart();
chart.ChartType = ChartType.Line;
chart.Title = "Line Chart";
chart.XAxis.Title = "X Axis";
chart.YAxis.Title = "Y Axis";
//chart.ItemLineWidth = 10; //Line Width for Line Charts
//chart.ItemLineIsSmooth = true; //Creates smooth lines
chart.Sql = "select label, x, y from CHART_LINES order by label";
return this.Report.CreateChart(chart);
}

Code Beispiel für Punkt (Point) Diagramm

public string CreatePointChart()
{
Chart chart = new Chart();
chart.ChartType = ChartType.Point;
chart.Title = "Point Chart";
chart.XAxis.Title = "X Axis";
chart.YAxis.Title = "Y Axis";
chart.Sql = "select label, x, y from CHART_LINES order by label";
return this.Report.CreateChart(chart);
}

Eigene Farben setzen

Wenn ihnen die Standardfarben nicht gefallen können Sie die Farben selbst mit der Funktion chart.ItemColors.Add festlegen. Das Programm wiederholt dann diese Farben. Sie können hier auch Hex Farben angeben. Im Beispiel unten wird der erste Balken in Blau gezeichnet, der zweite in Rot usw, beim fünfte Balken wiederholt sich dann die Sequenz, d.h. der fünfte Balken wird in Blau, der sechste Balken in Rot usw. gezeichnet.

public string CreateBarChart()
{
Chart chart = new Chart();
chart.ChartType = ChartType.Bar;
chart.Title = "Bar Chart";
chart.XAxis.Title = "X Title";
chart.YAxis.Title = "Y Title";
chart.Sql = "select content_type as label, count(content_type) as x from ME_TABLE group by content_type";

chart.ItemColors.Add("Blue");
chart.ItemColors.Add("Red");
chart.ItemColors.Add("#ff5733");
chart.ItemColors.Add("Gray");

return this.Report.CreateChart(chart);
}

X und Y Achsen selbst definieren

Das Programm setzt automatisch Werte für die X und Y Achse. Sie Können diese aber auch selbst setzen. Der Wert "double.NaN" Sagt dem Programm das es den Wert selbst automatisch berechnen soll. Dies ist der Standardwert und muss nicht gesetzt werden und ist hier nur Beispielhaft.

public string CreateBarChart()
{
Chart chart = new Chart();
chart.ChartType = ChartType.Bar;
chart.Title = "Bar Chart";
chart.XAxis.Title = "X Title";
chart.YAxis.Title = "Y Title";
chart.Sql = "select content_type as label, count(content_type) as x from ME_TABLE group by content_type";

chart.YAxis.Max = 25; //Maximaler Wert der Y Achse, Wert wo die Achse enden soll
chart.YAxis.Min = -5; //Minimaler Wert der Y Achse, Wert wo die Achse beginnen soll
chart.YAxis.MinorStep = 2; //Abstand der kleinen Striche
chart.YAxis.MajorStep = 10; //Abstand der großen Striche welche eine Beschriftung mit Zahl bekommen

//Setzte alle Werte für die X Achse automatisch
chart.XAxis.Max = double.NaN;
chart.XAxis.Min = double.NaN;
chart.XAxis.MinorStep = double.NaN;
chart.XAxis.MajorStep = double.NaN;

return this.Report.CreateChart(chart);
}

Weiterte Optionen für alle Diagramme

public string CreateChartMoreOptions()
{
Chart chart = new Chart();
chart.ChartType = ChartType.Bar;
chart.Title = "Bar Chart";
chart.XAxis.Title = "X Title";
chart.YAxis.Title = "Y Title";
chart.Sql = "select content_type as label, count(content_type) as x from ME_TABLE where id={A.ID} group by content_type"; //Example with placeholders

chart.ConnectionName = "LASVEGAS"; //andere Datenbankverbidung angeben
chart.Dpi = 100; //Dpi Auflösung ändern
chart.Height = 800; //Wenn nicht gesetzt wird der Wert vom Programm berechnet
chart.Width = 1600; //Wenn nicht gesetzt wird der Wert vom Programm berechnet

//Gesamt Hintergrund
chart.BackgroundColorName = "Blue"; //Farbe
chart.BackgroundColorFillType = FillType.Solid; //Durchgehende Farbe
chart.BackgroundColorFillType = FillType.Brush; //Farbverlauf
chart.BackgroundColorFillType = FillType.GradientByColorValue; //Farbverlauf

//Hinter Grund des Diagramms
chart.ChartColorName = "Gray";
chart.ChartColorFillType = FillType.Solid;
chart.ChartColorFillType = FillType.Brush;
chart.ChartColorFillType = FillType.GradientByColorValue;

//Farbtyp der einzelnen Balken, Tortenstücke etc.
chart.ItemColorFillType = FillType.Solid;//Durchgehende Farbe
chart.ItemColorFillType = FillType.Brush;//Farbverlauf


//Optionally you can define your own Colors for the Items (Bars/Line/Pies etc)
//The Programm cycles through these Colors.
chart.ItemColors.Add("Blue");
chart.ItemColors.Add("Red");
chart.AddAutoItemColors(); //Use this to add the default colors

//Rahmen um das Diagramm zeichnen
chart.BorderWidth = 10; //Rahmendicke
chart.BorderColorName = "Gray"; //Rahmenfarbe
chart.ShowLegend = false; //Legende ausblenden

return this.Report.CreateChart(chart);

}

Tip

Wenn Sie in den Chart.Sql einen Filter abhängig von einem Feldwert des Bands in dem das Diagramm sich befindet einsetzen wollen verwenden Sie Platzhalter. Beachten Sie das die Platzhalter gross geschrieben werden müssen.

public string CreateBarChart()
{
Chart chart = new Chart();
chart.ChartType = ChartType.Bar;
chart.Title = "Bar Chart";
chart.XAxis.Title = "X Title";
chart.YAxis.Title = "Y Title";
chart.Sql = "select content_type as label, count(content_type) as x from ME_TABLE where ID={A.ID} group by content_type";
return this.Report.CreateChart(chart);
}

Wahlweise können Sie die Feldwerte auch abfragen und selbst einsetzen.

string id = this.Report.Record.GetString("A.ID");
chart.Sql = "select content_type as label, count(content_type) as x from ME_TABLE where ID=" + id + " group by content_type";

Sie können statt einem SQL die Daten auch explizit per Code übergeben.
Geben Sie bei Torten und Balkendiagrammen für Y einfach 0 an.

Beispiel:

public string CreateBarChart()
{
Chart chart = new Chart();
chart.ChartType = ChartType.Bar;
chart.Title = "Bar Chart";
chart.XAxis.Title = "X Title";
chart.YAxis.Title = "Y Title";
chart.DataItems.Add("A", 1, 0);
chart.DataItems.Add("B", 5, 0);
chart.DataItems.Add("C", 3, 0);
chart.DataItems.Add("D", 7, 0);
return this.Report.CreateChart(chart);
}

Ich bekomme die Meldung "The type or namespace name 'Chart' could not be found"

Wenn Sie diese Meldung bekommen wurde dieser Schritt vergessen:

Fügen Sie unter die Zeile "using Mum.Geo.ReportDesigner;"
eine neue Zeile "using Mum.Geo.ReportDesigner.Charts;" ein.

Beispiel:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XSystem;
using Mum.Geo.ReportDesigner;
using Mum.Geo.ReportDesigner.Charts;

namespace Report
{
...