veenhuijsen.eu

formules in Cognos

Hieronder enkele formules die met enige regelmaat nuttig kunnen zijn bij het gebruik van Cognos Report Studio.

Berekening toevoegen

Voeg een extra kolom toe aan je rapport met een berekening door in je paginavenster (of queryvenster) te kiezen voor Toolbox. Sleep dan een Queryberekening in je lijst. Geef de berekening een naam. Vervolgens kan je een expressie/functie toevoegen. schermafdruk expressiedefinitie

IF … THEN … ELSE …

IF (voorwaarde) THEN (gevolg als waar) ELSE (gevolg als niet waar)
Voorbeeld:
IF ([Veldnaam] > 100)
THEN (‘groot’)
ELSE (‘klein’)
IF-functies kunnen ook genest worden:
IF ([Leeftijd] <56)
THEN ( IF ([Leeftijd] <30) THEN ( ‘0-29’) ELSE (’30-55’) )
ELSE ( IF ([Leeftijd] <76) THEN ('56-75') ELSE ('76+') )

CASE WHEN … THEN … ELSE … END

CASE WHEN (voorwaarde1) THEN (gevolg1) WHEN (voorwaarde2) THEN (gevolg2)  ELSE [catalogusprijs] END
Voorbeeld:
CASE
WHEN ([Leeftijd] <30)
THEN ('0-29')
WHEN ([Leeftijd] <56)
THEN ('30-55')
WHEN ([Leeftijd] <76)
THEN ('56-75')
ELSE ('76+')
END

|| (samenvoegen)

[Veld1] || [Veld2]
Twee verticale strepen naast elkaar || laat in Cognos twee kolommen met tekst samenvoegen. Dit is niet de enige mogelijkheid, je kunt bij tekstvelden ook + gebruiken. Staan beide velden opgeslagen als numerieke waarden, dan zorgt || ervoor dat ze achter elkaar worden weergegeven, + telt de waarden bij elkaar op. Dit werkt alleen als beide kolommen gevuld zijn. Is dit niet het geval, gebruik dan een IF…THEN…ELSE… constructie erbij:
Voorbeeld:
[STRAAT]||’ ‘||[HUISNUMMER] || IF ([HUISLETTER] IS NULL) THEN (‘’) ELSE ([HUISLETTER])


COALESCE(…)

coalesce ( [Veld1];[Veld2];… )
Coalesce haalt de gegevens uit expressie1, is expressie1 leeg, dan wordt expressie2 getoond. Er moeten minimaal twee expressies opgenomen worden, maar het mogen er meer zijn.
Te gebruiken als alternatief voor ‘IF null then…’ Dezelfde expressie zonder if:
[STRAAT]||’ ‘||[HUISNUMMER] ||COALESCE (([HUISLETTER];’ ‘)

LPAD / RPAD

lpad ( tekenreeks_expressie1, geheelgetal_expressie [ , tekenreeks_expressie2 ] )
Vult de tekenreeks_expressie1 links (lpad) of rechts (rpad) aan tot het aantal tekens wat staat in geheelgetal_expressie. De tekens waarmee aangevuld wordt, staan in tekenreeks_expressie2.
Voorbeeld:
lpad([HUISNUMMER];5;’0’) geeft alle huisnummers weer in vijf posities: 00048.
Voorlooptekens verwijderen kan met LTRIM(..) of RTRIM(…).

SUBSTR([TEKST];beginpositie;aantal tekens)

substr ( tekenreeks_expressie , geheelgetal_expressie1 [ , geheelgetal_expressie2 ] )
Geeft een gedeelte van een tekst weer, vanaf een in te geven positie. Als het aantal tekens leeg gelaten wordt, wordt de tekst tot het einde weergegeven. Een negatief getal als beginpositie geeft de tekens van achteraan de tekst.

TO_CHAR, TO_DATE, TO_NUMBER, CAST

Zet het veld om naar een andere indeling. Dit is goed te gebruiken als een bepaalde functie een veld in een bepaalde indeling verwacht of vereist. Of als je een veld in datum+tijd indeling wilt omzetten naar alleen datum.
Voorbeeld omzetten numerieke datum 20120218 naar datumveld 18-feb-2012:
CAST(
SUBSTR([DATUMVELD];1;4) + ‘-‘ +
SUBSTR([DATUMVELD];5;2) + ‘-‘ +
SUBSTR([DATUMVELD];7;2)
; date)
Dit werkt uiteraard niet als er waarden voorkomen die niet omgezet kunnen worden, bijvoorbeeld 19650000 als geboortedatum.

EXTRACT(Year;{sysdate})

Geeft alleen het jaar van een datumveld, in dit geval van de systeemdatum. Handig om te gebruiken om te filteren op een jaar, of gegevens van een jaar te vergelijken.

Rijnummer toevoegen

Voeg op de paginaweergave vanuit de toolbox het element button rijnummer toevoegen toe aan de lijst.
Als je het rapport nu uitvoert, zie je een telling voor het aantal rijen.


#/* commentaar */#

Bij zowel filters als expressies  kun je commentaar toevoegen. De tekst tussen #/* en */# wordt genegeerd bij het uitvoeren van de functie.
schermafdruk commentaar bij een expressiedefinitie

Layoutberekeningen

<%Reportpath ()%)>
/content/folder[@name='Gemeente Zevenaar']/folder[@name='GISVG'] /folder[@name='Rapportages in productie']/folder[@name='HEFFINGEN'] /folder[@name='Incasso']/report[@name='aanschrijven - selectie subjecten']
<%ReportName ()%>
naam waaronder rapport is opgeslagen: aanschrijven - selectie subjecten
<%timestamp2date (ReportSaveDate ())%>
Datum wanneer het rapport is opgeslagen
<%ParamDisplayValue('naamParameter')%>
Geeft de waarde die opgeslagen is voor de parameter naamParameter. Handig voor als je ergens op jouw rapport wilt aangegeven waarop gefilterd wordt.
HTML mailto link
<a href="mailto:info@veenhuijsen.eu?subject=Cognos script&body=opmerkingen: ">mailen</a>