SSRS报表执行报错:DataSet查询存在'}附近语法错误'
问题排查:SSRS报表执行时的MDX语法错误
报错信息
报表处理期间出错。(rsProcessingAborted)
数据集“DataSet1”的查询执行失败。(rsErrorExecutingCommand)
“}”附近有语法错误。
相关DataSet代码
<DataSet Name="EstimateYear"> <Query> <DataSourceName>DataSource1</DataSourceName> <CommandText> SELECT { } ON 0, { ( [EstimateYear].[Year].[Year], ORDER ( [EstimateYear].[Version].[Version], [EstimateYear].[Version].MEMBER_VALUE, ASC ) ) } ON 1 FROM [Model] WHERE { [EstimateYear].[CurrentVersion].[1] } </CommandText> <rd:DesignerState> <QueryDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/AnalysisServices/QueryDefinition"> ... </QueryDefinition> </rd:DesignerState> </Query> <Fields> <Field Name="Field1"> <DataField>...</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> <Field Name="Field2"> <DataField>...</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> <Field Name="Field3"> <Value>=...</Value> </Field> </Fields> </DataSet>
问题分析与排查方向
1. MDX语法直接错误
当前MDX查询中,SELECT子句的0轴(列轴)是空集合{},这不符合MDX语法规范——MDX要求SELECT语句的轴必须包含至少一个有效成员或集合,空集合会直接触发“}”附近的语法错误,这是当前报错的核心原因。
修复建议:在0轴位置添加需要查询的度量值集合,例如:
SELECT {[Measures].[你的度量名称]} ON 0, { ([EstimateYear].[Year].[Year], ORDER([EstimateYear].[Version].[Version],[EstimateYear].[Version].MEMBER_VALUE,ASC)) } ON 1 FROM [Model] WHERE {[EstimateYear].[CurrentVersion].[1]}
2. 自定义安全扩展排查(排除语法问题后)
若修复MDX语法后仍报错,再排查自定义安全扩展的影响:
- 在SSDT中直接运行修正后的MDX查询(连接同一数据源),对比报表门户的执行结果,判断是否为报表服务器环境或安全扩展的问题
- 检查自定义安全扩展是否限制了对
[Model]立方体、[EstimateYear]维度或相关成员的访问权限 - 查看报表服务器日志,获取更详细的错误堆栈,确认是否存在安全扩展相关的异常信息
内容的提问来源于stack exchange,提问作者user3167162
相关产品推荐
相关产品推荐

