開始日と終了日の 2 つの日付/時刻パラメーターを含むレポート サービス (SQL 2008) レポートがあります。enddate を begindate と同じ月と年に制限する必要があります。これは簡単にできるように思えますが、わかりません。
現在、ストアド プロシージャに渡されたパラメーターをチェックしており、2 つの日時パラメーターが同じ月と年にない場合はエラーが発生します。これを達成するためのよりエレガントな方法を探しています。
開始日と終了日の 2 つの日付/時刻パラメーターを含むレポート サービス (SQL 2008) レポートがあります。enddate を begindate と同じ月と年に制限する必要があります。これは簡単にできるように思えますが、わかりません。
現在、ストアド プロシージャに渡されたパラメーターをチェックしており、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 関数を使用すると、展開の問題が発生します。開発マシンでは問題なく動作しますが、実際に展開すると動作しにくい場合があります。問題を説明するいくつかのリンクを次に示します。
私の解決策は、レポートが停止された非常に単純な実装でしたが、レポート ビューアーからユーザーに表示されるメッセージでレポート エラーが表示されるだけです。
最後に、レポート コードに次のコード スニペットを入力します。
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 ページでは使用できないと思います。