Vraag : De waarden van TopN van Sumarize van het runnen van totalen in groepsfooter van Kristal meldt 2008

De heer/Mevrouw,

I wil de hoogste drie die waarden samenvatten in het lopende totale voorwerp worden gevonden dat ik in groepsfooter heb gehad van mijn kristalrapport en dat totaal generaal in rapportfooter geplaatst.  Ik kan twintig groepen hebben, maar ik wil slechts toevoegen de hoogste 3 die waarden in totaal lopen worden gevonden ik in rapportfooter cre�ërde.  Ik weet dit multipass \ evaluatiekwestie is - maar zeker kan dit done.
zijn

Antwoord : De waarden van TopN van Sumarize van het runnen van totalen in groepsfooter van Kristal meldt 2008

Ik denk nog mijn idee zou moeten gewerkt hebben, maar zolang u een oplossing vond.

 > Ik zeg clunky, omdat everytime ik wil veranderen
 > Waarde TopN ik bezig moet worden het veranderen van heel wat formule:

 Is de „verandering de waarde TopN“ verwijzend naar hoeveel van de hoogste waarden u samen wilt toevoegen, of misschien enkel hoeveel groepen in het rapport zijn?  Één van beide manier, het moet geen probleem zijn (tot een punt).

 Uw eerste formule gebruikt Redim om de grootte van de serie aan 4 te plaatsen, en dat wordt nooit veranderd in de formules die u postte.  Als uw rapport meer dan 4 groepen heeft, zult u een subscriptfout krijgen.  Misschien doet u iets die meer dan 4 groepen op een rapport, zoals het 4 kwart in een jaar nooit zal hebben.  Anders, zou u voor meer groepen moeten toestaan.

 Unidirectioneel dat zijn om eenvoudig het aantal in Redim tot het maximumaantal groepen behandelen te verhogen dat u denkt zult u ooit op een rapport hebben.  Een dynamischere optie moet de grootte van de serie zonodig verhogen.  Om dat te doen, verander als volgt enkel uw tweede formule:

//array evalueert in groepsfooter
WhilePrintingRecords;
numberVar serie rechts;
als GroupNumber > (rechts) dan telt
  Het Domein rechts van Redim [GroupNumber];
Rechts [GroupNumber]: = tonumber ({#period bruto});


 Dat gebruikt enkel Domein Redim om rechts wanneer noodzakelijk uit te breiden.  De optie van het Domein houdt de huidige inhoud (alle die waarden tot dat punt worden opgeslagen).

 Als het aantal groepen op het rapport een zorg was, zou dit het, tot een punt moeten behandelen.  De beperking is hier dat een serie 1000 elementen kan slechts hebben, zodat als u ooit een rapport met meer dan 1000 groepen hebt, die een probleem zullen zijn.  Maar aangezien de grens die uw huidige formules gebruikt 4 is, veronderstel ik dat een grens van 1000 waarschijnlijk geen probleem zal zijn.  : -)


 Als u over het veranderen van de formules om iets buiten de hoogste 3 waarden samen toe te voegen bezorgd bent, is dat iets dat u zou moeten behandelen, maar u kunt het vereenvoudigen.  Aangezien het nu is, sorteert de definitieve formule de waarden in de serie van het laagst tot het hoogst en voegt samen de definitieve 3 waarden toe, en het werkt slechts als er precies 4 groepen op het rapport zijn (dat ons terug naar die vroegere vraag, doet uw rapport _always_ heeft 4 groepen op het? brengt).  U kunt vereenvoudigen dat een beetje door de waarden van het hoogst te sorteren tot het laagst en de eerste 3 waarden samen toe te voegen.  Die manier het is hoeveel niet elementen van belang in de serie zijn (d.w.z. hoeveel groepen op het rapport zijn).  Voeg enkel samen de eerste elementen van N toe om uw totaal te krijgen.  Dat is betwistbaar een weinig eenvoudiger dan samen toevoegend laatste N.

 Om de serie van het hoogst tot het laagst te sorteren, verander enkel deze lijn in de definitieve formule

als rechts [counter2] > rechts [counter2 + 1] toen

   aan dit

als rechts [counter2] < RT="">
 IOW, verandert > aan <>
 Dan verander de laatste lijn:

toevoegen: = Rechts [1] +RT [2] +RT [3]


 FWIW, het is een zeer minder belangrijk ding, maar voeg toe de variabele in die formule geen echt doel dient.  U kon het enkel vergeten en de definitieve lijn zou kunnen zijn:

Rechts [2] +RT [3] +RT [4] // Uw originele formule

Rechts [1] +RT [2] +RT [3] // Mijn versie


 Ook, wanneer u verwees naar „het veranderen van heel wat formule“, bent u misschien gebruikend formules zoals degenen postte u om de topNwaarden voor meer dan één gebied samen toe te voegen, en sprak u over het ruilen van de formules voor elk van die gebieden als u N wilde veranderen?

 Als zo, kon u dat vereenvoudigen door N in een formule te zetten en die formule in de formules te gebruiken die samen de waarden toevoegen.  Bijvoorbeeld, cre�ër een genoemde formule topN die enkel zegt

3

 Een andere optie zou 3 in een variabele in de formule in uw rapportkopbal moeten zetten.  Één van beide manier, zou u dan die formule/variabele in uw definitieve formule gebruiken.  Hoe u gebruikt zal het afhangen van hoe uw serie wordt gesorteerd.  Als u het in dalende orde sorteert, zoals ik voorstelde, dan wilt u de eerste waarden van N samen toevoegen en u kon de definitieve lijn van de definitieve formule met dit enkel vervangen:

als {@topN} < Array="">  Redim Domein rechts [{@topN}];
Som (rechts)

 Dat zegt enkel dat als de serie meer elementen dan u heeft (b.v. heeft het 4 elementen en u slechts hoogste 3 willen), dan het Domein van gebruiksRedim de serie willen kleiner maken, verwerpend de ongewenste waarden.  Als de serie werkelijk minder elementen dan u heeft willen (b.v. heeft het 3 elementen en u hoogste 4 willen), hindert het niet met Redim.  Geen punt in het toevoegen van meer elementen die enkel 0 zullen zijn.
 Dan gebruikt het enkel Som om samen toe te voegen wat in de serie wordt verlaten.

 Werkelijk, zelfs als u niet de topNformule/het veranderlijke idee gebruikt, zou dit een goede manier kunnen zijn om het veranderen van het aantal toe te voegen waarden te behandelen.  De laatste lijnen zouden kunnen zijn:

als 3 < Array="">  Redim Domein rechts [3];
Som (rechts)


 Als u wilt veranderen hoeveel waarden worden toegevoegd, verander enkel die twee 3 in de nieuwe waarde.


 O.K., veronderstel ik die u zou moeten geven genoeg te kauwen.  : -)

 James
Andere oplossingen  
 
programming4us programming4us