在Excel中使用OLAP多维数据集; 在较大的date范围内确定每月的价值?
我一直在做一个OLAP多维数据集作为Excel中的一个枢轴表,现在有一段时间了,但是最近我正在尝试整合一些计算的措施来简化一些事情,而且我碰到了一堵墙。
该多维数据集有datefilter设置,指定月份和年份(他们得到更具体的,但更细的水平不使用)。
这些行将列出单个项目,并且这些值可以反映2个度量:一个反映date范围的平均得分,另一个反映平均所基于的观察次数。
我想创build一个计算的度量,只要满足2个条件,就会显示每个项目的平均得分:
- 整个date范围内至less有100个观测值
- 在数据透视表中指定的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是我需要包括的,但是我不能为它工作。
假设它是相关的,我不确定解释日历层次结构的最佳方式,所以这反映了我的:
第一个日历列表是用于过滤数据透视表数据的日历,它也被拉入上面的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].MEMBERS
replaceEXISTING [Calendar].[Calendar].[Date].MEMBERS
。