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 Performance

1.1 Add Command

1.2 SQL Expression fields

1.3 Server-based grouping

1.4 Geïndexeerde velden

1.5 Volgorde van de relaties

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:

 

  1. Niet afgedwongen: oorspronkelijke volgorde wordt aangehouden

 

 

  1. 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.