質問

開始日と終了日という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機能の使用には展開の問題があります。これらは開発マシンでは正常に動作しますが、実際に展開したときに動作するのは難しい場合があります。問題を説明するリンクがいくつかあります:

MSDNから

SQLDevから

私のソリューションは、レポートが停止される非常に単純な実装でしたが、レポートビューアーからユーザーにメッセージが表示され、レポートエラーが表示されるだけです。

  1. 新しいテキスト/文字列パラメーターを作成します(CheckDateRangeと呼びます)
  2. 空の値を許可して非表示にする
  3. 利用可能な値=なし
  4. 詳細設定=デフォルト値を使用
  5. デフォルト値=値を指定-値では、機能ボタンを使用し、次を使用します。日付はBeginDateとEndDateです
  6. 最後に、レポートコードに次のコードスニペットを入力します。

    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ページでは使用できません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top