我希望能够从层次结构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]
修改
我创建了这个丑陋的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]
答案 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
。