MDX计算成员过滤问题:如何按文档类型统计完成率?
解决MDX中按文档类型统计已完成占比的问题
嘿,我懂你这个困扰!你现在的[Completed Count]计算成员之所以会返回全局的已完成文档总数,是因为你直接指定了[Document].[Is Completed].&[Yes],这会覆盖掉当前查询中[Document Type]的筛选上下文——相当于不管当前选的是什么文档类型,都去查所有已完成的记录。
给你两个简单有效的解决方案:
方案1:用EXISTING保留当前上下文
修改你的[Completed Count]计算成员,加入EXISTING关键字,它会让计算尊重当前查询中已经存在的维度筛选(比如当前的文档类型):
CREATE MEMBER [Measures].[Completed Count] AS ([Measures].[Fact Count], EXISTING [Document].[Is Completed].&[Yes])
这样当你按[Document].[Document Type]分组查询时,[Completed Count]就会自动返回对应文档类型下的已完成文档数了。
方案2:直接在占比公式中保留上下文
如果你不想单独创建[Completed Count],也可以直接在占比计算里同时指定已完成和总数的上下文,确保总数是当前文档类型下的总数,而非全局总数:
CREATE MEMBER [Measures].[Completed Percentage] AS ( ([Measures].[Fact Count], [Document].[Is Completed].&[Yes]) / ([Measures].[Fact Count], [Document].[Is Completed].DefaultMember) ) * 100, FORMAT_STRING = "0.00%"
这里用DefaultMember来获取当前文档类型下的所有文档数(不管是否完成),这样计算出来的占比就是对应类型的正确比例了,还可以加上FORMAT_STRING让结果显示为更直观的百分比格式。
你可以用下面的查询验证效果:
SELECT {[Measures].[Fact Count], [Measures].[Completed Count], [Measures].[Completed Percentage]} ON 0, [Document].[Document Type].[Document Type].MEMBERS ON 1 FROM [YourCubeName]
这个查询就能正确列出每个文档类型的总数量、已完成数量和占比啦。
内容的提问来源于stack exchange,提问作者olf
相关产品推荐
相关产品推荐

