1

如果我在轴上放置一组超过 16 个成员,SSAS 2012 会扫描所有度量值组分区。如果我放 15 个或更少,则只扫描一个分区。

为了检查这个问题,我创建了一个非常简单的带有销售度量和日期维度的多维数据集。

这是一个示例查询(它是虚拟的,因此它只为“1”轴上的集合中的每个成员返回相同的“VAL”):

with
member val as aggregate
             (
                [Dates].[Calendar].[DateId].&[20100101]:[Dates].[Calendar].[DateId].&[20100102],
                [Measures].[Amount]
             )
select 
        val on 0,
        head([Dates].[Calendar].[DateId].members, 16)  on 1
from [SSDDB]

他的核心功能是 AGGREGATE 2 天(在实际查询中,您可能希望看到 MTD 而不是静态范围)。轴坐标甚至不会严重影响“val”成员,它们只是一些虚拟值的范围。

当我使用15作为HEAD函数参数运行此查询时,我在探查器中有以下跟踪:

Started reading data from the 'Sales 2010' partition.
Finished reading data from the 'Sales 2010' partition.

和以下查询子立方体详细

Dimension 1 [Dates] (+ * *)  [DateId]:+  [Years]:*  [Months]:*

但如果改变1516或更多,那么一切都会改变:

Started reading data from the 'Sales 2005' partition.
Started reading data from the 'Sales 2006' partition.
Started reading data from the 'Sales 2007' partition.
Started reading data from the 'Sales 2008' partition.
Started reading data from the 'Sales 2009' partition.
Started reading data from the 'Sales 2010' partition.
Finished reading data from the 'Sales 2007' partition.
Finished reading data from the 'Sales 2006' partition.
Started reading data from the 'Sales 2011' partition.
Finished reading data from the 'Sales 2005' partition.
Finished reading data from the 'Sales 2008' partition.
Finished reading data from the 'Sales 2009' partition.
Finished reading data from the 'Sales 2010' partition.
Finished reading data from the 'Sales 2011' partition.

现在“DateId”有“全部”标记:

Dimension 1 [Dates] (* * *)  [DateId]:*  [Years]:*  [Months]:*

我尝试使用:

  1. 分区上的直接切片:没有变化
  2. 16+ 成员的静态集:没有变化
  3. 将聚合更改为总和:无更改
  4. 将聚合设置为 1 个成员:它工作正常,但谁需要这样的聚合...
  5. 检查的 DATAID:所有都是连续的,没有间隙,没有重叠

当聚合函数为 SUM 时 - 没什么大不了的,但 DISTINCT COUNT 使所有查询的运行时间延长 3 倍。当您单击 EXCEL 中的“+”按钮并希望查看一个月中每一天的 MTD(不同计数度量)时,这是一个性能杀手。

任何想法如何停止过度扫描?

4

0 回答 0