RepWiz - Teknisk dokumentasjon


Oppdatert: 13.01.2005 - Henrik Olsen
24.01.2005 - Alf-Ivar Holm
26.05.2005 - Henrik Olsen

Innhold

Introduksjon

Systemoversikt

Programargumenter

Oppsett av .INI-fil

Oppsett av .SQL-fil

Dynamisk SQL

Datofunksjoner i SQL

Flerlagsrapporter

Flere eksempler på dynamisk SQL

Introduksjon

RepWiz er en rapportgenerator hvor det for sluttbruker er lagt stor vekt på et intuitivt og enkelt brukergrensesnitt. Med RepWiz kan man enkelt gjøre uttrekk fra alle typer ODBC-datakilder og få data presentert på en oversiktlig måte. RepWiz kan også eksportere til andre verktøy som f.eks Excel. Oppbygning av rapporter krever noe teknisk kompetanse. Denne tekniske dokumentasjonen vil gi en oversikt over mulighetene for bygging av rapporter i RepWiz.

Systemoversikt

RepWiz består av tre filer. En .exe-fil som er selve programfilen. En .ini-fil og en .sql-fil som sammen definerer rapportene. I .ini-filen angir man datakilden til rapporten og setter hvordan rapporten skal presenteres for sluttbruker. I .sql-filen lages spørringen som danner datagrunnlaget for rapporten.

Programargumenter

Synopsis:
RepWiz.exe
[[-h]/[--help]/-?]
[-inifile <path>]
[-report <name> -type [file|excel|print] -output <path|printername>]
[-timeout <seconds to timeout when connecting to db>]

Dersom ingen programargumenter blir angitt forsøker RepWiz å lese inn og starte med filene RepWiz.ini og RepWiz.sql

Elsempel med programargumenter:
RepWiz.exe -inifile myIni.ini -report REP1 excel -output c:\repports\

Oppsett av .INI-fil

Med en oppsett-.ini-fil setter man opp hvilke rapporter som er tilgjengelig og formateringen på disse.

Elementer i en .INI.fil
Element Beskrivelse Eksempel Påkrevd
[SYSTEM_DEFAULT] Parameter kan settes globalt for alle rapporter. Overstyr disse ved behov for den enkelte rapport.
[SYSTEM_DEFAULT]
TEXT_QUALIFIER = "\""
FIELD_DELIMITER = ";"
Nei
TEXT_QUALIFIER = "" Tekstinnkapsling ved eksport til tekstfil. TEXT_QUALIFIER = "\"" Nei
FIELD_DELIMITER = "" Feltskilletegn ved eksport av tekstfil. FIELD_DELIMITER = ";" Nei
DECIMAL_POINT = "" Desimalskilletegn. DECIMAL_POINT = "," Nei
DECIMAL_FORMAT = "" Bruker printf-formatering (C-funksjon) med double(lf) som variabel. DECIMAL_FORMAT = "&8.02lf" Nei
INTEGER_FORMAT = "" Bruker printf-formatering (C-funksjon) med integer(ld) som variabel. INTEGER_FORMAT = "&ld" Nei
EXCEL_DECIMAL = "" Desimalformat ved eksport til Excel. EXCEL_DECIMAL = "# ##0.00" Nei
EXCEL_INTEGER = "" Integer-format ved eksport til Excel. EXCEL_INTEGER = "0" Nei
EXCEL_DATE = "" Datoformat ved eksport til Excel. EXCEL_DATE = "d.m.åååå" Nei
EXCEL_TEXT = "" Tekstformat ved eksport til Excel. EXCEL_TEXT = "@" Nei
USE_TABS = Angir om det skal brukes mapper eller trestruktur-visning av hovedmenyen. Mapper brukes dersom ikke annet er angitt. USE_TABS = FALSE Nei
CONNECTION_RETRIES = Antall ganger RepWiz skal prøve å koble til via DSN dersom forbindelsen mislykkes. CONNECTION_RETRIES = 5 Nei
USER_INPUT_DSN = Brukeren angir selv DSN. USER_INPUT_DSN = TRUE Nei
[CONSTANTS] Liste med konstanter som kan brukes i SQL-spørringene. [CONSTANTS]
CONST = "REGION='Sør'"
CONST = "POSTNR='Oslo'"

