SSRS Abfage über Parameter vom Typ "Datum/Zeit" steuern

CopWorker

Benutzer
Beiträge
24
Hallo zusammen,

gerade bin ich an einem SQL Server Report Service Bericht dran.
In dem möchte ich im DataSet in der Abfrage eine "WHERE" Klausel einbauen.
Die "WHERE" Klausen soll unter anderem auf einen Zeitbereich verweisen der wiederum aus
2 Parametersets stammt.
Hier die Abfrage
Code:
SELECT
    mat.MatCode, mat.MatName,
FROM mat, matverb 

WHERE mat.MatCode = matverb.MatCode
  and 
      matVerb.VerbrDatumZeit between ? and ?

GROUP BY mat.MatCode, mat.MatName
Die 2 Fragezeichen sollen nicht irritieren, diese werden als Verweis auf die
Parameter1 und Parameter2 eingesetzt, siehe "param1-und-param2.PNG".
Es handelt sich um ein Datenbank vom Typ ODBC.
Die Spalte "matVerb.VerbrDatumZeit" ist vom Typ "TIMESTAMP".

Jetzt kommen die Parameter1 (param_begin) und Parameter2 (param_end) ins Spiel.
Diese sind vom Datentyp "Datum/Zeit" eingestellt, siehe "param_begin.PNG".

Wie muss der Vergleich, bzw. die Syntax im Parameter Ausdruck lauten? Siehe "dataset_param_ausdr.PNG"
Das Problem ist der Spaltenwert "matVerb.VerbrDatumZeit" ist vom Typ "TIMESTAMP".
Der Wert aus dem Parameter kommt von einem, der Art nach, DateTimePicker.
Ich komme absolut mit der Konvertierung nicht klar.
Es ist ja nicht möglich eine Wert vom Typ "TIMESTAMT" mit einem unbekannten Typ mit "=" zu vergleichen.


Vielen Dank mal vorab.
Grüße von CopWorker
 

Anhänge

  • param_begin.PNG
    param_begin.PNG
    33,8 KB · Aufrufe: 1
  • dataset_param_ausdr.PNG
    dataset_param_ausdr.PNG
    52,9 KB · Aufrufe: 1
  • param1-und-param2.PNG
    param1-und-param2.PNG
    13,8 KB · Aufrufe: 1
Werbung:
Hallo zusammen,

vielen Dank, dass ihr euch dem Thema annehmt.
Ich habe das jetzt so gelöst indem ich in meinem SSRS Bericht ein weiteres DataSet einrichte.
In diesem DataSet bilde ich die Abfragen nach dem Zeitstempel mit dem höchsten Wert und
dem Zeitstempel mit dem niedrigsten Wert aus der Datenbank Tabelle.
Diese Werte nehme ich als Defaultwerte für die jeweiligen Parameter.
Die Verknüpfung in der Abfrage im Main DataSet scheint zu funktionieren:
"matVerb.VerbrDatumZeit between ? and ?"
Aber dies kann ich erst behaupten wenn ich alles genau geprüft habe.

Übrigens liegt da noch ein weiteres Problem vor:
Folgende Syntax in der "WHERE" Klausel funktioniert nicht:
"matVerb.ProdLinCode like @param_line"
"matVerb.ProdLinCode in @param_line"
Die Operatoren "like" oder "in" werden nicht akzeptiert.
Bei Zugriff auf Datenquellen wie "SQL" ist das kein Problem, da funktioniert das.

Wenn jemand einen kleinen Schimmer hat warum das so ist oder besser
wie man das Problem lösen kann, bitte melden.

Dafür wäre ich sehr dankbar.
Grüße von CopWorker
 
LIKE arbeitet mit Platzhaltern, wenn du also @param_line = 'asdf' hast und mit LIKE @param_line suchst dann findet er nur die Einträge mit exakt asdf. Du müsstest idealerweise %-Zeichen anhängen, z.B. so
Code:
WHERE matVerb.ProdLinCode like '%' + @param_line + '%'
Bei IN ist es etwas anders, IN erwartet eine Parameterliste. Du kannst aber nicht einfach alle Werte in eine Variable schreiben denn die Variable wird grundsätzlich wie ein Wert behandelt. Natürlich ginge es mit einer Liste von genau einem Parameter aber das ist ja nicht Sinn der Sache.

Du müsstest hier mit dynamischem SQL arbeiten um Code aus einer Variable als Abfrage an die DB zu senden. Das ist aber nicht ganz trivial und auch Sicherheitstechnisch nicht ungefährlich, da sollte man eventuell auch mit prepared statements arbeiten.
 
Werbung:
Hallo zusammen,

ich habe das Problem über die Filter der Dataset-Eigenschaft gelöst.
Da ist der Operator "In" zulässig. Siehe "dataset_filter.png"
dataset_filter.PNG
Der Nachteil ist, dass die kompletten Inhalte der Datenbank ins Dataset geladen wird
und anschließend gefiltert wird.
Dauert bei meiner aktuellen Datenbanktabelle mit knapp 2,3 Mio Datensätzen geschätzt 5 - 6 Sekunden.
Kann ich gerade noch ertragen.

Vielen Dank nochmal an alle
Grüße von CopWorker
 
Zurück
Oben