我想进行一个计算,以获得当前行的departDate与前一行的arrivalDateNextStop之间的差异。我有一个有多列的事实表。三个最重要的列是:id,departDate,arrivalDateNextStop。
如果我在我的事实表中有这两行:
说明: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中的计算?
我没有相同的示例,但具有已完成/已接收日期的类似立方体结构:
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.
如有疑问,请更新。