Bruk i .sql:
SELECT * FROM shop WHERE postnummer = {@POSTNR}
Nei
CONST = Angir konstant. CONST = "REGION='Sør'" Nei
[VARIABLES] Variable som kan settes og brukes i SQL-spørringene. Vil leve mellom 2 spørringer, for eksempel for bruk i flerlagsspørringer. [VARIABLES]
VAR = FraDato
VAR = TilDato

Bruk i .sql:
Settes: { ... | FraDato }
Brukes: ... dato = {%FraDato}
Nei
VAR = Angir variabel. VAR = FraDato Nei
[TABS] Definerer mapper for plassering av rapporter. [TABS]
TAB = "DagsRapporter"
TAB = "MånedsRapporter"
TAB = "UkeRapporter"
Ja
TAB = Navn på mappe. TAB = "DagsRapporter" Ja
[TREENODE] Definerer en trestruktur for plassering av rapporter. [TREENODE]
PARENT = UKE
CHILD = MANDAG
Nei
PARENT = Navn på foreldrenode. PARENT = UKE Nei
CHILD = Navn på undernode. En eller flere CHILD for hver PARENT CHILD = MANDAG Nei
[DSN] Spesifiserer grupper av DSN'er.
Under hver rapport kan en så referere til en eller flere av disse gruppene med en eller flere DSN_GROUP-setninger

[DSN]
NAME = "REGION-NORD"
DSN = "MEGA0570DSN"
DSN_DESC = "Mega Brueland"
DSN_USER = "user"
DSN_PASSWD = "passwd"

Brukes i [REPORT]:
DSN_GROUP = "REGION-NORD"
Nei
NAME = "" Navn på DSN. NAME = "REGION-NORD" Nei
DSN_DESC = "" Beskrivelse av DSN. DSN_DESC = "Mega Brueland" Nei
DSN_USER = "" Brukernavn for DSN. DSN_USER = "user" Nei
DSN_PASSWD = "" Passord for DSN. DSN_PASSWD = "passwd" Nei
[REPORT] Definerer datakilden og oppsettet for en rapport. [REPORT]
DSN = "LOCALDSN"
DSN_DESC = "Jowe database"
DSN_USER = "jowe"
DSN_PASSWD = "sql"
TAB = "UkeRapporter"
NAME = "Rapportnavn"
BTN_TEXT = "Rapport knapp tekst"
CAPTION = "Rapport tittel"
SQL_KEY = "Sql fil referanse"
Ja
DSN = "" Navn på DSN (ODBC forbindelse) til datakilde. DSN = "LOCALDSN" Ja
DSN_DESC = "" Beskrivelse av DSN. DSN_DESC = "Jowe database" Nei
DSN_USER = "" Brukernavn for DSN. DSN_USER = "jowe" Ja
DSN_PASSWD = "" Passord for DSN. DSN_PASSWD = "sql" Ja
TAB = "" Angir hvilken mappe/trenode rapporten skal ligge under . TAB = "UkeRapporter" Ja
NAME = "" Navn på rapporten. NAME = "Rapportnavn" Ja
BTN_TEXT = "" Tekst på knappen for rapporten i RepWiz. BTN_TEXT = "Salg" Ja
CAPTION = "" Tittel på rapport ved utskrift og eksport. CAPTION = "Rapport tittel" Ja
SQL_KEY = "" Hvilken SQL-spørring i .sql-filen som skal benyttes i denne rapporten. SQL_KEY = "REP1" Ja
HIDDEN_COLUMNS = "" Skuler en eller flere kolonner i rapporten ved visning og utskrift. Kan for eksempel brukes for å skjule hjelpe- og sorteringskolonner. HIDDEN_COLUMNS = "1,2 Nei
SUMCOLUMN = "" Angir hvilke kolonner i rapporten som skal summeres. SUMCOLUMN = "4,6" Nei
SUM_TEXT = "" Mulighet for å legge inn tekst i kolonner på sumlinjene. SUM_TEXT = C3=Total Nei
FILENAME = "" Filnavn ved eksport til tekstfil. Filnavnene kan spesifiseres med datoformatkoder. Blokker med datoer legges inn i navnet med < og > rundt. Bruker strftime(..)-formatet fra C, bytter ut % med &.
FILENAME = "Rapport.txt"
FILENAME = c:\rpt\varer_<&Y&m&d>.dat> "
Nei
EXCEL_FILENAME = "" Filnavn ved eksport til Excel.
Filnavnene kan spesifiseres med datoformatkoder. Blokker med datoer legges inn i navnet med < og > rundt. Bruker strftime(..)-formatet fra C, bytter ut % med &.
EXCEL_FILENAME = "rapport.xls"
EXCEL_FILENAME = c:\rpt\varer_<&Y>.xls> "
Nei
GROUPBY_COLUMN = Angir hvilke kolonner det skal gruperes etter. Viktig at disse kolonnene er sortert i sql for å samle grupperingene. Brukes sammen med SUMCOLUMN. GROUPBY_COLUMN = 5 Nei
SUM_HDR_TEXT = Legger inn en ekstra rad før starten av hver gruppering. Innholdet i kolonnene spesifiseres på samme måte som for SUM_TXT. Data hentes fra påfølgende rad. Slik at C3=C2 vil føre til at kolonne 3 i grupperingsoverskriften vil inneholde verdien til kolonne 2 i første påfølgende rad.
SUM_HDR_TEXT = C1=Varegruppe
SUM_HDR_TEXT = C3=C2
Nei
SUM_FORMULA = Mulighet for å legge inn formler på kolonnene i sum-radene. Høyresiden av uttrykket må alltid referere til sumkolonner. Venstre siden av uttrykket kan plasseres i vilkårlig kolonne. SUM_FORMULA = C2=C4/C7
SUM_FORMULA = C4=(C4/C7) + (3.14 * C2)
Nei
HIDE_REPORT Skjuler rapporten, den vises ikke i menyene. Brukes for eksempel dersom rapporten er en underrapport for flerlagsrapporter. HIDE_REPORT = TRUE Nei
BTN_TEXT_COLOR = Angir tekstfargen på knappen for rapporten i brukergrensesnittet. (RGB) BTN_TEXT_COLOR = 255,0,0 Nei
PRINTER_ORIENTATION = Angir orienteringen på uskrift av rapporten, PORTRAIT eller LANDSCAPE . PRINTER_ORIENTATION = LANDSCAPE Nei
SUB_REPORT = Angir navnet på en subrapport ved flerlagsrapporter. SUB_REPORT = "DetaljRap" Nei
FORMAT_COLUMN = Kan konvertere en kolonne med minutter til teksten hh:m eller formatere datoer og tidspunkter. FORMAT_COLUMN = C4 = minToText

