12

eCharts in Ninox nutzen

Der in Ninox integrierte dynamische Druckeditor lässt es zu, dass auch eCharts https://echarts.apache.org/en/index.html in der Druckausgabe integriert werden können.
Da es es sich dabei um einen per Apache Lizenz frei verfügbaren Quellcode handelt, hat ein findiger Ninox Partner 'Götje Ingenieure Partnerschaft' einen Weg gefunden diese eCharts auch für die Darstellung innerhalb von Ninox zu nutzen und damit die Ninox eigenen Charts zu erweitern.
Ich habe deshalb mal eine kleine Beispiel DB erstellt, welche zum einen aufzeigt wie Ninox Daten für die Darstellung aufbereitet werden, als auch eine beispielhafte Übersicht, welche Möglichkeiten der Darstellung sich bieten.
 

 

 

27 Antworten

null
    • Josef_Koenig
    • vor 2 Tagen
    • Gemeldet - anzeigen

    Ich würde gerne dieses 3D-EChart in NINOX einbinden:
    https://echarts.apache.org/examples/en/index.html#chart-type-bar3D

    Mit dem folgenden Code ist es mir gelungen, die Achsen mitsamt Beschriftung einzufügen. Allerdings zeigen sich keine Balken mit den Werten. Was habe ich falsch gemacht?

    Dabei sollen die Daten aus einer Tabelle mit dem Namen 'Ausgaben' und den Spalten 'Ausgabenart', 'Jahr' und 'Summe' dynamisch abgefragt werden.

    Ich finde diese Grafik deswegen so gut, weil sie es ermöglicht, den Verlauf mehrerer Parameter über die Zeit hinweg sehr übersichtlich darzustellen. Bitte um Hilfe! Danke!
     

    let Data := (select Ausgaben);
    let Jahre := unique(Data.Jahr);
    let Ausgabenarten := unique(Data.Ausgabenart);
    html("
    <script src='https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js'></script>
    <script src='https://cdn.jsdelivr.net/npm/echarts-gl@2/dist/echarts-gl.min.js'></script>
    
    <div id='Graph3D' style='width: 100%; height: 100%;'></div>
    
    <script type='text/javascript'>
    var chartDom = document.getElementById('Graph3D');
    var myChart = echarts.init(chartDom);
    
    // X-Achse (Jahre)
    var xAxisData = [" +
    for idx from 0 to count(Jahre) - 1 do
        let jahr := item(Jahre, idx);
        jahr +
        if idx < count(Jahre) - 1 then
            ", "
        end
    end +
    "];
    
    // Y-Achse (Ausgabenarten)
    var yAxisData = [" +
    for idx from 0 to count(Ausgabenarten) - 1 do
        "'" + item(Ausgabenarten, idx) + "'" +
        if idx < count(Ausgabenarten) - 1 then
            ", "
        end
    end +
    "];
    
    // Datenpunkte vorbereiten
    var seriesData = [" +
    for idx from 0 to count(Data) - 1 do
        let d := item(Data, idx);
        "{ value: [" + d.Jahr + ", '" + d.Ausgabenart + "', " + d.Summe + "] }" +
        if idx < count(Data) - 1 then
            ", "
        end
    end +
    "];
    
    var option = {
      tooltip: {},
      visualMap: { /* ... Einstellungen beibehalten ... */ },
      xAxis3D: {
        type: 'category',
        data: xAxisData
      },
      yAxis3D: {
        type: 'category',
        data: yAxisData
      },
      zAxis3D: {
        type: 'value' // Datenproperty hier entfernen
      },
      grid3D: { /* ... Einstellungen beibehalten ... */ },
      series: [{
        type: 'bar3D',
        data: seriesData,
        shading: 'lambert',
        // ... restliche Serien-Einstellungen ...
      }]
    };
    
    myChart.setOption(option);
    </script>
    ")
    

    Danke!
    Josef

      • pma_mgmt
      • gestern
      • Gemeldet - anzeigen

       

      Zum testen kannst du immer das html weglassen und dir mal anzeigen lassen. 

      Dein Problem ist, dass deine Arrays alle mindestens 1 set zu früh enden. X-Achse enthält kein 2024, Y-Achse enthält kein "Waschmittel"... Da du aber in der seriesData Waschmittel haben möchtest, kann Echarts diese Werte nicht anzeigen. Ebenso musst du verhindern, dass das Komma als letztes steht.

      var xAxisData = [2020, 2021, 2022, 2023, ];

      for idx from 0 to count(Jahre) do
          let jahr := item(Jahre, idx);
          jahr +
          if idx < count(Jahre) - 1 then
              ", "
          end
      end
      

      Für x müsstest du also entweder "to count(Jahre)" und dann innerhalb der schleife "-1" oder eben to count(Jahre)-1 und innerhalb -2 machen.

      Ich vermute aber so wie es oben gemacht ist, willst du es haben.

      Das rendert zumindest die Daten. Die Balken habe ich kurzerhand auf deinem Beispiel noch nicht hin bekommen - aber vllt hilft das schon als Start.

      Tipp: Nimm das was du als lösche "html( ...)" und lass dir das Ergebnis als Text ausgeben. Nimm den Text und wirf in in ChatGPT mit der Bitte, dir zu helfen, dass sich das Apache-ECharts richtig anzeigt. ChatGpt ist bei ECharts enorm hilfreich, während es bei Ninox-Funktionen nicht gut ist. (Da die Dokumentation der Ninox-Skriptsprache nicht so öffentlich ist, wie es bei Apache Echarts der Fall ist)

      • Josef_Koenig
      • gestern
      • Gemeldet - anzeigen

       Vielen Dank, ich probiere das mal