Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server MDX查询速度非常慢,在SSRS中返回内存异常_Sql Server_Ssrs 2008_Ssas_Mdx - Fatal编程技术网

Sql server MDX查询速度非常慢,在SSRS中返回内存异常

Sql server MDX查询速度非常慢,在SSRS中返回内存异常,sql-server,ssrs-2008,ssas,mdx,Sql Server,Ssrs 2008,Ssas,Mdx,我正试图从以下多维表达式(MDX)查询中获取总金额超过100k的所有记录的详细列表: 尽管我通过创建存储过程获得了快速的结果,并且最终结果少于1000行,但我的MDX查询在SSMS中永远运行,在SSRS中返回内存异常。有没有关于如何优化或增强它的想法 您可以使用Having而不是Filter,因为它是在非空之后应用的,您可能会获得更好的性能(请参见Chris Webb)。这将是查询的新版本: with member [measures].[total] as [Measures].[m1] +

我正试图从以下多维表达式(MDX)查询中获取总金额超过100k的所有记录的详细列表:


尽管我通过创建存储过程获得了快速的结果,并且最终结果少于1000行,但我的MDX查询在SSMS中永远运行,在SSRS中返回内存异常。有没有关于如何优化或增强它的想法

您可以使用
Having
而不是
Filter
,因为它是在
非空
之后应用的,您可能会获得更好的性能(请参见Chris Webb)。这将是查询的新版本:

with member [measures].[total] as 
[Measures].[m1] + [Measures].[m2] + [Measures].[m3]
select non empty
[measures].[total] on columns, 
non empty 
[dim1].[h1].allmembers
* [dim1].[h2].allmembers
* [Loss Date].[Date].[Year].allmembers
* [Dim1].[h3].allmembers 
having [measures].[total]>100000 and [Measures].[Open File Count]>0 on rows
from [Monthly Summary]
where ([1 Date - Month End].[Month End Date].[Month].&[20120331])

您可以使用
Having
而不是
Filter
,因为它是在
非空
之后应用的,您可能会获得更好的性能(请参见Chris Webb)。这将是查询的新版本:

with member [measures].[total] as 
[Measures].[m1] + [Measures].[m2] + [Measures].[m3]
select non empty
[measures].[total] on columns, 
non empty 
[dim1].[h1].allmembers
* [dim1].[h2].allmembers
* [Loss Date].[Date].[Year].allmembers
* [Dim1].[h3].allmembers 
having [measures].[total]>100000 and [Measures].[Open File Count]>0 on rows
from [Monthly Summary]
where ([1 Date - Month End].[Month End Date].[Month].&[20120331])

要减少内存,请按尺寸排序

而不是:

[dim1].[h1].allmembers
* [dim1].[h2].allmembers
* [Loss Date].[Date].[Year].allmembers
* [Dim1].[h3].allmembers 
使用


在封面下,SSA将内部加入dim1成员,外部加入丢失日期成员

要减少内存,请按尺寸排序

而不是:

[dim1].[h1].allmembers
* [dim1].[h2].allmembers
* [Loss Date].[Date].[Year].allmembers
* [Dim1].[h3].allmembers 
使用


在封面下,SSA将内部加入dim1成员,外部加入丢失日期成员

我建议做一些修改

首先,您真的希望在查询中返回每个维度的所有成员吗?如果它们满足过滤器中的条件,则将包括在内。此外,我还发现将where子句更改为subselect在某些情况下性能更好。您需要测试它是否会改变性能。接下来,您可以先使用非空函数,将其放入Filter函数中,从而减少正在筛选的成员数。此外,在某些情况下,使用多态运算符(*)的性能比使用交叉连接函数或创建成员的元组集差。如果轴上只有一个项目,则不需要非空on列。我将所有这些建议结合在一起,如下所示:

with member [measures].[total] as 
[Measures].[m1] + [Measures].[m2] + [Measures].[m3]
select 
[measures].[total] on columns, 
filter (
   nonempty(
      ([dim1].[h1].[h1].members,
       [dim1].[h2].[h2].members,
       [Loss Date].[Date].[Year].members,
       [Dim1].[h3].[h3].members)
      , [measures].[m1]),
, [measures].[total]>100000 and [Measures].[Open File Count]>0) on rows
from
(select [1 Date - Month End].[Month End Date].[Month].&[20120331] on columns 
from [Monthly Summary])
有关非空与非空的比较,请参见以下内容:。在某些情况下,将一个非空函数放在一个过滤器函数中可能会产生性能影响,有时不会——您需要进行测试


问题可能在维度或多维数据集设计中(存储引擎问题),而不是在查询中(公式引擎问题)。您可以使用以下技术进行诊断:。白皮书是为SSAS 2005编写的,但仍然适用于SSAS的更高版本。

我建议进行一些更改

首先,您真的希望在查询中返回每个维度的所有成员吗?如果它们满足过滤器中的条件,则将包括在内。此外,我还发现将where子句更改为subselect在某些情况下性能更好。您需要测试它是否会改变性能。接下来,您可以先使用非空函数,将其放入Filter函数中,从而减少正在筛选的成员数。此外,在某些情况下,使用多态运算符(*)的性能比使用交叉连接函数或创建成员的元组集差。如果轴上只有一个项目,则不需要非空on列。我将所有这些建议结合在一起,如下所示:

with member [measures].[total] as 
[Measures].[m1] + [Measures].[m2] + [Measures].[m3]
select 
[measures].[total] on columns, 
filter (
   nonempty(
      ([dim1].[h1].[h1].members,
       [dim1].[h2].[h2].members,
       [Loss Date].[Date].[Year].members,
       [Dim1].[h3].[h3].members)
      , [measures].[m1]),
, [measures].[total]>100000 and [Measures].[Open File Count]>0) on rows
from
(select [1 Date - Month End].[Month End Date].[Month].&[20120331] on columns 
from [Monthly Summary])
有关非空与非空的比较,请参见以下内容:。在某些情况下,将一个非空函数放在一个过滤器函数中可能会产生性能影响,有时不会——您需要进行测试


问题可能在维度或多维数据集设计中(存储引擎问题),而不是在查询中(公式引擎问题)。您可以使用以下技术进行诊断:。白皮书是为SSAS 2005编写的,但仍然适用于更高版本的SSAS。

存储过程的作用与MDX查询相同?是的。我必须创建存储过程,它可以工作,但要求是从立方体中创建报告存储过程的功能与MDX查询相同?是的,Robert。我必须创建存储过程,它可以工作,但要求是从cubeThanks Santiii创建报告,我将此与Meff的答案结合起来,结果是15秒!谢谢Santiii,我把这个和Meff的答案结合起来,结果是15秒!谢谢Stacia的回答。实际上,我认为空值是我的问题。使用have代替filter解决了这个问题。我还检查了你的解决方案。过滤器内部的非空也起到了作用。谢谢Stacia的回答。实际上,我认为空值是我的问题。使用have代替filter解决了这个问题。我还检查了你的解决方案。过滤器内部的非空也起到了作用。改变顺序真的重要吗?我是一个mdx新手。改变顺序真的重要吗?我是mdx的新手。