Reporting Servicesパラメーターの制約
-
03-07-2019 - |
質問
開始日と終了日という2つの日付/時刻パラメーターを持つレポートサービス(SQL 2008)レポートがあります。終了日を開始日と同じ月と年に制限する必要があります。これは簡単なことのように思えますが、私にはわかりません。
現在、ストアドプロシージャに渡されたパラメーターを確認し、2つの日時パラメーターが同じ月と年にない場合はエラーを発生させています。これを実現するよりエレガントな方法を探しています。
解決
パラメーター式でEndDateの値を確認できます。値が間違っている場合は、StartDate + 1 Monthに設定します。
次のようなもの:
= IIF(DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) = 0, Parameters!EndDate.Value, AddDate(DateInterval.Month, 1, Parameters!StartDate.Value))
ユーザーに通知するだけの場合は、適切な書式設定(赤い大きなフォント)と日付パラメーターに関するメッセージの範囲が正しくない非表示のテキストボックスを配置できます。非表示式セット
= (DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) <> 0)
また、両方のアクションをカスタムコードと組み合わせることができます:
Public DateMessage As String
Public Function ValidateDate(StartDate As DateTime, EndDate As DateTime) As DateTime
Dim ResultDate As DateTime
If (DateDiff(DateInterval.Month, StartDate, EndDate) <> 0) Then
ResultDate = AddDate(DateInterval.Month, 1, StartDate)
DateMessage = String.Format("End Date parameter value {0}
was out of range and was changed to {1}", EndDate, ResultDate)
Else
ResultDate = EndDate
End If
End Function
次に、パラメータ値式で:
= Code.ValidateDate(Parameters!StartDate.Value, Parameters!EndDate.Value)
tbDateParameterMessageテキストボックスのValueプロパティ:
= Code.DateMessage
および非表示のプロパティ式:
= String.IsNullOrEmpty(Code.DateMessage)
編集 ただし、レポートの実行を停止する場合は、次のカスタムコードを使用します:
Public Function CheckDate(SDate as Date, EDate as Date) as Integer
Dim msg as String
msg = ""
If (SDate > EDate) Then
msg="Start Date should not be later than End Date"
End If
If msg <> "" Then
MsgBox(msg, 16, "Parameter Validation Error")
Err.Raise(6,Report) 'Raise an overflow
End If
End Function
SQLServerCentralフォーラムから取得しています。
他のヒント
非常に多くの場合、SSRSレポートでのMsgbox機能の使用には展開の問題があります。これらは開発マシンでは正常に動作しますが、実際に展開したときに動作するのは難しい場合があります。問題を説明するリンクがいくつかあります:
私のソリューションは、レポートが停止される非常に単純な実装でしたが、レポートビューアーからユーザーにメッセージが表示され、レポートエラーが表示されるだけです。
- 新しいテキスト/文字列パラメーターを作成します(CheckDateRangeと呼びます)
- 空の値を許可して非表示にする
- 利用可能な値=なし
- 詳細設定=デフォルト値を使用
- デフォルト値=値を指定-値では、機能ボタンを使用し、次を使用します。日付はBeginDateとEndDateです
-
最後に、レポートコードに次のコードスニペットを入力します。
Function CheckDateParameters(StartDate as Date, EndDate as Date) as Integer Dim msg as String msg = "" If (StartDate > EndDate) Then msg="Start Date should not be later than End Date" Err.Raise(22000, "VBCore.Utility", msg) End If End Function
特別なことは何もありませんが、必要なことは実現します。
がんばって!
レポートをクラッシュさせるよりも優れているため、非表示のテキストボックスのアイデアを使用しました。私が達成したいと思っていたのは、レポートを実行する前にユーザーにパラメータを事前に変更させることでした。
ところで、構文は機能しませんでした。代わりにこれを使用しました:
= Month(Parameters!begindate.Value) = Month(Parameters!enddate.Value) and Year(Parameters!begindate.Value) = Year(Parameters!enddate.Value)
アイデアをありがとうございますcoldice。
> Public Function CheckDate(SDate as Date, EDate as Date) as Integer Dim msg as String
> msg = ""
> If (SDate > EDate) Then msg="Start Date should not be later than End Date"
> End If
> If msg <> "" Then MsgBox(msg, 16, "Parameter Validation Error") Err.Raise(6,Report) 'Raise an overflow
> End If End Function
変更を加えない限り、MsgBox()関数はSSRSで機能しません。 SSRS 2010では機能しません。Windowsの機能であるため、レンダリングされたWebページでは使用できません。