maandag 24 februari 2014

Crystal Reports: geavanceerde kruistabelfuncties

We kunnen op verschillende manieren nog meer gegevens aan onze kruistabellen toevoegen.Hieronder wordt een aantal geavanceerde kruistabelfuncties beschreven. Alle voorbeelden zijn gebaseerd op de Noordenwind database.

1.1  Calculated Members

We kunnen nieuwe rijen of kolommen aan de kruistabel toevoegen door een Calculated Member in te voegen. Deze rijen of kolommen kunnen aangepaste berekeningen bevatten (bijvoorbeeld het verschil in verkoop tussen twee regio's) of kunnen voor de opmaak worden gebruikt (bijvoorbeeld om de drie regels een lege rij invoegen om de leesbaarheid te vergroten).

We hebben de keuze om geheel naar wens Calculated Formula's te maken en kunnen aangeven of deze eenmaal moeten worden weergegeven of moeten worden herhaald in de kruistabel.

Verwante onderwerpen

·         Calculated Formulas
·         Header Formula's
·         Insertion Formula's
·         Column /Row Value Formula's

1.1.1 Een Calculated Member toevoegen aan de kruistabel

Voor onderstaande voorbeeld hebben we de tabellen Categorieën, Producten, Orders en Orderinformatie gebruikt.

§   Maak twee Formula Fields:

  Omzet:{Orderinformatie.Prijs per eenheid}*{Orderinformatie.Hoeveelheid}

  Jaar: year({Orders.Orderdatum})

§   Maak een kruistabel als volgt:


§   Klik op OK.
§   Klik in de kruistabel met de rechtermuisknop op de rij- of kolomkop die we willen gebruiken als eerste waarde voor het Calculated Member.


Als we bijvoorbeeld een Calculated Member willen maken voor het verschil tussen 1996 en 1997,gebruiken we de formule Verschil 1997 - 1996. In dit voorbeeld klikken we met de rechtermuisknop op de kop 1996.
§   Wijs in het snelmenu de optie Calculated Member aan.
§   Selecteer de gekozen waarde als de eerste waarde.
Klik in de kruistabel met de rechtermuisknop op 1997 als tweede waarde.
§   Wijs in het snelmenu de optie Calculated Member aan.
§   Selecteer de gewenste berekening: Difference 1997 - 1996.

In de kruistabel verschijnt een rij of kolom met daarin het resultaat van de geselecteerde berekening.

§   Klik met de rechter muisknop op één van de nieuwe velden:



§   Klik Edit Calculation Formula.

We zien dan de formula:

  //The calculation formula is used in place of the summaries in //Calculated Members.
  // This calculation formula must return a/an Currency value.
  GridValueAt(CurrentRowIndex, GetColumnPathIndexOf(1997.00), CurrentSummaryIndex) -
  GridValueAt(CurrentRowIndex, GetColumnPathIndexOf(1996.00), CurrentSummaryIndex)

We zien hier dan dat de functie GridValueAt het snijpunt kiest van de huidige rij (CurrentRowIndex) en de kolom waarin zich het jaar bevindt (GetColumnPathIndexOf(1996.00)) en van dat snijpunt de aanwezige Summary (CurrentSummaryIndex) kiest. Zo worden dus in deze formule voor elke regel de Summary 1997 en 1996 van elkaar afgetrokken.

1.1.2 Een lege rij of kolom toevoegen aan de kruistabel

§   Klik in de kruistabel met de rechtermuisknop op de kop vóór de plek waar we de lege kolom willen invoegen.
§   Wijs in het snelmenu de optie Calculated Member aan.
§   Klik op Kolom invoegen.

Er wordt een lege kolom in de kruistabel weergegeven.

§   Klik op één van de nieuwe belden.
§   Kies Calculated Member  Þ Edit Calculation Formula.
§   Typ daar de Formula:

  GridValueAt(CurrentRowIndex, GetColumnPathIndexOf(1998.00), CurrentSummaryIndex) -
  GridValueAt(CurrentRowIndex, GetColumnPathIndexOf(1997.00), CurrentSummaryIndex)

Het resultaat moet hetzelfde zijn als in de vorige paragraaf (10.1.1).

1.1.3  De verwerkingsvolgorde van berekende leden wijzigen

§   Klik met de rechtermuisknop in de linkerbovenhoek van de kruistabel.
§   Wijs in het snelmenu de optie Geavanceerde berekeningen aan en klik op Calculated Member.

De Expert voor Calculated Members  wordt weergegeven.



Bij beide zien we nog geen naam.

§   Noem de eerste Kolom na 1996 en de tweede Kolom na 1997

Bij Edit Insertion Formula zien we:

  //The insertion formula determines where this calculated member is //inserted. It must return a Boolean value.
  GetColumnGroupIndexOf(CurrentColumnIndex) = 1 and GridRowColumnValue("@year") = 1996.00

Bij Edit Column Value Formula staat niets. Bij Edit Header Formula treffen we de eerder gemaakte headers aan.

Via dit scherm hadden we ook een kolom kunnen toevoegen. Bijvoorbeeld na 1998. Daar hadden we dan de volgende Formula voor moeten gebruiken:

  GetColumnGroupIndexOf(CurrentColumnIndex) = 1 and GridRowColumnValue("@year") = 1998.00

§   Gebruik de pijlen in het vak Calculated Members om de verwerkingsvolgorde van de Calculated Members te wijzigen.
§   Klik op OK om de wijzigingen op te slaan en terug te gaan naar het rapport.

De waarden van de Calculated Members worden opnieuw berekend in de kruistabel.

Opmerking:
Wijzigingen in de volgorde waarin Calculated Members worden verwerkt, hebben geen invloed op het vernieuwen van de database.

1.1.4  Calculating formula's

Calculating formula's zijn wiskundige formules die door Crystal Reports worden gebruikt om de celwaarden van Calculated Members te bepalen. We kunnen een keuze maken uit de vooraf gedefinieerde formules of zelf formules ontwerpen in de Formula workshop.

De vooraf gedefinieerde formules zijn als volgt:

·         Sum of
·         Difference of
·         Product of
·         Quotient of

Deze zien er in de Formula workshop zo uit:

  GridValueAt(CurrentRowIndex, GetColumnPathIndexOf(1998.00), CurrentSummaryIndex) +
  GridValueAt(CurrentRowIndex, GetColumnPathIndexOf(1997.00), CurrentSummaryIndex)

Uiteraard moeten we dan respectievelijk  -, * of / invullen.

Crystal Reports bevat verder diverse functies die we kunnen gebruiken om zelf formules te ontwerpen.


Calculation Formula bewerken

§   Klik in het Calculated Member dat we willen bewerken met de rechtermuisknop op een willekeurige cel, maar niet op de kop.
§   Wijs in het snelmenu de optie Calculated Member  aan.
§   Klik op Edit Calculation Formula.

De Formuleworkshop wordt weergegeven.

§   Geef in de Formuleworkshop de gewenste berekeningsformule op.
§   Klik op Opslaan en sluiten om terug te keren naar het rapport.

Het resultaat van de nieuwe berekeningsformule wordt in het Calculated Member weergegeven.

1.1.5  Header Formula's

Header Formula's bepalen de zichtbare rij- of kolomkoptekst van een Calculated Member.


 Edit Header Formula

§   Klik met de rechtermuisknop op de koptekst van het Calculated Member dat we willen bewerken.
§   Wijs in het snelmenu de optie Calculated Member aan.
§   Klik op Edit Header Formula.

De Formuleworkshop wordt weergegeven.

§   Geef in de Formuleworkshop de gewenste naam op tussen aanhalingstekens.

Opmerking:
We kunnen de Header ook opgeven met een formule. Een Header Formula moet een tekenreeks retourneren.

§   Klik op Opslaan en sluiten om terug te keren naar het rapport.

In de kop van het Calculated Member wordt het resultaat van de Header Formula  weergegeven.

1.1.6 Waardeformules

Als we in een formule naar een Calculated Member willen verwijzen, moeten we een waarde aan het lid toewijzen. Om deze reden kunnen we met een waardeformule waarden toewijzen aan Calculated Members.


Edit Column / Row Value Formula

§   Klik met de rechtermuisknop op de Header van de Calculated Member die we willen bewerken.
§   Wijs in het snelmenu de optie Calculated Member aan.
§   Klik al naar gelang we een rij of kolom willen bewerken respectievelijk op Edit Row Value Formula of Edit Column Value Formula.

De Formula workshop wordt weergegeven.

§   Geef in de Formula workshop de gewenste waarde op.

Opmerking:
We kunnen de waarde ook opgeven met een formule. Een waardeformule moet van hetzelfde type zijn als het groepeerveld voor rijen of kolommen waarin de formule wordt ingevoegd.

§   Klik op Opslaan en sluiten om terug te keren naar het rapport.

In het Calculated Member wordt het resultaat van de Value Formula weergegeven.

Opmerking:
Als we de Header Formula van een Calculated Member niet bewerkt hebben, wordt het resultaat van de Value Formula in de zichtbare koptekst weergegeven. Wanneer we de Header Formula bewerkt hebben, wordt de Value Formula als de zichtbare koptekst hierdoor overschreven.

1.1.7  Insertion Formula's

Insertion Formula's  bepalen waar een Calculated Member in een kruistabel moet worden weergegeven. Meestal wordt een Calculated Member slechts eenmaal weergegeven. We kunt echter ook aangeven dat het lid op meerdere locaties of in een herhaald patroon moet worden weergegeven.


Edit Insertion Formula

§   Klik met de rechtermuisknop op de koptekst van het Calculated Member dat we willen bewerken.
§   Wijs in het snelmenu de optie Calculated Member aan.
§   Klik op Edit Insertion Formula.

De Formula Workshop wordt weergegeven.

§   Geef in de Formula Workshop de gewenste formule op.

Met de volgende formule bijvoorbeeld, wordt een Calculated Member ingevoegd na het jaar 1998:

  GridRowColumnValue("@year") = 1998.00

§   Klik op Opslaan en sluiten om terug te keren naar het rapport.

Het Calculated Member wordt weergegeven op de locaties die in de Insertion Formula zijn gedefinieerd.

1.2  Embedded Summary

We kunnen een extra berekening aan de kruistabel toevoegen door een Embedded Summary in te
voegen. In tegenstelling tot Calculated Members, worden er met Embedded Summaries geen rijen of kolommen aan de kruistabel toegevoegd. In plaats daarvan worden er extra berekeningen aan de cellen van de kruistabel toegevoegd. Zo kunnen we in een rapport met regionale verkoopcijfers bijvoorbeeld een berekening voor elke regio invoegen, waarin het percentage van de totale landelijke verkoop wordt weergegeven.

1.2.1  Een Embedded Summary toevoegen aan de kruistabel

§   Klik in de kruistabel met de rechtermuisknop op een willekeurige cel, maar niet op de kop.
§   Wijs in het snelmenu de optie Embedded Summary aan.
§   Klik op Insert Embedded Summary.



Een lege Embedded Summary wordt in de kruistabel weergegeven.

§   Klik in de Embedded Summary met de rechtermuisknop op de tekst Edit this Formula.
§   Wijs de optie Embedded Summary aan.
§   Klik op Edit Calculation Formula.

De Formula Workshop wordt weergegeven.

§   Geef in de Formula Workshop de gewenste Calculated Formula op.

  GridValueAt (CurrentRowIndex, CurrentColumnIndex ,0 ) / sum({@omzet})*100

Deze Formula berekent de verhouding tussen elke lokale Summary en het generaal totaal.

§   Klik op Opslaan en sluiten om terug te keren naar het rapport.

In de Embedded Summary wordt het resultaat van de nieuwe berekeningsformule weergegeven.

1.2.2  De verwerkingsvolgorde van Embedded Summaries wijzigen

Als de kruistabel meerdere Embedded Summaries bevat, kan de volgorde waarin deze worden
verwerkt invloed hebben op het resultaat. We kunnen de volgorde waarin Embedded Summaries worden verwerkt, wijzigen in het dialoogvenster Embedded Summaries.

§   Klik met de rechtermuisknop in de linkerbovenhoek van de kruistabel.
§   Wijs in het snelmenu de optie Geavanceerde berekeningen aan.
§   Klik op Embedded Summary.

Het dialoogvenster Embedded Summaries  wordt weergegeven.


§   Gebruik de pijlen in het vak Summaries om de verwerkingsvolgorde van de Summaries te wijzigen.
§   Klik op OK om de wijzigingen op te slaan en terug te gaan naar het rapport.

De waarden van de Embedded Summaries  worden in de kruistabel opnieuw berekend in de nieuwe verwerkingsvolgorde.

Opmerking:
Wijzigingen in de verwerkingsvolgorde van Embedded Summaries hebben niet tot gevolg dat er een vernieuwing via de database wordt uitgevoerd.
Een reactie plaatsen