0

JSON Array sortieren und nur erste 10 Werte selektieren/filtern

Ich möchte ein JSON Array welches ich über eine ninox Abfrage erstellt habe nach einem Feld (z.B. Umsatz) in dem Array sortieren. Das Array besteht aus mehreren Feldern. Bisher stehe ich hier etwas auf dem Schlauch. Ein zweiter Schritt ist, dass ich aus dem Array lediglich die ersten 10 Werte extrahieren möchte, nachdem ich sortiert habe. Wie kann ich das anstellen?

5 Antworten

null
    • m2apla gmbh
    • Etienne_Scherrer
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Die Sortierung kannst du bereits innerhalb des Selects mit "order by" bewerkstelligen und wenn du dann nur die ersten 10 Werte brauchst, kannst du das mit der Funktion slice (https://docs.ninox.com/de/skripten/funktionen-ueberblick/funktionen/slice) machen.

    Insgesammt kann das dann etwa so aussehen:
     

    slice((select Verkauf order by Umsatz).{customer: Kunde, sales: Umsatz}, 0,10)
    
      • Pro BoutiquenFonds GmbH
      • Eichelfr
      • vor 1 Jahr
      • Gemeldet - anzeigen

       

      Hallo Etienne,

      danke für deine Unterstützung. Den slice-Befehl konnte ich bereits erfolgreich integrieren. Ich habe aber noch ein Problem mit der Sortierung. Im Select (vTableSelect) kann ich noch nicht sortieren, da erst im vObj1 die Zahl ermittelt wird (vUG) nach der ich gerne absteigend sortieren möchte. Nachstehend mein bisheriges Script, welches die ersten 10 Warengruppen mit dem jeweiligen Gruppenumsatz liefert, allerdings noch nicht sortiert nach dem Feld vUG.

      let myd := Datum;
          let mysum := unique((select 'Waren_Historie')[Datum = myd]);
          let vTableSelect := unique((select 'Waren_Historie')[Datum = myd].text('Gruppe'));
          let vArray1 := [];
          let vArrayObj1 := [];
          let vObj1 := {};
          for i in vTableSelect do
              vObj1 := {
                      vG: unique(mysum['Gruppe' = i].text('Gruppe')),
                      vUG: sum(mysum['Gruppe' = i].'Umsatz')
                  };
              vArrayObj1 := [vObj1];
              vArray1 := array(vArray1, vArrayObj1)
          end;
          let vBody := {
                  vTabAuM: slice(vArray1, 0, 10)
              };
          {
              vTbl: vBody
          }

       

      Frank

      • m2apla gmbh
      • Etienne_Scherrer
      • vor 1 Jahr
      • Gemeldet - anzeigen

       

      Hallo Frank

       

      Ich habe mir deinen Code kurz angeschaut, ich glaube mit diesem Code solltest du auf das erwünschte Resultat kommen.

      let myd := Datum;
      let historyOfDay := (select 'Waren_Historie' where Datum = myd);
      let allGroups := unique(historyOfDay.Gruppe);
      let result := (for currentGroup in allGroups do
      let allEntriesOfGroup := historyOfDay[Gruppe = currentGroup];
      {vG: text(currentGroup), vUG: sum(allEntriesOfGroup.Umsatz)}
      end order by -number(vUG));
      slice(result,0,10)
      

      Ich hoffe du kommst damit weiter.

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

       sehr cool. Mirko

    • Pro BoutiquenFonds GmbH
    • Eichelfr
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Echt Bombe!  funktioniert einwandfrei. Ist sicher auch für andere Nutzer, die viel mit Auswertungen und Gruppierungen arbeiten, ein hilfreicher Lösungsansatz . Nochmals vielen Dank! Frank

Content aside

  • Status Answered
  • vor 1 JahrZuletzt aktiv
  • 5Antworten
  • 141Ansichten
  • 3 Folge bereits