在下面我成功找到了与该月相关的最后一个完整月份和可计费收入。然后我想在前一个月找到目标并找到该月的收入。认为Lag
将是一个很好的功能,但这似乎不起作用。没有错误,只有第二列[Measures].[PrevMth_BillInc]
没有返回数据:
WITH
MEMBER [Date].[Date - Calendar Month].[LastMth] AS
IIF(
Day(Now()) = 1,
TAIL([Date].[Date - Calendar Month].[Calendar Month],2).Item(1),
TAIL([Date].[Date - Calendar Month].[Calendar Month],2).Item(0)
)
MEMBER [Measures].[LastMth_BillInc] AS
SUM(
[Date].[Date - Calendar Month].[LastMth],
[Measures].[BillableIncome]
)
MEMBER [Measures].[PrevMth_BillInc] AS
SUM(
[Date].[LastMth].Lag(1),
[Measures].[BillableIncome]
)
SELECT
NON EMPTY
{
[Measures].[LastMth_BillInc],
[Measures].[PrevMth_BillInc] //<<<<<this returns nothing
}
ON COLUMNS,
NON EMPTY
ORDER(
[Customer_Dim].[Customer_Hier].[Customer_Level].Members,
[Date].[Date - Calendar Month].[LastMth],
BDESC
)
ON ROWS
FROM [ourCube]
答案 0 :(得分:1)
通过将[LastMth]
定义为计算成员,您可以定义[Date].[Date - Calendar Month]
的新成员,而不是现有成员的别名。因此Lag
不起作用,因为它应用于新成员 - 它位于层次结构中与原始成员并排的位置。由于Lag
是一个对层次结构进行操作的函数,因此它不是定义中使用的原始成员。
你可以通过将LastMth定义为一个包含原始的非计算成员(确切地说,它将包含一个包含原始成员的元组)的集合来解决这个问题,如下所示:
WITH
SET [LastTwo] AS
TAIL([Date].[Date - Calendar Month].[Calendar Month],2)
SET [LastMonth] AS
IIF(
Day(Now()) = 1,
Subset([LastTwo], 1, 1),
Subset([LastTwo], 0, 1)
)
MEMBER [Measures].[LastMth_BillInc] AS
(
[LastMth].Item(0).Item(0),
[Measures].[BillableIncome]
)
MEMBER [Measures].[PrevMth_BillInc] AS
(
[LastMth].ITEM(0).Item(0).Lag(2),
[Measures].[BillableIncome]
)
SELECT
NON EMPTY
{
[Measures].[LastMth_BillInc],
[Measures].[PrevMth_BillInc]
}
ON COLUMNS,
NON EMPTY
ORDER(
[Customer_Dim].[Customer_Hier].[Customer_Level].Members,
[Date].[Date - Calendar Month].[LastMth],
BDESC
)
ON ROWS
FROM [ourCube]
我认为你不需要sum
,你可以像我上面那样使用元组,因为只有一个成员而不是一组要汇总的几个。