私は、begindateとenddateという2つの日付/時刻パラメータを持つレポートサービス(SQL 2008)レポートを用意しています。私は終わりを同じ年と同じ年に強制する必要があります。これは簡単なことだと思われますが、私はそれを理解できません。Reporting Servicesパラメータの制約
現時点では、2つの日時パラメータが同じ月と年にない場合、ストアドプロシージャに渡されるパラメータをチェックしてエラーを発生させています。私はこれを達成するよりエレガントな方法を探しています。
私は、begindateとenddateという2つの日付/時刻パラメータを持つレポートサービス(SQL 2008)レポートを用意しています。私は終わりを同じ年と同じ年に強制する必要があります。これは簡単なことだと思われますが、私はそれを理解できません。Reporting Servicesパラメータの制約
現時点では、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))
、あなたは日付パラメータ不正確な範囲について適切なフォーマット(赤ビッグフォント)とメッセージを持ついくつかの隠しテキストボックスを配置することができます。 tbDateParameterMessageテキストボックスのValueプロパティで
= Code.ValidateDate(Parameters!StartDate.Value, Parameters!EndDate.Value)
:パラメータ値式に、
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
その後:隠された式では、カスタムコードで両方のアクションを組み合わせることができ、
= (DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) <> 0)
も設定します。
= Code.DateMessage
と隠しプロパティ式中:
= String.IsNullOrEmpty(Code.DateMessage)
EDIT しかし、あなたが実行してレポートを停止したい場合は、このカスタムコードを使用します
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 forumから取られていますが。
私は隠れたテキストボックスのアイデアを使用しました。これは、レポートをクラッシュさせるよりも優れていたからです。私が達成しようとしていたのは、レポートを実行する前にユーザーがパラメータを前もって変更するように強制することでした。
ところで、構文は機能しませんでした。私はこれを代わりに使用しました:
= Month(Parameters!begindate.Value) = Month(Parameters!enddate.Value) and Year(Parameters!begindate.Value) = Year(Parameters!enddate.Value)
アイデアのためのcoldice。
ええ、私はSSRSとVB IDEなしで一時的です:)。チェックアウトの回答の更新。 –
btw開始日= 12/29/2008と終了日= 01/01/2009の場合、年次チェックはどうですか? –
非常に多くの場合、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
何もしていますが、必要なものを実現しています。
幸運を祈る!
> 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では動作しません。私はそれがウィンドウ関数だと考えていますので、レンダリングされたWebページでは使用できません。
私はそれについて考えましたが、問題はユーザーが日付が調整されたことに気付かないことがあることです。私がしたいことは、日付が同じ月になければならないというダイアログを表示するようなものです。 – jhale