Crystal Reports Performance tips & trucs (28-2-2010)
I N H O U D S O P G A V E
Crystal Reports Performance tips & trucs (28-2-2010)
1.6 Kleinste tabel voorop in link
1.7 Vermijd gekoppelde subrapporten
Performance
Als een algemene regel geldt: laat de database server zoveel mogelijk het werk doen.
Via Performance information, te vinden onder het menu Report is allerlei informatie op te vragen:

Add Command
Via de optie Add Command is het mogelijk rechtstreeks SQL commando's in te voeren:


Als tussenfase is dit een leuke mogelijkheid. Voor de performance is het beter de command om te bouwen naar Views of Stored Procedures als de database daartoe de mogelijkheid biedt.
SQL Expression fields
- Mijd selecties op basis van Formula Fields; Crystal Reports kan deze Formulas vaak niet omzetten naar SQL ; gebruik zoveel mogelijk SQL Expression velden
- Mijd het gebruik van Built-in functies zoals ToText in selectiecriteria; probeer deze te vervangen door een SQL functie
- Mijd het gebruik van string subscript functies zoals {klanten.bedrijf}[1] = “A”; zoek een vergelijkbare functie in SQL

Dezelfde selectie op het tweede veld geeft een heel ander beeld:

Het criterium is opgenomen in het SQL statement en dat betekent dat de database server veel minder records hoeft te sturen.
Server-based grouping
Als je in het menu Database de optie Perform Grouping on Server aanvinkt, kan dat betekenen dat het groeperen ook op de database server plaatsvindt. Kijk naar de volgende SQL Query:

Er zijn evenwel nogal wat voorwaarden waaraan een rapport moet voldoen voordat het groeperen door de database server wordt uitgevoerd.
- Minstens één groep
- Detail sectie moet verborgen zijn
- In de group header of footers mogen alleen groepsvelden of summary velden staan
- Groepeer of selecteer niet op basis van Crystal Reports formula fields maar op SQL Expression fields
- Running Totals mogen niet op Detail gegevens gebaseerd zijn, alleen op Summary fields
- Het rapport mag geen Average of Distinct Count functies bevatten
- Er mag alleen Asc of Desc gesorteerd zijn; Specified order werkt niet
Geïndexeerde velden
Om de performance zo hoog mogelijk te houden is het van belang zoveel mogelijk te linken op geïndexeerde velden. In de praktijk is dat natuurlijk lang niet altijd mogelijk.

Klikken op de knop Index legend geeft een overzicht van de figuren:

Volgorde van de relaties
Wanneer we meer dan twee bestanden hebben gelinked, kunnen we op de knop Order links klikken.

We krijgen dan het volgende beeld:

In dit scherm kunnen we aangeven volgens welke volgorde de bestanden gelinked moeten worden en of die volgorde ook afgedwongen moet worden. Wel of niet afdwingen maakt het volgende verschil:
- Niet afgedwongen: oorspronkelijke volgorde wordt aangehouden

- Wel afgedwongen: gekozen volgorde wordt aangehouden

Het een en ander kan uitmaken voor de snelheid waarmee de data worden opgehaald.
Kleinste tabel voorop in link
Over het algemeen is het aan te raden de kleinste tabel voorop te zetten. In bovenstaande voorbeeld zou Klanten dan voorop moeten staan gevolgd door Orders en ten slotte Orderinformatie
We kunnen dat voorelkaar kijken door in het Links scherm van de Database Expert eerst de tabellen in de juiste volgorde te zetten en daarna de links aan te brengen:

Dubbelklikken op een link hoort dan dit te laten zien:

Klanten staat voor Orders.
Vermijd gekoppelde subrapporten
Indien mogelijk moeten gekoppelde subrapporten niet gebruikt worden. Deze leveren namelijk een heel slechte performance.
