Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mdx 我可以对自定义成员使用Lag函数吗_Mdx - Fatal编程技术网

Mdx 我可以对自定义成员使用Lag函数吗

Mdx 我可以对自定义成员使用Lag函数吗,mdx,Mdx,在下文中,我成功地找到了最后一个完整的月份以及与该月份相关的可计费收入。然后我想确定前一个月的目标,并找到该月的收入。我认为Lag将是一个很好的函数,但这似乎不起作用。没有错误,只是没有为第二列返回数据[Measures].[PrevMth_BillInc]: WITH MEMBER [Date].[Date - Calendar Month].[LastMth] AS IIF( Day(Now()) = 1, TAIL([Date].[Date - Cal

在下文中,我成功地找到了最后一个完整的月份以及与该月份相关的可计费收入。然后我想确定前一个月的目标,并找到该月的收入。我认为
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]
与
成员[日期].[日期-日历月].[LastMth]为
IIF(
天(现在())=1,
尾部([日期][日期-日历月][日历月],2)。第(1)项,
尾部([日期][日期-日历月][日历月],2)。项(0)
)
成员[措施][LastMth_BillInc]为
总数(
[日期][日期-日历月][最后一个月],
[措施][应付账款收入]
)
成员[措施].[PrevMth_BillInc]为
总数(
[日期][LastMth]。滞后(1),
[措施][应付账款收入]
)
挑选
非空
{
[措施][LastMth_BillInc],

[度量].[PrevMth_BillInc]/通过将
[LastMth]
定义为计算成员,您可以定义
[Date].[Date-日历月]的新成员
,而不是现有成员的别名。因此,
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
,你可以像我上面做的那样使用元组,因为只有一个成员而不是几个成员的集合要求和。

@FrankPI…你的答案仍然返回一个空的结果集-我可以编辑你的答案吗?@FrankPI-所以当我在
中用
创建一个
集合时,它看起来很有用注意它来自的层次结构,而如果我创建了一个成员,它就不知道了?@whytheq是的,我编辑了我的答案来更详细地解释这个问题。@whytheq
Item(0)
,应用于一个集合,返回集合的第一个元组,而
Item(0)
,应用于一个元组,返回元组的第一个成员。因此,如果应用
,Item(0).Item(0)
对于一维单元素集,您将获得其中包含的(一个且唯一的)成员。@如果要使计算成员成为级别的一部分,请使其成为父级成员的子级。但是,在Analysis Services中,计算成员的同级关系不太可靠。