强制mdx查询返回列名

时间:2013-06-05 13:17:08

标签: ssas mdx powerpivot

当从powerpivot连接到SSAS时,我遇到了以下问题 - 如果由于某种原因mdx查询没有返回任何行,则也不会返回列名,而powerpivot会给出错误。当在SSMS中执行这样的查询时,如果mdx没有返回任何内容,则获得0行;如果mdx返回1行(列名称和行本身),则获得2行。那么 - 我可以以某种方式强制SSAS返回列名吗? 查询目前看起来有点像这样:

SELECT NON EMPTY {[Measures].[Measure1]} ON COLUMNS,
NON EMPTY {Filter([DimLocalDate].[Date].&[20110101]:[DimLocalDate].[Date].&[20120101],
[JobStatus].[JobStatus].&[1] } ON ROWS
FROM [TheCube]

在我的应用中,客户可以指定日期和状态值。如果没有找到结果,我会期望一个空的结果集,但我得到一个错误。 感谢。

2 个答案:

答案 0 :(得分:3)

重新发生SSIS错误:在数据源中找不到[MEMBER_CAPTION]。

谢谢你的解决方案帮助了我。 我有同样的问题使用SSIS,SSAS输出平面文件报告

我将发布一个扩展示例来帮助其他人定义虚拟集。 请注意,日期会动态插入MDX脚本。

当日期没有数据时,SSIS会抛出异常,因此不会返回任何结果。 这会搞乱列顺序

--create a blank set so that data is still returned when there are no results for that date
set [BlankRowSet] as 
([Activity Period].[Days].[Day].&[2014-02-02T00:00:00], [Well].[Location].[Location].&[])

--create the active set as the crossjoin between Days, Wells
set [ActiveSet] as 
nonempty([Activity Period].[Days].[Day].members * [Well].[Location].[Location].members )

SET [RealSet] as IIF(COUNT([ActiveSet]) > 0, [ActiveSet], {[BlankRowSet]}) 


select {[Measures].[Total boe]} ON COLUMNS 
,[RealSet] ON ROWS 
FROM 
(select {[Activity Period].[Days].[Day].&[2014-02-02T00:00:00]:[Activity Period].[Days].[Day].&    [2014-02-02T00:00:00]} on 0 from [Volumes] )

where 
[Scenario].[All Scenarios].[Category].&[PVR Sales Estimates] 

答案 1 :(得分:1)

我将在select之前检查你的NonEmpty子句是否会返回一个void set,并且在这种情况下,将一个虚拟集放在行上,该set将返回powerpivot至少1行。 类似的东西:

WITH 
SET [mySet] as NON EMPTY ({Filter([DimLocalDate].[Date].&[20110101]:[DimLocalDate].[Date].&[20120101], [JobStatus].[JobStatus].&[1] })
SET [myRealSet] as IIF(COUNT([mySet]) > 0, [mySet], {[DummySet]}) 
SELECT NON EMPTY {[Measures].[Measure1]} ON COLUMNS,
[myRealSet] ON ROWS
FROM [TheCube]

会有帮助吗?