9

開始日と終了日の 2 つの日付/時刻パラメーターを含むレポート サービス (SQL 2008) レポートがあります。enddate を begindate と同じ月と年に制限する必要があります。これは簡単にできるように思えますが、わかりません。

現在、ストアド プロシージャに渡されたパラメーターをチェックしており、2 つの日時パラメーターが同じ月と年にない場合はエラーが発生します。これを達成するためのよりエレガントな方法を探しています。

4

4 に答える 4

6

パラメータ式の 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 フォーラムから取得したものです。

于 2009-03-03T15:44:18.137 に答える
1

多くの場合、SSRS レポートで Msgbox 関数を使用すると、展開の問題が発生します。開発マシンでは問題なく動作しますが、実際に展開すると動作しにくい場合があります。問題を説明するいくつかのリンクを次に示します。

MSDN から

SQLDev から

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

  1. 新しいテキスト/文字列パラメーターを作成します (私はそれを CheckDateRange と呼びました)
  2. 空白の値を許可し、非表示にします
  3. 利用可能な値 = なし
  4. 詳細 = デフォルト値を使用
  5. デフォルト値 = 値を指定します - [値] で、機能ボタンを使用して次を使用します: =CODE.CheckDateParameters(Parameters!BeginDate.Value,Parameters!EndDate.Value) - チェックした日付のパラメータ名が BeginDate であることがわかります。および終了日
  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
    

派手なことは何もありませんが、必要なものを実現します。

幸運を!

于 2011-05-23T14:14:59.570 に答える
0

レポートがクラッシュするよりは良いので、非表示のテキスト ボックスのアイデアを使用しました。私が達成したかったのは、レポートが実行される前に、ユーザーがパラメータを事前に変更するように強制することでした。

ところで、構文は機能しませんでした。代わりにこれを使用しました:

= Month(Parameters!begindate.Value) = Month(Parameters!enddate.Value) and Year(Parameters!begindate.Value) = Year(Parameters!enddate.Value)

アイデアをくれたcoldiceに感謝します。

于 2009-03-03T19:16:10.387 に答える
0
>     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 ページでは使用できないと思います。

于 2013-07-02T03:45:13.643 に答える