You are not logged in.
Pages: 1
Hallo,
gibt es die Möglichkeit einen Parameter zu generieren der den "Letzten Monat" hergiebt?
Offline
Hallo Richie,
ich bin mir nicht sicher, ob ich Dich richtig verstehe. Was genau hast Du denn vor? Prinzipiell gibt es für einen Datumsparameter die Möglichkeit den Defaultwert mit Hilfe einer Formel anzugeben und diesen so zum Beispiel immer auf den ersten Tag des laufenden Monats voreinzustellen.
Für Dynamische Listen besteht darüber hinaus die Möglichkeit Filter mit Datumsarithmetik zu definieren und wenn Du sowieso Birt- oder Jasper Berichte benutzt, geht das ganze auch ganz ohne irgendetwas in ReportServer zu machen.
Erklär doch nochmal, was Du genau vor hast, nicht dass ich Dir jetzt was unnötig kompliziertes erkläre.
Grüße
Thorsten
Ja richtig, mein Ziel ist eigentlich nur folgendes:
Ich habe ein Bericht in iReport generiert, diesen möchte ich jetzt jeden ersten des Monats laufen lassen,der Bericht soll mir dann die Werte des letzten Monats ausgeben. Ich weiss ich kann das Query gleich so schreiben, damit er immer den letzten Monat nimmt. Würde gern aber dem User beim Einrichten des Zeitplans die Möglichkeit geben zu wählen ob "Gestern, Letzte Woche, Letzten Monat use"
Vielen Dank und Gruss!
Erik
Offline
Hallo Erik,
die von Dir gewünschte Auswahl kann man sehr verschieden realisieren. Es hängt immer davon ab:
- wer den Bericht benutzen soll,
- wie die Daten strukturiert sind
- wie viel Flexibilität Du erlauben möchtest
- wie einfach der Parameterdialog sein soll.
Hier zwei Beispiele:
Ausgangslage
Dein Jasperbericht hat eine Query mit einem Datumsfeld z.B.
SELECT ... FROM tab
WHERE DATUM BETWEEN $P{DATUM_VON} AND $P{DATUM_BIS}
Möglichkeit 1 - kurzer Auswahldialog und Lösung mit "mehr" SQL
Du möchtest in einer Dropdown Box die Auswahl "Gestern", "letzte Woche" und "letzten Monat" zulassen.
1. Du legst einen Datenquellen Parameter an.
2. Als Query verwendest du
SELECT 1 id, 'Gestern' der_text FROM DUAL UNION ALL
SELECT 2 id, 'letzte Woche' der_text FROM DUAL UNION ALL
SELECT 3 id, 'letzten Monat' der_text FROM DUAL
Anmerkung FROM DUAL ist nur Oracle Dialekt nötig.
3. Auswahl Modus auf Einfachselektion umstellen
4. Parameter in iReports nutzen.
Query anpassen je nach dem welche auswahl getroffen wurde wird in der Query eine andere Zeile "wirksam"
SELECT ... FROM tab
WHERE ($P{key} = 1 AND DATUM < SYSDATE AND DATUM > SYSDATE -1) OR
($P{key} = 2 AND DATUM BETWEEN (SYSDATE-7) AND DATUM > (SYSDATE -1)) OR
($P{key} = 3 AND DATUM BETWEEN add_months(SYSDATE,-1) AND DATUM > (TRUNC(SYSDATE,'MOTH) -1))
Je nach SQL Dialekt musst Du die Bedingung anpassen.
Möglichkeit 2 - Zwei Datumsparameter und "wenig" SQL
Du möchtest dem Anwender eine flexible Auswahl erlauben, dass er beliebe Zeiträume auswählen kann.
1. Du legst zwei Datumsparameter DATUM_VON und DATUM_BIS an.
2. Als Query in iReports verwendest Du
SELECT ... FROM tab
WHERE DATUM BETWEEN $P{DATUM_VON} AND $P{DATUM_BIS}
3. Bericht ausführen!
4. Rechtsklick auf den Datumsparameter "In Formelmodus wechseln"
5. Formel erzeugen
6. Als Variante speichern.
Im Formelmodus kommt die Unified Expression Language (EL) zum Einsatz.
(http://jcp.org/aboutJava/communityprocess/final/jsr245/ und
http://juel.sourceforge.net)
Mit dem today Object kannst Du auf den Kalender zugreifen und die Parameter entsprechend
einschränken.
Hier ein kleiner Auszug aus unserem Benutzerhandbuch:
Benutzung des today-Objekts
[...]
Mit den nachfolgenden Funktionen können Sie das Datum, bzw. die Uhrzeit die im Kalender
hinterlegt ist manipulieren.
firstDay Setzt den Kalender auf den Mitternacht des ersten Tages des aktuellen Monats
lastDay Setzt den Kalender auf die letzte Sekunde des letzten Tages des aktuellen Monats
addDays Setzt den Kalender die angegebene Zahl an Tagen weiter/zurück
addMonths Setzt den Kalender die angegebene Zahl an Monaten weiter/zurück
addYears Setzt den Kalender die angegebene Zahl an Jahren weiter/zurück
setDay Setzt den Kalender auf den angegebenen Tag
setMonth Setzt den Kalender auf den angegebenen Monat
setYear Setzt den Kalender auf das angegebene Jahr
clearTime Setzt die Uhrzeit auf Mitternacht zurück
addHours Setzt den Kalender die angegebene Zahl an Stunden weiter/zurück
addMinutes Setzt den Kalender die angegebene Zahl an Minuten weiter/zurück
addSeconds Setzt den Kalender die angegebene Zahl an Sekunden weiter/zurück
setHours Setzt die Uhrzeit auf die angegebene Stunde
setMinutes Setzt die Uhrzeit auf die angegebenen Minuten
setSeconds Setzt die Uhrzeit auf die angegebenen Sekunden
format Diese Funktion wandelt das Datum in einen Text im angegebenen Format. Dies ist notwendig, um
Vergleiche auf Spalten vorzunehmen die nicht vom Typ Datum sind. (vgl. Tabelle „Datumsformat“ auf
Seite A-63)
Beispiel: Sie möchten alle Rechnungen des vergangenen Monats filtern. Dazu können Sie
folgenden Einschlussfilter definieren:
${today.firstDay().addMonths(-1)} - ${today.firstDay().addSeconds(-1)}
[...]
Je nach dem wie deine Daten strukturiert sind und welche Randbedingungen Du noch hast kann die eine oder andere Lösungsmöglichkeit besser für Dich sein.
Viele Grüße
Marcel
Offline
Hallo Marcel,
Ich möchte das Datum bei den Dateinamen im Anhang der eingeplanten Berichte ändern. Momentan steht in der scheduler.cf
<attachment>
<name>rep-${report.getName()}-${RS_CURRENT_DATE}</name>
</attachment>
Und die Ausgabedatei hat am Reportnamen noch das Datum und die Uhrzeit der Ausführung des geplanten Berichts.
Kann ich dort z.B. auch
<attachment>
<name>rep-${report.getName()}-${today.firstDay().addMonths(-1)} - ${today.firstDay().addSeconds(-1)}</name>
</attachment>
einfügen, um dass Datum auf das sich der Report bezieht zu erhalten? (Vorrausgesetzt der Report wird mit den gleichen Parametern aufgerufen)
oder ist man auf die vorgegebenen "Available Substitutions" (Reportserver Configguide page 28) festgelegt?
Viele Grüße
Malte
Offline
Hallo Malte,
in der aktuellen Version ist das leider nicht direkt vorgesehen. Man könnte es über ein Skript nachrüsten, das den Hook
net.datenwerke.rs.utils.juel.hooks.JuelServiceHook
implementiert. Über diesen können weitere Subsitutions hinzugefügt werden.
Ansonsten habe ich ${today} als Standard Substitution für die kommende Version mit aufgenommen.
Grüße
Arno
Offline
Hat sich hier irgendwas getan?
Nur mal ein Bild aus Jasper wie wir es aktuell umsetzen:
Default ist im Dropdown "Zeitraum" Datum ausgewählt, in dem Fall werden die beiden Datumsfelder benutzt.
Bei allen anderen wird der Zeitraum automatisch berechnet und an den Report übergeben.
Auch ist es wichtig das das Fromat exakt dd.MM.yyyy hh:mm:ss ist.
Kann ich das mit reportserver abbilden?
Gruss!
Erik
Offline
Hi,
bei einem Datums-Parameter kann man per rechter Mausstaste in den Formelmodus wechseln und so ${today} Ausdrücke verwenden.
Grüße
Arno
Offline
Pages: 1