如何在SSAS多维数据集中进行(MDX)计算以获取当前行的值与上一行的值之间的差异?

问题描述 投票:0回答:1

我想进行一个计算,以获得当前行的departDate与前一行的arrivalDateNextStop之间的差异。我有一个有多列的事实表。三个最重要的列是:id,departDate,arrivalDateNextStop。

如果我在我的事实表中有这两行:

  • id departDate arrivalDateNextStop
  • 1 01-01-2019 03-01-2019
  • 1 04-01-2019 07-01-2019

说明:2019年1月1日,我出发前往下一个目的地,我于2019年1月3日到达那里。2019年1月4日,我再次出发前往下一个目的地,我于2019年1月7日抵达那里。

现在我想知道空闲时间是多少天(到达和下一次离开之间的天数)。因此,在这个例子中,空闲时间为1,因为在2019年1月3日到2019年1月4日之间是一天。

首先,我在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中的计算?

ssas cube dimension calculation measure
1个回答
0
投票

我没有相同的示例,但具有已完成/已接收日期的类似立方体结构:

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等直到今天。如果您的日期键是经典YYYYMMDD(您无法减去以获得天差,我可以在我的示例中执行此操作),您需要在日期维度中创建属性。并使用它像CurrentMember.Properties(“属性名称”)而不是Member_Key。

主要公式部分:滞后/引导功能得到普及。或下一个member.enter image description here

如有疑问,请更新。

© www.soinside.com 2019 - 2024. All rights reserved.