我们有一个典型的日期维度。
我正在努力编写一个MDX
清单以列出Dim.Year维成员并度量严格包含所有月份的数据(从1月到12月),否则不包括年份?
这:
SELECT
[Measures].[Internet Sales Amount] ON 0
,[Date].[Calendar].[Calendar Year].MEMBERS ON 1
FROM [Adventure Works];
返回此:
如果我现在补充一下,NON EMPTY
我应该摆脱2009年和2010年:
SELECT
[Measures].[Internet Sales Amount] ON 0
,NON EMPTY
[Date].[Calendar].[Calendar Year].MEMBERS ON 1
FROM [Adventure Works];
现在返回:
上面是一个非常简单的示例。
其它测试可能要求我们摆脱null
使用其他功能,如S FILTER
/ NonEmpty
/ HAVING
/ IIF
。
编辑
为了只返回具有12个月数据的年份,我编写了以下内容(比上述内容还复杂一点!)。尽管您肯定需要采取其他措施来实现自己的目标,但我稍后会尝试简化操作,
WITH
MEMBER [Measures].[cntMths] AS
Count
(
NonEmpty
(
Descendants
(
[Date].[Calendar].CurrentMember
,[Date].[Calendar].[Month]
,SELF
)
,[Measures].[Internet Sales Amount]
)
)
SELECT
{
[Measures].[Internet Sales Amount]
} ON 0
,NON EMPTY
[Date].[Calendar].[Calendar Year].MEMBERS HAVING
[Measures].[cntMths] = 12 ON 1
FROM [Adventure Works];
编辑(对于@sourav_agasti)
这是一个Adventure Works
仅使用属性层次结构的解决方案,例如,对于没有格式正确的Date维度的多维数据集:
WITH
MEMBER [Measures].[cntMths] AS
Count
(
NonEmpty
(
[Date].[Calendar Year].CurrentMember
*
[Date].[Month of Year].[Month of Year].MEMBERS
,[Measures].[Internet Sales Amount]
)
)
SELECT
{} ON 0
,[Date].[Calendar Year].[Calendar Year].MEMBERS HAVING
[Measures].[cntMths] = 12 ON 1
FROM [Adventure Works];
这等效于使用上述方法的Sourav脚本:
WITH
MEMBER [Measures].[cntMths] AS
Count
(
NonEmpty
(
[Dim Year].[Year].CurrentMember
*
[Dim Month].[Month].MEMBERS
,[Measures].[Foo]
)
)
SELECT
{} ON 0
,[Dim Year].[Year].[Year].MEMBERS HAVING
[Measures].[cntMths] = 12 ON 1
FROM [Your Cube];
进一步编辑
我昨晚偶然发现了一篇提供更有效方法的文章。显然Count - NonEmpty
,我上面所做的并未调整为在块计算模式下工作,而是在工作Sum -IIF
。因此,这是使用后面的方法的一种更快的替代方法:
WITH
MEMBER [Measures].[cntMths - S] AS
Sum
(
[Date].[Month of Year].[Month of Year].MEMBERS
,IIF
(
IsEmpty([Measures].[Internet Sales Amount])
,null
,1
)
)
SELECT
{[Measures].[cntMths - S]} ON 0
,[Date].[Calendar Year].[Calendar Year].MEMBERS HAVING
[Measures].[cntMths - S] = 12 ON 1
FROM [Adventure Works];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句