MDX计算度量值报错求助:SQL MDX查询执行问题咨询
排查MDX计算度量值错误的解决方案
嘿,我来帮你搞定这个MDX查询的问题!首先看你写的代码,核心错误出在动态构造Periodo成员的语法上,咱们一步步拆解:
错误原因分析
你试图用[BSC Fact].[Periodo].&[+CStr(2018)+01]这种方式拼接成员键,但MDX不支持在成员引用的&[]里直接内嵌函数和字符串拼接操作。&[]是用来直接引用已知固定键值的成员,不能在里面写CStr或者+这种拼接逻辑,这会导致解析器无法识别正确的成员,从而抛出错误。
另外,你最后一个度量值[Measures].[NMESACT5]的代码没写完,不过这是次要问题,先解决核心的成员构造问题。
修正后的解决方案
要动态构造成员,咱们得用MDX的StrToMember函数——它能把拼接好的成员唯一名称字符串转换成有效的成员引用。下面是修正后的完整代码示例:
WITH -- 构造2018年1月的度量值 MEMBER [Measures].[NMESACT1] AS ([Measures].[ValorBase], StrToMember("[BSC Fact].[Periodo].&[" + CStr(2018) + "01]")) -- 构造2018年2月的度量值 MEMBER [Measures].[NMESACT2] AS ([Measures].[ValorBase], StrToMember("[BSC Fact].[Periodo].&[" + CStr(2018) + "02]")) -- 构造2018年3月的度量值 MEMBER [Measures].[NMESACT3] AS ([Measures].[ValorBase], StrToMember("[BSC Fact].[Periodo].&[" + CStr(2018) + "03]")) -- 构造2018年4月的度量值 MEMBER [Measures].[NMESACT4] AS ([Measures].[ValorBase], StrToMember("[BSC Fact].[Periodo].&[" + CStr(2018) + "04]")) -- 构造2018年5月的度量值(补全你没写完的部分) MEMBER [Measures].[NMESACT5] AS ([Measures].[ValorBase], StrToMember("[BSC Fact].[Periodo].&[" + CStr(2018) + "05]")) -- 别忘了添加SELECT语句来指定查询的维度和目标立方体 SELECT {[Measures].[NMESACT1], [Measures].[NMESACT2], [Measures].[NMESACT3], [Measures].[NMESACT4], [Measures].[NMESACT5]} ON COLUMNS, -- 这里替换成你需要的行维度,比如某个维度的成员集合 [Some Dimension].[Your Hierarchy].Members ON ROWS FROM [Your Cube Name] -- 替换成你的立方体名称
额外优化建议
如果年份是固定的2018,其实可以不用StrToMember,直接写死成员键会更高效,比如:
MEMBER [Measures].[NMESACT1] AS ([Measures].[ValorBase], [BSC Fact].[Periodo].&[201801])
只有当年份需要动态获取(比如取当前年份)时,才需要用StrToMember结合函数拼接。另外要注意,确保[BSC Fact].[Periodo]的成员键确实是201801这种格式,如果键的格式是2018-01或者其他,要对应调整拼接的字符串内容。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

