在Excel中使用OLAP多维数据集; 在较大的date范围内确定每月的价值?

我一直在做一个OLAP多维数据集作为Excel中的一个枢轴表,现在有一段时间了,但是最近我正在尝试整合一些计算的措施来简化一些事情,而且我碰到了一堵墙。

该多维数据集有datefilter设置,指定月份和年份(他们得到更具体的,但更细的水平不使用)。

这些行将列出单个项目,并且这些值可以反映2个度量:一个反映date范围的平均得分,另一个反映平均所基于的观察次数。

我想创build一个计算的度量,只要满足2个条件,就会显示每个项目的平均得分:

  1. 整个date范围内至less有100个观测值
  2. 在数据透视表中指定的date范围内没有观测值的月份。

我还应该澄清,我使用的date范围会有所不同,也不尽相同,并且不会总是以最近一个月为结束,而是以整个月为单位。

我是那里的一部分,因为根据这个计算出的度量值,只有在date范围内有足够的观察值时,才能提供平均值:

IIF([Measures].[OBSERVATIONS]>=100,[Measures].[AVERAGE],"^^") 

现在,我需要添加没有观察的月份的标准。

我试图使用COUNT(),但是在这种forms下,它忽略了在数据透视表中设置的date范围,并返回所有月份的计数,这个项目有任何值,包括零。

 COUNT(([Calendar].[Calendar].[Month],[Measures].[OBSERVATIONS]),EXCLUDEEMPTY) 

我尝试使用这个expression式确定一个月内观察值的最小值,但它又忽略了date范围,并且不能反映出空单元:

 MIN([Calendar].[Calendar].[Month],[Measures].[OBSERVATIONS]) 

我认为CurrentMember是我需要包括的,但是我不能为它工作。

假设它是相关的,我不确定解释日历层次结构的最佳方式,所以这反映了我的:

OLAP多维数据集日历

第一个日历列表是用于过滤数据透视表数据的日历,它也被拉入上面的mdxexpression式中。

编辑:

感谢@SouravA的答复。 我尝试了一些东西,而且在评论中的格式是有限的,这里是我做了什么的简要说明。

我得到一个错误消息,说:“查询(1,35)parsing器:”WITH“的语法是不正确的”

确保我正确使用这个:

在做出以下更改后,我将所有内容都粘贴到Excel中“计算度量”工具的MDX窗口中。

我当然把OBSERVATIONS和AVERAGE改成了我的多维数据集中的variables名。

我把'[Project]。[ProjectCode]'改为'[Project]。[ProjectName]',这就是我的立方体的设置。

在'[NewMeasure]'我把它改为我正在使用的计算度量的名称。

在'[你的魔方]'我尝试了几个不同的东西; 我在Excel中使用多维数据集公式中的多维数据集引用如下所示:'Cubename NormativeCube',所以我尝试在括号中粘贴引号和引号,将NormativeCube部分closures,并且不用括号。

我还修改了'WHERE'之后的最后一行,以反映如下date范围:'[Calendar]。[Calendar]。[Month]。& 1 &[2015]:[Calendar]。[Calendar]。[Month]。& [12]和[2015]”

我也设置为[日历]。[月]。[月]。& 1 :[日历]。[月]。[月]。[12]'

还有一个问题, 这将工作在任何date范围,还是打算在MDX中指定? 我需要它的function基于立方体filter设置的date范围。

编辑2:

我只需要通过将'> 0'更改为'= 0'来调整这一点,因为原始解决scheme仅显示那些在date范围内没有每月数据的平均值,并调整其中一个日历设置expression式或其他。

 IIF ( [Measures].[OBSERVATIONS]>=100 AND COUNT ( FILTER ( EXISTS ( [Calendar].[Calendar].[Month].MEMBERS ,EXISTING [Calendar].[Calendar].[Month].MEMBERS ) ,[Measures].[OBSERVATIONS] = 0 ) ) = 0 ,[Measures].[AVERAGE] ,"^^" ) 

编辑3:

find了一个限制;

该度量仅适用于为多维数据集定义的date范围处于日历层次结构的整个增量中的情况; 即一个月,一个季度,或一年。 做2个月,2个季度,2年,或者2个季度或者2年以上的时间,将会从IIF()expression式中得出假结果。

我使用了几种不同的方式来设置,但无法使其工作。

编辑4:

回复:日历层次结构

查看[calendar]下方的[calendar],有4个选项:Year,Quarter,Month和Date Key。

在“年,季度和月份”下查看会员,您可以一直深入到个人日。

这些3下的成员属性只是层次结构的下一级别

在date键上,成员属性如下:月份名称月份时间计算(这对我不是很了解)年份周

编辑5:

所以这是(最终)工作。 在某个时刻,我一定弄错了什么,编辑原来的公式就引起了我的第二个问题。 这是为我工作的。

 IIF ( [Measures].[OBSERVATIONS]>=100 AND COUNT ( FILTER ( EXISTS ( [Calendar].[Calendar].[Month].Members ,EXISTING [Calendar].[Calendar].Members ) ,[Measures].[OBSERVATIONS] = 0 ) ) > 0 ,[Measures].[AVERAGE] ,"^^" ) 

当你希望你的计算能识别某个select(上下文)的时候,使用EXISTING子句会派上用场。 以下代码是自解释的。 让我知道如果它的作品。

 WITH SET ZeroObservationMonths AS FILTER ( EXISTS ( [Calendar].[Calendar].[Month].MEMBERS ,EXISTING [Calendar].[Calendar].[Date].MEMBERS ) ,[Measures].[OBSERVATIONS] = 0 ) MEMBER Measures.NewMeasure AS IIF ( [Measures].[OBSERVATIONS]>=100 AND COUNT(ZeroObservationMonths) > 0 ,[Measures].[AVERAGE] ,"^^" ) SELECT [Project].[ProjectCode].MEMBERS ON 1, Measures.[NewMeasure] ON 0 FROM [YourCube] WHERE ({[Calendar].[Calendar].[Date].&D1: [Calendar].[Calendar].[Date].&D2}) 

编辑:如果您打算在Excel中创build度量值,只需在“新计算的度量”文本框中具有下面的MDX代码

 IIF ( [Measures].[OBSERVATIONS]>=100 AND COUNT ( FILTER ( EXISTS ( [Calendar].[Calendar].[Month].MEMBERS ,EXISTING [Calendar].[Calendar].[Date].MEMBERS ) ,[Measures].[OBSERVATIONS] = 0 ) ) > 0 ,[Measures].[AVERAGE] ,"^^" ) 

编辑2:如果过滤可以发生在任何属性上,而不仅仅是date,用上面的脚本中的EXISTING [Calendar].[Calendar].MEMBERSreplaceEXISTING [Calendar].[Calendar].[Date].MEMBERS