Рассчитать даты между двумя датами и изменить их в диапазоне - PullRequest
1 голос
/ 06 февраля 2020

У меня есть особое требование, когда у нас есть даты начала и окончания отчета. Таким образом, когда пользователь выбирает даты начала и окончания в отчете, он должен иметь возможность извлекать все записи, если они попадают под дату начала или окончания, и соответственно корректировать даты позже. Мне нужно, чтобы это было выполнено в DAX Query .

Ниже приведен лишь пример того, как выглядит набор данных:

DDL:

CREATE TABLE [#Promos]
([ProductNumber]       INT, 
 [StartDate]           DATE, 
 [EndDate]             DATE, 
 [PromoCode]           VARCHAR(6), 
 [DaysAvailableInWeek] VARCHAR(20)
);

DML:

INSERT INTO [#Promos] ([ProductNumber], [StartDate], [EndDate], [PromoCode], [DaysAvailableInWeek])
VALUES (6512, '2020-01-11', '2020-01-13', 'ABC123', '1, 3, 5');
INSERT INTO [#Promos] ([ProductNumber], [StartDate], [EndDate], [PromoCode], [DaysAvailableInWeek])
VALUES(6514, '2020-01-12', '2020-01-14', 'ABC123', '4, 6');
INSERT INTO [#Promos] ([ProductNumber], [StartDate], [EndDate], [PromoCode], [DaysAvailableInWeek])
VALUES(2341, '2020-01-11', '2020-01-25', '321XYZ', '1, 2');

Пример-1:

    SELECT *
    FROM #Promos 
    WHERE [StartDate] = '2020-01-12' 
    AND [EndDate] = '2020-01-14'
    ORDER BY 1;

Ожидаемый результат для вышеуказанного запроса должно быть:

ProductNumber StartDate   EndDate     PromoCode   DaysAvailableInWeek
2341          2020-01-12  2020-01-14  ABC123      1, 2
6512          2020-01-12  2020-01-13  ABC123      1, 3, 5
6514          2020-01-12  2020-01-14  ABC123      4, 6

Пример-2:

SELECT *
FROM #Promos 
WHERE [StartDate] = '2020-01-11' 
AND [EndDate] = '2020-01-13'
ORDER BY 1;

Ожидаемый результат для вышеуказанного запроса должен быть:

ProductNumber StartDate   EndDate     PromoCode   DaysAvailableInWeek
2341          2020-01-11  2020-01-13  ABC123      1, 2
6512          2020-01-11  2020-01-13  ABC123      1, 3, 5
6514          2020-01-12  2020-01-13  ABC123      4, 6

Пример-3:

SELECT *
FROM [#Promos] 
WHERE [StartDate] = '2020-01-11' 
AND [EndDate] = '2020-01-12'
ORDER BY 1;

Ожидаемый результат для вышеуказанного запроса должен быть:

ProductNumber StartDate   EndDate     PromoCode   DaysAvailableInWeek
2341          2020-01-11  2020-01-12  ABC123      1, 2
6512          2020-01-11  2020-01-12  ABC123      1, 3, 5
6514          2020-01-12  2020-01-12  ABC123      4, 6

То, что я до сих пор пробовал с SQL:

SET @StartDate = '2020-01-12';
SET @EndDate   = '2020-01-14';

    SELECT [ProductNumber],
       CASE
           WHEN @StartDate BETWEEN [StartDate] AND [EndDate] THEN @StartDate
           WHEN @StartDate < [StartDate] THEN [StartDate]
       END AS [StartDate],
       CASE
           WHEN @EndDate BETWEEN [StartDate] AND [EndDate] THEN @EndDate
           WHEN @EndDate > [EndDate] THEN [EndDate]
       END AS [EndDate], 
       [PromoCode], 
       [DaysAvailableInWeek]
FROM [#Promos]
WHERE [StartDate] <= @EndDate
  AND [EndDate]   >= @StartDate
ORDER BY 1;

Но мне нужно что-то с DAX. Может ли кто-нибудь помочь, пожалуйста?

Спасибо!

...