0

Berechnung von Top10 Listen

Hallo zusammen,

folgender Code will nicht so richtig funktionieren. (siehe unten)

Was soll er machen?

Ich bin in einem Event und hier gab es Einnahmen und Ausgaben. Ich möchte jetzt eine Top10 Liste für die Einnahmen und Ausgaben. Ich suche mir nun also alle Kontakte, die ein "Kostenteil" bei der Veranstaltung hatten und eine Ausgabe waren. Das ganze lass ich gleich noch nach der Summe aller Ausgaben bei diesem Event sortieren. Die Liste lass ich dann auf 10 Kontakte kürzen.
Dann lasse ich es mir noch ausgeben mit dem Namen und der Summe aller Ausgaben bei dieser Veranstaltung. ...so der Plan.

Was funktioniert nicht?

let myKostenteile := ii.Kostenteile[Event = my and Anteilswert < 0]

 

nehme ich nur "Event = my" funktioniert es. Das kann aber problematisch werden, wenn der Kontakt nicht nur Ausgaben, sondern auch Einnahmen hatte. Bei obiger Code-Zeile werden mir dann aber alle Kostenteile die Negativ sind zusammen gerechnet. "Event=my" wird irgendwie nicht mehr berücksichtigt. Wo ist hier mein Denkfehler? Muss etwas in Klammern?

Kompletter Code:

 

let my := this;
let myKontakte := ((select Kontakte where cnt(Kostenteile[Event = my and Anteilswert < 0]) > 0) order by sum(Kostenteile[Event = my and Anteilswert < 0].Anteilswert));
let myTopKontakte := slice(myKontakte, 0, 10);
join(for ii in myTopKontakte do
    let myKostenteile := ii.Kostenteile[Event = my and Anteilswert < 0];
    let mySum := sum(myKostenteile.Anteilswert);
    rpad(ii.Name, 40, ".") + "" + lpad(text(mySum), 15, ".")
end, "
") +
"
" +
if cnt(myKontakte) > 10 then "..." end

 

Vielen Dank schonmal vorab!

 

Johannes

3 Antworten

null
    • john_eans
    • vor 20 Stunden
    • Gemeldet - anzeigen

    Was mich noch mehr verwirrt:
    Folgender Code scheint zu funktionieren...
     

    let my := this;
    let myKontakte := ((select Kontakte where cnt(Kostenteile[Event = my and Anteilswert < 0]) > 0) order by sum(Kostenteile[Event = my and Anteilswert < 0].Anteilswert));
    let myTopKontakte := slice(myKontakte, 0, 10);
    join(for ii in myTopKontakte do
        let myKostenteile1 := ii.Kostenteile[Event = my];
        let myKostenteile := myKostenteile1[Anteilswert < 0];
        let mySum := sum(myKostenteile.Anteilswert);
        rpad(ii.Name, 40, ".") + "" + lpad(text(mySum), 15, ".")
    end, "
    ") +
    "
    " +
    if cnt(myKontakte) > 10 then "..." end
    

    Wenn ich den Filter also zweistufig baue, kommt genau das erwartete Ergebnis.
     

    Kostenteile[Event = my and Anteilswert < 0]
    

    die Kombination "and" scheint irgendwie nicht das zu machen, was ich erwarte...

    Danke für Input :-)

      • Leonid_Semik.2
      • vor 16 Stunden
      • Gemeldet - anzeigen

       
      Interessant, Ich habe jetzt bei mir Nachgebaut und dein erste Code läuft richtig. (Mac chrome und Mac App). Auch alle summen sind korrekt. Es ist um so verwirrender weil du denselben skript auch im select teil verwendest. Welches Plattform/Gerät nutzt du?

      • john_eans
      • vor 10 Stunden
      • Gemeldet - anzeigen

       
      mein obiger Code hatte noch falsch sortiert (musste ich eben feststellen), ansonsten aber funktioniert...

      Ich hatte heute Mittag Windows Edge und Windows Chrome ausprobiert, es eben aber auch auf Mac Safari, Mac Chrome und Mac App getestet.

      Folgender Code funktioniert:
      (also das "stufenweise" Filtern)
      Hier wird genau die Summe aller Ausgaben in genau dem Event in dem ich mich befinde angezeigt.

      let my := this;
      let myKontakte := ((select Kontakte where cnt(Kostenteile[Event = my and Anteilswert < 0]) > 0) order by (
              let myKostenteile01 := Kostenteile[Event = my];
              let myKostenteile02 := myKostenteile01[Anteilswert < 0];
              sum(myKostenteile02.Anteilswert)
          ));
      let myTopKontakte := slice(myKontakte, 0, 10);
      join(for ii in myTopKontakte do
          let myKostenteile01 := ii.Kostenteile[Event = my];
          let myKostenteile02 := myKostenteile01[Anteilswert < 0];
          let mySum := sum(myKostenteile02.Anteilswert);
          rpad(ii.Name, 40, ".") + "" + lpad(text(mySum), 15, ".")
      end, "
      ") +
      "
      " +
      if cnt(myKontakte) > 10 then "..." end
      

      Folgender Code funktioniert nicht:
      (sollte aber eigentlich genau das gleiche machen)
      Hier werden alle Ausgaben des Kontakts angezeigt. Es funktioniert zwar, dass nur Ausgaben summiert werden, aber eben nicht nur die aus dem Event, in dem ich mich befinde.

      let my := this;
      let myKontakte := ((select Kontakte where cnt(Kostenteile[Event = my and Anteilswert < 0]) > 0) order by sum(Kostenteile[Event = my and Anteilswert < 0].Anteilswert));
      let myTopKontakte := slice(myKontakte, 0, 10);
      join(for ii in myTopKontakte do
          let mySum := sum(ii.Kostenteile[Event = my and Anteilswert < 0].Anteilswert);
          rpad(ii.Name, 40, ".") + "" + lpad(text(mySum), 15, ".")
      end, "
      ") +
      "
      " +
      if cnt(myKontakte) > 10 then "..." end
      

      Ich nutze die Funktion in einer "privaten" Instanz. Also mit "https://meinedomain.ninoxdb.de"

      VG

Content aside

  • vor 10 StundenZuletzt aktiv
  • 3Antworten
  • 22Ansichten
  • 2 Folge bereits