用元组缓慢计算的度量

时间:2015-10-13 18:21:50

标签: ssas mdx cube

我有一个事实表,其中包含有关公司购买和销售量的所有信息。为了创建关于f.ex保证金的som计算,我需要使用行进行购买以及销售行以获得正确的计算。

现在,我已经创建了一个计算度量,它给出了正确的结果,但是我添加到查询中的维度越多,使用此计算度量时查询运行的速度就越慢。似乎它使用了大量时间来返回我用来查找有关购买行的元组。

我正在使用元组来存储" purcase行,但元组变得非常大,因为我需要包含销售行使用的维度的所有默认成员才能使用它们。基本上,我的元组看起来像这样只有更多的维度层次结构:

(
        [Dimension 1].[Hierarchy 1].&[member]
        ,[Dimension 1].[Hierarchy 2].&[member]    
        ,[Dimension 2].[Hierarchy 1].&[member]
        ,[Dimension 3].[Hierarchy 1].&[member]
        ,[Dimension 4].[Hierarchy 1].&[member]          
        ,[Measures].[Purchase Standard Cost]
    )

然后我将这个元组与销售行中的一个度量相乘,得到我的结果。

任何人都有关于如何提高查询性能的任何提示?计算有效,如果我只是按几个维度进行切片就可以正常运行,性能也不差,但是我添加的越多,它就越慢,用户就会遇到性能问题。

1 个答案:

答案 0 :(得分:2)

由于使用的维度数量增加,存储引擎必须扫描其他文件,这可能是此类性能下降的原因。

根据我的观点,我有几点建议:

  1. 实施分区(如果尚未实施)以扫描较少量的数据。
  2. " Materialise的"一些元组到物理维度(如果在MDX中没有动态,后期绑定功能等):

    2.1。将相应的键(表示元组)添加到源表中。

    2.2。在这些键上构建适当的尺寸。

    2.3。使用这些" ex-tuples"

  3. 计算出的度量

    示例:

    您有一个包含列的100M行表:SomeDate, Customer, Product, Amount和一个单分区的度量值组。

    您需要创建(2015-01-01, Customer A, Product Z, Amount)等元组。

    服务器必须扫描整个数据以获取准确的值。

    1. SomeDate年(+切片)添加分区后,服务器将只占用2015分区。
    2. 2.1。将列Tuple_ID int添加到表中并在ETL期间映射它。

      E.g。 Tuple_ID = 1 where Customer = 'Customer A' and Product = 'Product Z'

      2.2。在这个新字段上创建一个维度(或在包含组合列表的附加表上创建一个维度,以便能够轻松修改逻辑)。

      2.3。在计算中使用([Tuple ID].[Tuple ID].&[1],[Measures].[Amount])

      这种技术的优点是服务器只采用预先计算的值,因此查询速度很快。