Fråga : Sumarize TopN värderar från rinnande slutsummor i gruppfooter av kristallrapporter 2008

Herrnen/översittare,

I önskar att resumera de bästa trena värderar funnit i springslutsumman anmärker mig har i gruppfooteren av min crystal rapport och att förlägga att tusen dollarslutsumman in i rapportfooteren.  Jag kan ha tjugo grupper, men jag önskar endast att tillfoga de bästa 3na värderar funnit i springslutsumman som jag skapade i rapportfooteren.  Jag vet att denna är multipass \ utvärderingen utfärdar - men säkert denna kan vara done.
" klar "

Svar : Sumarize TopN värderar från rinnande slutsummor i gruppfooter av kristallrapporter 2008

Funderare för stillbild I som min idé bör ha fungerat, men, så länge som du grundar en lösning.

 > Clunky något att säga I, därför att, everytime jag önskar att ändra
 > TopN värderar mig måste att få upptagen ändra en raddaformel:

 Är ”ändring TopNen värderar” att se till, hur många av det bästa värderar dig önskar att tillfoga tillsammans, eller hur många grupperar kanske precis är i rapporten?  Endera långt, det måste inte att vara ett problem (upp till en peka).

 Din första formel använder Redim till uppsättningen storleksanpassa av samlingen till 4, och det ändras aldrig i formlerna som du postade.  Om din rapport har mer än 4 grupper, du ska får ett subscript fel.  Kanske du gör något, som ska har aldrig mer än, 4 grupper på en rapport, gillar 4na inkvarterar i ett år.  Annorlunda du bör låta för mer grupper.

 One-way som ska behandlas, att skulle var till enkelt förhöjning numrera i Redimen till maximat, numrerar av grupper, att dig funderare som du ska någonsin, har på en rapport.  Ett mer dynamisk alternativ är till förhöjning storleksanpassa av samlingen som nödvändigt.  Ändra precis ditt understöder formel som följer att göra det:

//array utvärderar i gruppfooter
WhilePrintingRecords;
numberVar samling RT;
om GroupNumber > räknar (RT) därefter
  Redim sylt RT [GroupNumber];
RT [GroupNumber]: = tonumber ({#periodbruttot});


 Den rättvisa bruksRedim sylt som utvidgar RT, när det är nödvändigt.  Syltalternativuppehällena som strömmen tillfredsställer (alla av värderar lagrat upp till som pekar).

 Om numrera av grupper på rapporten var ett bekymmer, denna bör ta omsorg av den, upp till en peka.  Begränsningen här är att en samling kan endast ha 1000 beståndsdelar, så, om du har någonsin en rapport med mer än, 1000 grupper, som ska, är ett problem.  Men, sedan begränsa using dina strömformler är 4, I-förmiddag som gissar att en begränsa av 1000 som ska antagligen för att inte vara ett problem.  : -)


 Om du angå om att ändra formlerna för att tillfoga tillsammans något annat, än de bästa 3na värderar, det är något som du skulle måste att handla med, men du kan förenkla den.  Som det är nu, finalformeln sorterar värderar i samlingen från lowest till highest och tillfogar tillsammans finalen 3 värderar, och den fungerar endast, om det finns exakt 4 grupper på rapporten (som kommer med som oss, baksida till den tidigare ifrågasätter, gör din rapport_always_ har 4 grupper på det?).  Du kan förenkla att a bet, genom att sortera värderar från highest till lowest och tillfoga tillsammans de första 3na värderar.  Ditåt det betyder inte, hur många beståndsdelar är i samlingen (ie. var på rapporten), hur många grupperar.  Tillfoga precis tillsammans de första n-beståndsdelarna för att få din slutsumma.  Det är arguably ett lite enklare än tillfoga tillsammans jumbon N.

 Ändra precis detta fodrar i finalformeln att sortera samlingen från highest till lägst

om RT [counter2] > RT [counter2 + 1] därefter

   till detta

om RT [counter2] < RT="">
 IOW ändrar > till <>
 Ändra därefter jumbon fodrar:

tillfoga: = RT [1] +RT [2] +RT [3]


 FWIW det är mycket ett minderårigting, men servarna för formeln för tillfogavariabeln däri som inga verkliga ämnar.  Du kunde precis glömma att den och slutraden kunde vara:

RT [2] +RT [3] +RT [4] // din original- formel

RT [1] +RT [2] +RT [3] // min version


 Också, då du såg ”ändra en raddaformel”, är du användande den kanske formelnågot liknande de som du postade för att tillfoga tillsammans topNen värderar för mer, än en sätter in, och du talade om att ändra formlerna för alla de sätter in, om du önskade att ändra N?

 Om så, du kunde förenkla det, genom att sätta net i en formel, och genom att använda den formel i formlerna, som tillfogar tillsammans, värderar.  Skapa en formel som namnges topN som precis något att säga, till exempel

3

 Ett annat alternativ skulle är att sätta 3na i en variabel i formeln i din rapporttitelrad.  Endera långt, du skulle därefter bruk den formel/variabel i din finalformel.  Hur du använder, den ska beror på hur din samling sorteras.  Om du sorterar den, i att stiga ned, beställer, som jag föreslogg, då du önskar att tillfoga tillsammans det första net värderar och, du kunde precis byta ut slutraden av finalformeln med denna:

om {@topN} < Array="">  Redim sylt RT [{@topN}];
Summa (RT)

 Det rättvisa något att säga som, om samlingen har mer beståndsdelar än dig att önska (eg. den har 4 beståndsdelar och dig endast att önska de bästa 3na), då använder den Redim sylten för att göra samlingen mindre och att kassera det oönskat värderar.  Om samlingen har faktiskt mer få beståndsdelar än dig att önska (eg. den har 3 beståndsdelar, och du att önska de bästa 4na), det besvärar inte med Redimen.  Inget peka, i att tillfoga mer beståndsdelar som ska är precis 0.
 Därefter den använder precis summa för att tillfoga tillsammans vad lämnas i samlingen.

 Faktiskt om även du inte använder den topNformel-/variabelidén, denna kunde vara en goda långt som behandlar att ändra numrera av, värderar för att tillfoga.  Jumbon fodrar kunde vara:

om sylt < Array="">  RT [3] för 3 Redim;
Summa (RT)


 Om du önskar att ändra hur många värderar, tillfogas, ändrar precis de två 3 till det nytt värderar.


 REKO jag gissar som bör ge på dig nog till tuggningen.  : -)

 James
Andra lösningar  
 
programming4us programming4us