0

Array „flach“ als JSON darstellen für echart-Diagramm

Ich habe eine etwas komplexere Abfrage, bei deren Ergebnis eine verschachtelte Array-Struktur zurückgegeben wird. Da ich das Ergebnis für ein echart-Diagramm benötige, dort aber nur flache JSON-Strukturen verarbeitet werden können, stehe ich auf dem Schlauch, wie ich das Ergebnis umwandele, oder umstelle, damit eine JSON-Struktur ausgegeben wird. Hier meine Abfrage: 

"Median-CIR-Grafik";
"Geschäftsjahr ermitteln;";
let myyear := number(Auswahl_GJ);
let res := record(Bundesanzeiger,myyear).'Geschäftsjahr';
"Datenbasis aufbereiten;";
let myquery := (select Bundesanzeiger);
let table := myquery['Geschäftsjahr' >= 2017 and 'Geschäftsjahr' <= res and
        'Median CIR AuM-Cluster' != null];
"Jahre und Cluster ermitteln;";
let years := sort(unique(table.'Geschäftsjahr'));
let clusters := sort(unique(table.'Cluster AuM'));
"Zwischenspeicher initialisieren;";
"Für jedes Jahr und Cluster Objekte manuell einfügen;";
let my := for y in years do
        for c in clusters do
            {
                year: y,
                aumcluster: c,
                cirmed: first(table['Geschäftsjahr' = y and 'Cluster AuM' = c].'Median CIR AuM-Cluster')
            }
        end
    end;
 

Als Ergebnis erhalte ich ein Array mit folgender Struktur: 

[[{"year":2017,"aumcluster":"1. AuM > 10 Mrd.€","cirmed":42.400666438570134},{"year":2017,"aumcluster":"2. AuM 2,5 - 10 Mrd.€","cirmed":58.09042242482174},{"year":2017,"aumcluster":"3. AuM 500 Mio. - 2,5 Mrd.€","cirmed":65.76453243470935},{"year":2017,"aumcluster":"4. AuM 250 - 500 Mio.€","cirmed":74.03760071620412},{"year":2017,"aumcluster":"5. AuM 50 - 250 Mio.€","cirmed":86.07907742998353},{"year":2017,"aumcluster":"6. AuM < 50 Mio.€","cirmed":96.17943268964243}],[{"year":2018,"aumcluster":"1. AuM > 10 Mrd.€","cirmed":57.29921130854022},{"year":2018,"aumcluster":"2. AuM 2,5 - 10 Mrd.€","cirmed":76.14896988906497}]]

Wie kann ich das umstellen, damit ich ein reines JSON-Ergebnis erhalte?

Frank

1 Antwort

null
    • Pro BoutiquenFonds GmbH
    • Eichelfr
    • vor 4 Tagen
    • Gemeldet - anzeigen

    Ich habe nun selbst einen Weg gefunden, dass Array in der gewünschten Form selbst zusammen zu bauen. Hier mein Lösungsansatz zusammen mit den echart-Parametern für einen Linienchart.

     

    "Median-CIR-Grafik mit Datenstring-Aufbau.";
    let myyear := number(Auswahl_GJ);
    let res := record(Bundesanzeiger,myyear).'Geschäftsjahr';
    let table := (select Bundesanzeiger)['Geschäftsjahr' >= 2017 and 'Geschäftsjahr' <= res and
            'Median CIR AuM-Cluster' != null];
    let years := sort(unique(table.'Geschäftsjahr'));
    let clusters := sort(unique(table.'Cluster AuM'));
    "Achsenbeschriftung vorbereiten:";
    let myYears := "";
    for y in years do
        myYears := myYears + "'" + text(y) + "',"
    end;
    let xAxis := "[" + substring(myYears, 0, length(myYears) - 1) + "]";
    "Serien-Daten als Text aufbauen pro Cluster:";
    let seriesData := "";
    for c in clusters do
        let values := "";
        for y in years do
            let v := first(table['Geschäftsjahr' = y and 'Cluster AuM' = c].'Median CIR AuM-Cluster');
            if v != null then
                values := values + replace(text(v), ",", ".") + ","
            else
                values := values + "null,"
            end
        end;
        let dataStr := "[" + substring(values, 0, length(values) - 1) + "]";
        seriesData := seriesData +
            "{
        name: '" +
            text(c) +
            "',
        type: 'line',
        label: { show: true },
        data: " +
            dataStr +
            "
      },"
    end;
    seriesData := "[" + substring(seriesData, 0, length(seriesData) - 1) + "]";
    "Komplette Chart-Option zusammenbauen:";
    let chartOptions := "
    {
      title: { text: 'Median CIR je Cluster & Jahr' },
      tooltip: { trigger: 'axis' },
      legend: { top: 'bottom' },
      xAxis: {
        type: 'category',
        data: " +
        xAxis +
        "
      },
      yAxis: {
        type: 'value',
        axisLabel: { formatter: '{value} %' }
      },
      series: " +
        seriesData +
        "
    }";
    "Diagramm anzeigen:";
    html(renderEChart("_cid_" + random(), chartOptions))