查找当前成员月份的天数

时间:2013-12-02 10:44:21

标签: mdx

我希望能够从层次结构currentmember [Date - Calendar Month]中找到天数。

这是我的尝试 - 我的自定义量词NumDaysInMonth对当前月份不起作用 - 请参阅屏幕打印 - 因为它只计算已过去的天数。我感觉函数CLOSINGPERIOD可能会有所帮助,但不确定如何使用它:

WITH    
MEMBER [Measures].[NumDaysInMonth] AS
    COUNT(
        DESCENDANTS(
            [Date].[Date - Calendar Month].CURRENTMEMBER.PARENT,
            [Date].[Date - Calendar Month].[Calendar Day]
        )
    )
MEMBER [Measures].[LastDay] as
    CLOSINGPERIOD(
        [Date].[Date - Calendar Month].[Calendar Day], 
        [Date].[Date - Calendar Month].CURRENTMEMBER
        )
SELECT 
    NON EMPTY
        TAIL(
        [Date].[Date - Calendar Month].[Calendar Day],
        15)
    ON ROWS,
    NON EMPTY
    {
        [Measures].[NumDaysInMonth],
        [Measures].[LastDay] 
    }
    ON COLUMNS
FROM [ourCube]

enter image description here


修改

我创建了这个丑陋的vba函数解决方案 - 必须可以避免这种情况吗?

WITH    
MEMBER [Measures].[NumDaysInMonth] AS
    COUNT(
        DESCENDANTS(
            [Date].[Date - Calendar Month].CURRENTMEMBER.PARENT,
            [Date].[Date - Calendar Month].[Calendar Day]
        )
    )
MEMBER [Measures].[LastDay] as
    DATEPART(
        "D",
        DATEADD(
            "M",
            1,
            CDATE(
                CSTR(vba!Month([Date].[Date - Calendar Month].CURRENTMEMBER.name))
                +"-01-"
                +CSTR(vba!Year([Date].[Date - Calendar Month].CURRENTMEMBER.name))
                )
            )-1
        )
SELECT 
    NON EMPTY
        TAIL(
        [Date].[Date - Calendar Month].[Calendar Day],
        15)
    ON ROWS,
    NON EMPTY
    {
        [Measures].[NumDaysInMonth],
        [Measures].[LastDay] 
    }
    ON COLUMNS
FROM [ourCube]

1 个答案:

答案 0 :(得分:1)

如果您的多维数据集中没有该月的所有日期,则可以采用VBA计算等解决方案。对于不在多维数据集中的任何日期,MDX没有内置的日期计算逻辑。它只能使用多维数据集中可用的成员。 另一种方法是将一个月的所有日子 - 甚至是未来的日子 - 加载到多维数据集中。但这可能会使用户感到困惑。当然,您可以在DSV或用于加载时间维度的表/视图中计算多维数据集加载时间的月份的最后一天。然后,您将时间维度表添加为包含此度量的另一个度量值组,该度量值不会使用sum,而是e。 G。 max作为其聚合函数。

暂且不说:只有当您确定CurrentMember是一天,而不是一个月或一年时,您的解决方案才有效。你可以使用

改进它
IIF(
[Date].[Date - Calendar Month].CurrentMember.Level IS [Date].[Date - Calendar Month].[Calendar Day],
<your calculation>,
NULL
) 

或者您想要使用的任何内容,以防某些日期不是CurrentMember