列出所有以前的年份,并测量直到今天,以便所有12个月的数据都可以用于年份。否则,不包括年份

船类

我们有一个典型的日期维度。

我正在努力编写一个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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档