基本的なSSRSレポートをオプションのパラメーターでフィルタリングできるようにしようとしています。フィルタリングする2つのパラメーターは、2つの日付の間またはSalesIDによるものである必要があります。各パラメーターを個別にフィルター処理することはできますが、ステートメントにそれらを追加してレポートを実行しようとすると、「パラメーターを空白にすることはできません」と表示されます。オンラインで読んだアドバイスでは、パラメーターの「空白値を許可する」を確認するように指示されています。プロパティですが、これは日付/時刻では使用できません。
オンラインで読んだところ、パラメータのプロパティで「空白値を許可する」を確認するように求められましたが、これは日付/時刻では使用できません。また、「OR IS NULL」を使用してWHERE句のバリエーションを多数追加しようとしましたが、それも機能しません。また、どこかに= IIF句を追加する必要があるかもしれないと読みましたが、これまでにこれを行ったことがありません。
Select SalesID, SalesDate, SaleValue
FROM SalesDb
WHERE (SalesDate BETWEEN @StartDate AND @EndDate AND SalesID IS NULL) OR
(SalesID = @SalesID AND @StartDate IS NULL and @EndDate IS NULL)
上記のコードは、開始日と終了日を選択した場合に実行されますが、SalesDateデータのみを取得し、他のフィールドは空白です。
レポートを開始日と終了日またはSalesIDの両方ではなく、いずれかでフィルタリングできるようにしたい。現在、上記は次のエラーを返します-StartDateを空白にすることはできません。前述したように、「空白値を許可する」を確認できません。前もって感謝します。
レポートビルダーのパラメーター選択を制約して、SalesIDまたはStartDateとEndDateのペアのいずれかを指定するユーザーを強制することは、レポートビルダー/ SSRSでよく知っていることではありませんが、対応する必要があるSQLクエリのソリューションを紹介できます。あなたのニーズに。
パラメータにnull値を許可するをチェックすることから始めます(これは、空白値を許可するのとは異なり、日付/時刻パラメータで使用できます):
これが完了したらISNULL
、パラメーターに対して使用して、データを目的のサブセットにフィルター処理できます。
SELECT SalesID, SalesDate, SaleValue
FROM SalesDb
WHERE SalesId = ISNULL(@SalesId, SalesId)
AND SalesDate BETWEEN ISNULL(@StartDate, SalesDate) AND ISNULL(@EndDate, SalesDate)
SalesId = ISNULL(@SalesId, SalesId)
例として述語を使用すると、これはSQLServerに行のSalesId
forが次のいずれかである行を返すように指示します。
ときにこの手段@SalesId
nullの場合、すべての行がで指定された制限(もしあれば)のために準備ができて返されます@StartDate
し、@EndDate
適用します。
これが私が使用したテストハーネスです。これはあなたや他の人に役立つかもしれません。
CREATE TABLE SalesDb
(
SalesID INT NOT NULL,
SalesDate DATETIME NOT NULL,
SaleValue DECIMAL(10, 2),
)
GO
INSERT
INTO SalesDb
(
SalesID, SalesDate, SaleValue
)
VALUES (15, '2019-01-01', 12),
(16, '2019-01-02', 34),
(16, '2019-01-03', 56),
(16, '2019-01-04', 78)
DECLARE @StartDate DATETIME = '2019-01-03', @EndDate DATETIME = '2019-01-04', @SalesID INT = NULL
SELECT SalesID, SalesDate, SaleValue
FROM SalesDb
WHERE SalesId = ISNULL(@SalesId, SalesId)
AND SalesDate BETWEEN ISNULL(@StartDate, SalesDate) AND ISNULL(@EndDate, SalesDate)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加