FORMAT_COLUMN = C4 = FormatDate(<Formateringskoder>)
Nei
DSN_GROUP Angir hvilken DSN-gruppe som skal benyttes. DSN-grupper angis over med [DSN] DSN_GROUP = "REGION-NORD" Nei
ACCU_COLUMNS = Legger sammen og akumulerer verdiene nedover i en kolonne. ACCU_COLUMNS = 2 Nei
TEXT_QUALIFIER = "" Tekstinnkapsling ved eksport til tekstfil. TEXT_QUALIFIER = "\"" Nei
FIELD_DELIMITER = "" Feltskilletegn ved eksport av tekstfil. FIELD_DELIMITER = ";" Nei
DECIMAL_POINT = "" Desimalskilletegn. DECIMAL_POINT = "," Nei
DECIMAL_FORMAT = "" Bruker printf-formatering (C-funksjon) med double(lf) som variabel. DECIMAL_FORMAT = "&8.02lf" Nei
INTEGER_FORMAT = "" Bruker printf-formatering (C-funksjon) med integer(ld) som variabel. INTEGER_FORMAT = "&ld" Nei
EXCEL_DECIMAL = "" Desimalformat ved eksport til Excel. EXCEL_DECIMAL = "# ##0.00" Nei
EXCEL_INTEGER = "" Integer-format ved eksport til Excel. EXCEL_INTEGER = "0" Nei
EXCEL_DATE = "" Datoformat ved eksport til Excel. EXCEL_DATE = "d.m.åååå" Nei
EXCEL_TEXT = "" Tekstformat ved eksport til Excel. EXCEL_TEXT = "@" Nei
NAME_COLUMN = "" Setter navn på kolonneoverskrifter. NAME_COLUMN = C4=Navn Nei


Eksempel RepWiz.ini

[SYSTEM-DEFAULT]
DECIMAL_POINT = ","

[TABS]
TAB = "Ordre"
TAB = "Kunder"


[REPORT]
DSN = "LOCALDSN"
DSN_DECS = "Jowe database"
DSN_USER = "js"
DSN_PASSWD = "sql"
TAB = "Kunder"
BTN_TEXT = "Produktivitet"
NAME = "Produktivitet"
CAPTION = "Produktivitet"
SQL_KEY = "REP1"
SUMCOLUMN = "4"
FORMAT_COLUMN = C4=minToText
GROUPBY_COLUMN = 2

 

