Autor Thema: NthLargest (2) Funktion  (Gelesen 201 mal)

Jacky78

  • Experte
  • *****
  • Beiträge: 161
NthLargest (2) Funktion
« am: 22. Oktober 2018, 11:04 »
Hallo zusammen,

ich habe 3 verschiedene Zahlen in den Details:

LE's      LE#1     LE#2
164      164   209
209      
210      

Ich habe Eine Gruppe auf Materialnummer.
Die Spalte LE's faellt spaeter weg.

In der Spalte LE#1 zeige ich den niedrigsten Wert der LE's an mit der Formel: Minimum ({@LE#}, {MARA.MATNR})

Ich haette jetzt gern die naechstgroesse Zahl unter LE#2 angezeigt und dachte das ich das mit NthLargest(2,{@LE#}, MARA.MATNR) loesen koennte, aber egal was ich auch versuche es wird mir die 210 anstatt der 209 angezeigt.

Ich bin davon ausgegangen, dass die NthLargest(2...) bedeutet, dass die 2. groesste Zahl gesucht wird ? Was mach ich falsch ? Kann mir bitte jemand helfen ?

Vielen Dank und Viele Gruesse
Jacky

Jacky78

  • Experte
  • *****
  • Beiträge: 161
Re: NthLargest (2) Funktion
« Antwort #1 am: 22. Oktober 2018, 13:41 »
Ich habe jetzt herausgefunden, dass die 2 in der Formel nicht fuer die zweitgroesste Zahl steht, sondern fuer die Zahl an 2. Stelle, damit funktioniert zwar das Thema, aber bringt mich noch zu keener Loesung, weil ich u.a. auch noch andere Faelle in dem Report habe die z.B. wie folgt aussehen:

0001
0001
0001
0020
0100
0100
0789
0789
usw.

Von diesen Zahlen moechte ich eigentlich nur die "20" wissen, der Rest interessiert mich nicht. In diesem Beispiel steht sie an der 4. Stelle, ABER das muss so nicht sein. Die zweitgroesste Zahl oder auch zweitkleinste Zahl kann an beliebiger Stelle stehen.

Gibt es da irgendwie eine Schleife, die pruefen koennte ob die naechstfolgende Zahl grosser ist als die 1. Zahl, wenn ja, dann aber auch beim 1. Treffer aufhoert und die Zahl ausgibt ?

Vielleicht denke ich auch zu kompliziert ?!

Vielen Dank fuer Eure Hilfe

Alexander Hach

  • Administrator
  • Sr. Member
  • *****
  • Beiträge: 86
Re: NthLargest (2) Funktion
« Antwort #2 am: 22. Oktober 2018, 14:13 »
Hi Jacky,

hab dir da ein Bericht gebaut..
Die Berechnung findet im Detailbereich statt:

WhilePrintingRecords;
global numbervar kleinsteZahl;
global numbervar naechstkleinsteZahl;

if RecordNumber = 1 then
(
    kleinstezahl:= tonumber({Article_lookup.Sale_price});
    naechstkleinsteZahl:= kleinsteZahl;
);

if {Article_lookup.Sale_price} < kleinsteZahl then
(
    naechstkleinsteZahl:= kleinsteZahl;
    kleinsteZahl:= tonumber({Article_lookup.Sale_price});
);

kleinsteZahl;
Alexander Hach
Senior Consultant Business Intelligence

Windhoff Software Services GmbH
Am Campus 17 - 48712 Gescher

Jacky78

  • Experte
  • *****
  • Beiträge: 161
Re: NthLargest (2) Funktion
« Antwort #3 am: 23. Oktober 2018, 08:39 »
Hallo Alexander,

vielen Dank. Ich hab gestern Abend einiges probiert mit der Formel, aber war leider nicht erfolgreich. Meine Zahlen stehen ja leider auf Gruppenebene (Gruppe auf Mat-Nr) und nicht auf Detailebene. Ich dachte ich koennte die Formel eventuell anpassen, aber sobald ich das Gruppenfeld benutze, kommt die Meldung, dass ich zuviele Argumente anwende. Ich geh jetzt mal davon aus, dass diese Berechnung so nicht auf Gruppenebene funktioniert, korrekt ?

Viele Gruesse
Jacky

Alexander Hach

  • Administrator
  • Sr. Member
  • *****
  • Beiträge: 86
Re: NthLargest (2) Funktion
« Antwort #4 am: 23. Oktober 2018, 08:42 »
ja da muss anders gerechnet werden und eventuell muss der Auswertungszeitpunkt geändert werden ..
hast du für mich ein Beispielbericht ?
Alexander Hach
Senior Consultant Business Intelligence

Windhoff Software Services GmbH
Am Campus 17 - 48712 Gescher

Jacky78

  • Experte
  • *****
  • Beiträge: 161
Re: NthLargest (2) Funktion
« Antwort #5 am: 23. Oktober 2018, 13:13 »
Hallo Alexander,

mal schauen ob dir die PNG im Anhang reicht.

Item = Materialnummer
St# = Storage number (diese Spalte wird nachher ausgeblendet)
ST#1 = kleinste Nummer
ST#2 = zweitkleinste Nummer

Auf Gruppenebene habe ich z.B. bei dem Item GHI 4 x die kleinste Nummer = 120. Und erst an 4. Stelle kommt hier die zweitkleinste Zahl = 190

Ist das verstaendlich ?

Gruss Jacky

Jacky78

  • Experte
  • *****
  • Beiträge: 161
Re: NthLargest (2) Funktion
« Antwort #6 am: 23. Oktober 2018, 13:26 »
Hi Alexander,

Ich denke das ich was gefunden habe...und momentan siehst so aus als wenns auch funktioniert:

Detail:
shared numbervar array sl;
shared numbervar i;
if ubound(sl) <= 1 then
(
  if NOT({@ST#} IN sl) then
  (
   i := i + 1;
   redim preserve sl;
   sl := {@ST#};
  );
);

Gruppenkopf:
shared numbervar array sl := 0;
shared numbervar i := 0;

Gruppenfuss:
shared numbervar array sl;
if ubound(sl) = 2 then sl[2];


Jacky