Ограничение выбора параметра построителя отчетов для принудительного применения пользователем, указав пары SalesID или StartDate и EndDate , с которыми я не знакомоднако в Report Builder / SSRS я могу указать вам на решение для SQL-запроса, которое должно отвечать вашим потребностям.
Начните с проверки Разрешить нулевое значение для параметров (доступно для параметров Дата / время, в отличие от Разрешить пустое значение ):
Как только вы это сделаете, вы можете использовать ISNULL
для параметров, чтобы отфильтровать данные в желаемом подмножестве:
SELECT SalesID, SalesDate, SaleValue
FROM SalesDb
WHERE SalesId = ISNULL(@SalesId, SalesId)
AND SalesDate BETWEEN ISNULL(@StartDate, SalesDate) AND ISNULL(@EndDate, SalesDate)
Использование *Предикат 1024 * в качестве примера, он указывает SQL Server возвращать строки, где SalesId
для строки: либо:
- равно параметру @SalesId, если оно не равно нулю, либо
- равно значению SalesId строк, если @SalesId IS равно нулю
Это означает, что когда значение @SalesId
равно нулю, все строки возвращаются готовыми для ограничений (если таковые имеются), заданных @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)