在OLAP多维数据集中,筛选属性时错误的总计总数

Inf*_*ity 11 sql-server excel ssas pivot-table sql-server-2008-r2

用户试图检查每个销售员的销售额。样本数据:

Salesperson   Sales Amount    
001                   1000    
002                    500    
003                    750
Grand Total:          2250
Run Code Online (Sandbox Code Playgroud)

看起来不错,但是Company > Class > Group > Subgroup多维数据集中具有以下层次结构,并且如果用户尝试在过滤器中使用此层次结构-总计总计将失败(如果在此层次结构中未选中任何属性)。样品:

Salesperson   Sales Amount    
001                   1000    
002                    500    
003                    750    
Grand Total:           350
Run Code Online (Sandbox Code Playgroud)

在尝试过滤Date属性之前,我已经注意到了相同的问题,如果不是每月的每一天都被选中,它也会显示错误的总计。

您是否知道为什么会发生以及如何解决?

销售金额是物理量度(不是计算量度),是从SQL视图中选择的(每个事实都相同)。

错误总计

我在这里问过同样的问题,但是没人能回答。

我尝试删除所有MDX计算(作用域),但总计总数仍然不正确。

干净的MDX计算

错误总计

编辑

我注意到这样过滤时会发生问题:

层次过滤器

如上图所示,从层次结构的第一级选择1个元素,从层次结构的第二级选择1个元素,从层次结构的第三级选择1个元素。

如果未过滤第3级,则显示良好的总计。

编辑2

我试图在SSAS上进行跟踪,它返回的输出与Excel中的输出完全相同。在行上使用Salesperson维度时,它生成了以下MDX:

SELECT NON EMPTY { [Measures].[Sales Amount] } ON COLUMNS, 
NON EMPTY { ([Salesperson].[Salesperson].[Salesperson].ALLMEMBERS ) } 
DIMENSION PROPERTIES MEMBER_CAPTION, 
MEMBER_UNIQUE_NAME ON ROWS FROM ( 
SELECT ( {  [Item].[Class - Group - Subgroup].[Class].&[XXX]&[1.], 
            [Item].[Class - Group - Subgroup].[Group].&[XXX]&[2.]&[2.2.], 
            [Item].[Class - Group - Subgroup].[Subgroup].&[XXX]&[2.]&[2.3.]&[2.3.1.] } 
) ON COLUMNS FROM ( SELECT ( { [Company].[Company].&[XXX] } ) ON COLUMNS 
FROM [Sales])) 
WHERE ( [Company].[Company].&[XXX], [Item].[Class - Group - Subgroup].CurrentMember ) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
Run Code Online (Sandbox Code Playgroud)

不使用Salesperson维度生成的此MDX:

SELECT NON EMPTY { [Measures].[Sales Amount] } ON COLUMNS 
FROM ( SELECT ( { [Item].[Class - Group - Subgroup].[Class].&[XXX]&[1.], 
[Item].[Class - Group - Subgroup].[Group].&[XXX]&[2.]&[2.2.], 
[Item].[Class - Group - Subgroup].[Subgroup].&[XXX]&[2.]&[2.3.]&[2.3.1.] } ) ON COLUMNS 
FROM ( SELECT ( { [Company].[Company].&[XXX] } ) ON COLUMNS 
FROM [Sales])) WHERE ( [Company].[Company].&[XXX], [Item].[Class - Group - Subgroup].CurrentMember ) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
Run Code Online (Sandbox Code Playgroud)

我注意到即使我没有在行上使用任何维度(在上面的示例中我使用了Salesperson维度),它也显示了错误的总计。

例如,它显示:

Sales Amount 
350
Run Code Online (Sandbox Code Playgroud)

并且在行上使用Salesperson维度时:

Salesperson   Sales Amount    
001                   1000    
002                    500    
003                    750    
Grand Total:           350
Run Code Online (Sandbox Code Playgroud)

小智 1

我想从另一个角度来看待这个问题,并建议问题不是 SQL/SSAS,而是 Excel。在具有小计和总计的数据透视表中,总计不是由多维数据集而是由客户端应用程序计算。我已经经历过几次这种情况,并发现这是 Excel 的一个已知问题。该解决方案通常涉及在 Excel 中创建一个新的计算字段来提供总计。这是令人沮丧的,尤其是当 Excel 是其他用户访问多维数据集的首选客户端应用程序时。如果有什么安慰的话,我在 Tableau 等其他工具中也经历过一两次这种情况,但原因略有不同,解决方案也不同。

以下是确认该问题的 Microsoft 知识库的链接。影响2003-2019版本!!!

https://support.microsoft.com/en-us/help/211470/calculated-field-returns-in Correct-grand-total-in-excel