SSAS Cube执行MDX查询返回数据少于事实表求助
刚接触SSAS碰到这种Cube数据和事实表对不上的情况太常见了,我帮你梳理几个最关键的排查方向,一步步来定位问题:
先确认维度与事实表的关联是否完整
SSAS在处理Cube时,默认会忽略事实表中找不到对应维度主键的行。你可以先跑一段SQL验证:-- 替换成你的表名和键列 SELECT COUNT(*) AS 无匹配维度的事实行数 FROM 你的事实表 f LEFT JOIN DimBooking d ON f.BookingKey = d.BookingKey WHERE d.BookingKey IS NULL如果结果大于0,说明这些无匹配的事实行根本没进入Cube,这是最常见的原因。
查看Cube处理日志的警告信息
处理Cube时SSAS会记录所有异常,比如“忽略了XX条无维度匹配的事实行”这类提示。你可以在SSMS里右键你的Cube → 查看处理历史,找到最近的处理记录,点开详细日志,这里往往能直接告诉你问题出在哪。检查
NON EMPTY对MDX查询的影响
你的MDX语句里用了NON EMPTY,这个关键字会自动过滤掉所有度量值都为空的行和列。比如某些Booking在事实表里只有记录但没有任何数值型度量(比如金额、数量都是空),那它们会被NON EMPTY筛掉。你可以先去掉NON EMPTY再跑查询试试:SELECT ([Dim Booking].[Booking].[Booking].ALLMEMBERS ) ON ROWS , [Dim Booking Date].[Booking Date].[Booking Date ].ALLMEMBERS ON COLUMNS FROM [cube]如果去掉后数据量和SQL查询接近,那就是这个关键字的过滤作用导致的差异。
检查Cube的筛选与分区设置
看看你的度量组有没有在数据源视图里加过滤条件,或者Cube有没有设置分区,分区的范围是否把部分数据排除在外了。比如分区只包含了某个时间段的数据,而你的SQL查询是查全部时间的,那自然会有差异。维度的未知成员设置
如果维度开启了未知成员(Unknown Member),但设置成了隐藏,那对应无匹配的事实行可能被归类到未知成员但不显示。你可以检查维度属性里的UnknownMember设置,看看是否有隐藏的未知成员包含了这些数据。
内容的提问来源于stack exchange,提问作者oasi711