;Kommanter Rapport 2
[REPORT]
DSN = "LOCALDSN"
DSN_DECS = "Jowe database"
DSN_USER = "js"
DSN_PASSWD = "sql"
TAB = "Ordre"
BTN_TEXT = "Fakturerte"
NAME = "Fakturerte"
CAPTION = "Antall fakturerte ordre på dato"
SQL_KEY = "REP2"
SUMCOLUMN = "3"
HIDDEN_COLUMNS = 1

Oppsett av .SQL-fil

I .sql-filen angir man spørringene som skal danne datagrunlaget for rapportene.


Elementer i en .SQL-fil
Element Beskrivelse Eksempel Påkrevd
[SQL] Angir en ny sql-spørring. [SQL]
REP1
SELECT *
FROM Ansatt
where Ansattnr = 8


Ja
"Navn på spørring" Navn på spørring. Brukes som SQL_KEY mot .ini-filen REP1 Ja
"Sql spørring" Sql-spørring som skal returnere datagrunnlaget. SELECT *
FROM Ansatt
where Ansattnr = 8
Ja

Dynamisk SQL

Ved å bruker følgende syntaks kan SQL setningene bestemmes av bruker ved kjøring. Bruker får da opp dialogbokser ved kjøring for spesifikasjon endelig SQL.

Syntaks:
{ <Dialogboks tekst > | [Rapport tekst] | [Default verdi eller funksjon] | [Lokal konstant/ global variabel] }

<Dialogboks tekst > Teksten som vises i dialogboksen når bruker blir bedt om å spesifiesere en verdi ved kjøring av rapporten.
[Rapport tekst] Denne teksten vises på utskrifter og annet sammen med verdien som brukeren har angitt.
[Default verdi eller funksjon] Tekst eller verdi som kommer som forhåndsvalgt verdi i feltet hvor brukeren skal angi en verdi under kjøring av rapporten. Se de forskjellige funksjoner i seksjonene under.
[Lokal konstant/ global variabel] Dersom denne ikke er definert i .ini.filen som en global variabel, under [VARIABLES], vil denne verdien fungere som en lokal konstant for inneværende rapport og kan kun gjenbrukes innenfor samme rapport for å ungå at man spør etter samme verdi flere ganger. Er den derimot definer i .ini-filen fungerer den som en global variabel og kan settes og gjenbrukes i senere spørringer for andre rapporter, se eksempeler.

Kommenrarer:
Linjer kommenteres vekk ved bruk av --innefor sqlsetningen. På samme måte som i isql.

 

Eksempel RepWiz.sql

[SQL]
REP1
SELCT Fakturadato, fakturaDato as Fakturadato, count(ordreid) AS Antall
FROM ordre
WHERE fakturaDato IS NOT NULL
GROUP BY fakturadato
ORDER BY fakturaDato desc

[SQL]
REP22
SELCT O.ordreid as Ordre, K.Navn AS Kunde
FROM Ordre O, Kunde K
WHERE O.kundeid = K.kundeid
AND O.fakturadato > '{Angi dato| Dato |12.12.2004|fakdato}'
ORDER BY o.ordreid

Datofunksjoner i SQL

Datofunksjoner kan brukes i en dynamsik-sql.

Synopsis:
<date_func(…)>;<datoformat>

Funksjoner:
CurDate([days=0]);
FirstInMonth(year, month, year_corr, month_corr, [days=0]);
LastInMonth(year, month, year_corr, month_corr, [days=0]);
FirstInWeek(year, week, year_corr, week_corr, [days=0]);
LastInWeek(year, week , year_corr, week_corr, [days=0]);

- Hvis year, month eller week blir satt til 0 vil inneværende dato bli brukt.
- xxxx_corr argumentene blir brukt for å korrigere i forhold til datoen spesifisert ved year, month(+/-12) eller week.
- Days argumentet er valgfritt.

Eksempel:
...
WHERE dato > '{Angi ordre dato| Dato > |$FirstInMonth (2005, 4, 0 );&Y.&m.&d; }'

 

Formteringskoder
Kode Beskrivelse Eksempel
&a
Abbreviated weekday name
 
