元组的缓慢计算度量
Slow calculated measure with tuple
我有一个事实 table,它包含有关一家公司买卖多少的所有信息。为了创建关于 f.ex 保证金的 som 计算,我需要使用购买行和销售行来获得正确的计算。
现在,我创建了一个计算量度,它给出了正确的结果,但是我添加到查询中的维度越多,使用这个计算量度时查询运行的速度就越慢。 return 我用来查找有关购买的行的元组似乎花费了很多时间。
我将元组用于 "store" 采购行,但元组变得非常大,因为我需要包括销售行使用的维度的所有默认成员,以便使用它们。基本上我的元组看起来像这样,只是具有更多维度层次结构:
(
[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]
)
然后我将这个元组与销售行中的度量相乘,得到我的结果。
有人对如何提高查询性能有任何建议吗?计算有效,如果我只按几个维度进行切片,它工作得很好,性能也不错,但我添加的越多,速度越慢,用户会遇到性能问题。
由于使用的维度数量增加,存储引擎必须扫描额外的文件,这可能是这种性能下降的原因。
从我的角度来看,根据它们的有效性,我有几个建议:
- 实施分区(如果尚未实施)以扫描较少的数据量。
"Materialize"一些元组到物理维度(如果MDX中没有动态,后期绑定函数等):
2.1。将代表元组的相应键添加到您的源 tables.
2.2。在这些键上构建适当的维度。
2.3。使用这些 "ex-tuples".
的计算度量
示例:
您有 1 亿行 table,列为:SomeDate, Customer, Product, Amount
和一个单分区度量值组。
您需要创建像 (2015-01-01, Customer A, Product Z, Amount)
这样的元组。
服务器必须扫描整个数据以获取精确值。
- 按
SomeDate
年(+切片)添加分区后,服务器将只占用 2015 个分区。
2.1。将列 Tuple_ID int 添加到 table 并在 ETL 期间映射它。
例如Tuple_ID = 1 where Customer = 'Customer A' and Product = 'Product Z'
2.2。在这个新字段上创建一个维度(或在附加 table 上创建一个带有组合列表的维度,以便能够轻松修改逻辑)。
2.3。在计算中使用([Tuple ID].[Tuple ID].&[1],[Measures].[Amount])
。
这种技术的优点是服务器只接受预先计算的值,因此查询速度快。
我有一个事实 table,它包含有关一家公司买卖多少的所有信息。为了创建关于 f.ex 保证金的 som 计算,我需要使用购买行和销售行来获得正确的计算。
现在,我创建了一个计算量度,它给出了正确的结果,但是我添加到查询中的维度越多,使用这个计算量度时查询运行的速度就越慢。 return 我用来查找有关购买的行的元组似乎花费了很多时间。
我将元组用于 "store" 采购行,但元组变得非常大,因为我需要包括销售行使用的维度的所有默认成员,以便使用它们。基本上我的元组看起来像这样,只是具有更多维度层次结构:
(
[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]
)
然后我将这个元组与销售行中的度量相乘,得到我的结果。
有人对如何提高查询性能有任何建议吗?计算有效,如果我只按几个维度进行切片,它工作得很好,性能也不错,但我添加的越多,速度越慢,用户会遇到性能问题。
由于使用的维度数量增加,存储引擎必须扫描额外的文件,这可能是这种性能下降的原因。
从我的角度来看,根据它们的有效性,我有几个建议:
- 实施分区(如果尚未实施)以扫描较少的数据量。
"Materialize"一些元组到物理维度(如果MDX中没有动态,后期绑定函数等):
2.1。将代表元组的相应键添加到您的源 tables.
2.2。在这些键上构建适当的维度。
2.3。使用这些 "ex-tuples".
的计算度量
示例:
您有 1 亿行 table,列为:SomeDate, Customer, Product, Amount
和一个单分区度量值组。
您需要创建像 (2015-01-01, Customer A, Product Z, Amount)
这样的元组。
服务器必须扫描整个数据以获取精确值。
- 按
SomeDate
年(+切片)添加分区后,服务器将只占用 2015 个分区。
2.1。将列 Tuple_ID int 添加到 table 并在 ETL 期间映射它。
例如Tuple_ID = 1 where Customer = 'Customer A' and Product = 'Product Z'
2.2。在这个新字段上创建一个维度(或在附加 table 上创建一个带有组合列表的维度,以便能够轻松修改逻辑)。
2.3。在计算中使用([Tuple ID].[Tuple ID].&[1],[Measures].[Amount])
。
这种技术的优点是服务器只接受预先计算的值,因此查询速度快。