2017-03-02 7 views
0

私はしばらくこの問題に取り組もうとしていましたが、うんざりすることはありません。私はここでいくつかの質問を見直しましたが、誰も正確な問題はありません。だから、私はここの誰かが助けてくれることを願っています。SSRS式でマルチプルANDとORを結合する方法は?

SSMSで完全に動作するクエリがあります。しかし、このクエリはレポートに送られます。このレポートには、実行時にユーザーが提供する2つのパラメータStart DateおよびEnd Dateがあります。私は、これらの日付に対して一連の小切手を行う必要があり、複数の基準の1つを満たすレコード、つまりORを取り戻すだけです。

私はフィルタでこれを行い、各条件ごとに1つのフィルタを追加したかったのです。しかし、フィルター間のデフォルトの動作はANDです。私は複雑なフィルター間でORを実行する必要があります。そこで、私はオンラインの例を見つけ出し、入力をやり始めました。

ORのどちらかの側の式は、単独で動作するときに機能します。ただし、OR演算子と組み合わせるとすぐに、ORの前に(ORの前に)一致するレコードのみを返しますが、(ORの後に)一致するレコードは含まれません。

この

は、Dynamics CRMの2015年の報告である、と私はここでのVisual Studio 2010

を使用しています、私は報告書に入れているフィルターのスクリーンショットです:ここで Screenshot of Filter

が内部表現でありますこのフィルタ:

=((Fields!xyz_StartDateNewStudent.Value <> Nothing) AND (Fields!xyz_StartDateNewStudent.Value >= Parameters!StartDate.Value) AND (Fields!xyz_StartDateNewStudent.Value <= Parameters!EndDate.Value)) Or ((Fields!xyz_StartDateCarryoverStudent.Value <> Nothing) AND (Fields!xyz_StartDateCarryoverStudent.Value <= Parameters!StartDate.Value) AND (Fields!xyz_GraduationDate.Value <> Nothing) AND (Fields!xyz_GraduationDate.Value <= Parameters!EndDate.Value)) 

誰かが私のORが式の両端で機能しない理由についていくつかの光を放つことができますか?

答えて

2

残念ながら、SSRS式はブール論理を好きではありません。あなたはIIFを使用する必要があります:

=IIF((Fields!xyz_StartDateNewStudent.Value <> Nothing) 
    AND (Fields!xyz_StartDateNewStudent.Value >= Parameters!StartDate.Value) 
    AND (Fields!xyz_StartDateNewStudent.Value <= Parameters!EndDate.Value)) 
Or ((Fields!xyz_StartDateCarryoverStudent.Value <> Nothing) 
    AND (Fields!xyz_StartDateCarryoverStudent.Value <= Parameters!StartDate.Value) 
    AND (Fields!xyz_GraduationDate.Value <> Nothing) 
    AND (Fields!xyz_GraduationDate.Value <= Parameters!EndDate.Value)) 
, True, False) 
+0

ありがとう、ハノーファー!コードを少し弾いて(括弧が間違っている)、私の要件の両方を満たす日付範囲を入力していることを確認した後、私はこの事を期待どおりに発していると思います。 –

+0

フィルターのExpr: 「= IIF((フィールドmids_StartDateNewStudent.Value <> Nothing)で AND> =パラメータStartDate.Value) (フィールズmids_StartDateNewStudent.Value AND(フィールドmids_StartDateNewStudent.Value <=パラメーター終了日!!!!!。バリュー) または ((フィールド!mids_StartDateCarryoverStudent.Value <> Nothing)で AND(フィールド!mids_StartDateCarryoverStudent.Value <=パラメータ!StartDate.Value) AND(フィールド!mids_GraduationDate.Value <> Nothing)で AND(フィールド!mids_GraduationDate .Value <= Parameters!EndDate.Value)) 、True、False) ' –

+0

ちょうど考えて - これは正しく動作していますか? 'Fields!mids_GraduationDate.Value <> Nothing'です。私は何もしていないことを覚えているようですが、代わりにNOT NOT ISNOTHING(Fields!mids_GraduationDate.Value)を使う必要があります。何かが見つからない場合は、結果を確認してください。 –

関連する問題