Как выполнить вычисление (MDX) в кубе SSAS, чтобы получить разницу между значением из текущей строки и значением из предыдущей строки? - PullRequest
0 голосов
/ 23 марта 2019

Я хотел бы сделать вычисление, чтобы получить разницу между отъездом из моей текущей строки и прибытием в Москву из моей предыдущей строки.У меня есть таблица фактов, которая имеет несколько столбцов.Вот три наиболее важных столбца: id ,partDate, receiveDateNextStop.

Если у меня есть, например, две строки в моей таблице фактов:

  • id assignDate receiveDateNextStop
  • 1 01-01-2019 03-01-2019
  • 1 04-01-2019 07-01-2019

Пояснение: 1 января 2019 года я отправляюсь в следующий пункт назначения иЯ прибываю туда 3 января 2019 года. 4 января 2019 года я снова отправляюсь в следующий пункт назначения, и я прибываю туда 7 января 2019 года.

Теперь я хотел бы знать, сколько дней простоя было (суммадней между прибытием и следующим отъездом).Таким образом, в этом примере время простоя будет равно 1, потому что между 3 января 2019 года и 4 января 2019 года будет один день.

Сначала я произвел этот «расчет» в Management Studio как SQL-запрос.См. Запрос ниже:

SELECT s.Id, s.departDate as Depart_current_place, s.arriveDateNextStop as Arrival_next_stop, LAG(arriveDateNextStop) OVER (ORDER BY arriveDateNextStop) AS Arrival_current_stop, DATEDIFF(DAY, LAG(arriveDateNextStop) OVER (ORDER BY arriveDateNextStop), departDate) AS Amount_of_days
FROM MyTable s
WHERE Id = 9
GROUP BY s.departDate, s.Id, s.arriveDateNextStop 
ORDER BY s.departDate 

Этот запрос работает нормально, но как я могу сделать это в моем кубе для вычисления в MDX?

1 Ответ

0 голосов
/ 24 марта 2019

У меня нет того же примера, но похожая структура куба с датой завершения / получения:

with
member departDate as [Received].[Year Qtr Month].CurrentMember.Member_Key
member arriveDate as [Completed].[Year Qtr Month].CurrentMember.Member_Key
member arriveDateNextStop as [Completed].[Year Qtr Month].CurrentMember.Lead(1).Member_Key
member idleDays as departDate-arriveDateNextStop
 SELECT NON EMPTY { departDate,arriveDate,arriveDateNextStop,idleDays } ON 0
 , NON EMPTY
 { ([Completed].[Year Qtr Month].[Date].ALLMEMBERS
  * [Received].[Year Qtr Month].[Date].ALLMEMBERS ) }  ON 1 
 FROM ( SELECT ( { [Completed].[Year Qtr Month].[Date].&[6213] } ) ON COLUMNS
 FROM [MyCube])

У меня также есть целочисленный ключ для измерения даты (CurrentMember.Member_Key).1 = 1998-01-01, 2 = 1998-01-02 и т. Д. До сегодняшнего дня.Вам необходимо создать свойство в измерении Date, если ваш ключ Date является классическим YYYYMMDD (который вы не можете вычесть, чтобы получить разницу в днях, я могу сделать это в моем примере).И используйте его как CurrentMember.Properties («имя свойства») вместо Member_Key.

Основная часть формулы: функция Lag / Lead для получения пред.или следующий член. enter image description here

Пожалуйста, обновляйте при возникновении вопросов.

...