&A Full weekday name  
&b Abbreviated month name  
&B Full month name  
&c Date and time representation appropriate for locale  
&d Day of month as decimal number (01 - 31)  
&H Hour in 24-hour format (00 - 23)  
&I Hour in 12-hour format (01 - 12)  
&j Day of year as decimal number (001 - 366)  
&m Month as decimal number (01 - 12)  
&M
Minute as decimal number (00 - 59)
 
&p Current locale's A.M./P.M. indicator for 12-hour clock  
&S Second as decimal number (00 - 59)  
&U
Week of year as decimal number, with Sunday as first day of week (00 - 53)
 
&w Weekday as decimal number (0 - 6; Sunday is 0)  
&W Week of year as decimal number, with Monday as first day of week (00 - 53)  
&x Date representation for current locale  
&X Time representation for current locale  
&y Year without century, as decimal number (00 - 99)  
&Y Year with century, as decimal number  
&z, &Z
Time-zone name or abbreviation; no characters if time zone is unknown
 
&& Percent sign  


Flerlagsrapporter (drilldown)

Det er mulig å lage flerlagsrapporter i RepWiz, så kalt drilldowns. Dette gjøres ved at rapporter kan åpne andre rapporter med argumenter fra egne kolonner. Det er ingen begrensninger på antall nivåer i en flerlagsrapport.

Eksempel:

Ved dobbeltklikk i rapport 'Ordre' vil den hente opp sin SUB_REPORT som er 'Detaljer' og bruke verdien i kolonne 1 som utvalgskriterie angitt med '{@@C1}'.

.ini.fil .sql-fil
[SYSTEM-DEFAULT]
DECIMAL_POINT = ","

[TABS]
TAB = "Ordre"

[REPORT]
DSN = "db"
DSN_USER = "user"
DSN_PASSWD = "sql"
TAB = "Ordre"
BTN_TEXT = "Ordrerapport"
NAME = "Ordre"
CaPTION = "Ordrerapport"
SQL_KEY = "REP1"
SUB_REPORT = "Detaljer"

[REPORT]
DSN = "db"
DSN_USER = "user"
DSN_PASSWD = "sql"
TAB = "Ordre"
BTN_TEXT = ""
NAME = "Detaljer"
CaPTION = "Ordredetaljer"
SQL_KEY = "REP2"
HIDE_REPORT = TRUE
[SQL]
Rep1
SELECT ordreid, dato
FROM ORDRE

[SQL]
Rep2
SELECT *
FROM ordrelinje
WHERE ordreid = '{@@C1}'

Flere eksempler på dynamisk SQL

Gir brukerene mulighet til å angi utplukskkriterier.
WHERE date = '{Angi ordre dato| Dato }'

Dialogboks der man kan angi verdi for 'date'-feltet. Som forslag vises datoen en uke tilbake.
WHERE date = '{Angi ordre dato| Dato |@select getdate() - 7}'

Som over men her legges verdien du angir i variabelen vDate. vDate deklareres i .ini-filen.
Dersom vDate ikke er definert i .ini.filen som en global variabel, under [VARIABLES], vil vDate fungere som en lokal konstant for inneværende rapport og kan kun gjenbrukes innenfor samme rapport. Er den derimot definert i .ini-filen fungerer den som en global variabel og kan settes og gjenbrukes i senere spørringer for andre rapporter.
.ini-fil:
...
[VARIABLES]
VAR = vDate
...

.sql-fil:
...
WHERE date = '{Angi ordre dato| Dato |@select getdate() - 7|vDate}'

Bruk av verdien vDate satt i eksempelt over i en senere spørring.
WHERE date = '{%vDate}'

Dialogboks der man kan velge blant listen med registrerte kundenavn.
WHERE KundeNavn = '{Velg kunde|Kundenavn|@select distinct(navn) FROM kunde}'

Som over men har brukes det to kolonner, en for data og en for visning i dialogen. Gjør det mulig å formatere visningen til brukerene. Første kolonne angis hva som er verdiene til i spørringen ('%, kundenr1', kundenr2,...) og deretter det som vises til brukeren ('Alle', Navn1, Navn2,...)
WHERE kundenr like '{Velg kunde|Kundenavn|@select '%', 'Alle' UNION select kundenr, navn FROM kunde}'


Cosmo Scientific Consultant AS © 2005

Forskningsparken, Gaustadalléen 21, 0349 Oslo,

Fax. 22 60 44 27, E-post: csc@csc.no