0

我对 MDX 和 SSAS 的经验很少,所以不知道从哪里开始:

我们正在从 SQL 2005 环境迁移到 SQL 2012。在 SSAS 2005 上,下面的查询运行大约 3 到 4 秒。在 SSAS 2012 上运行相同的查询时,它会在完成前运行高达 1 小时 58 分钟。谁能解释一下为什么性能如此糟糕,以及如何改进它?我们使用的是 SQL 2012 11.0.5532.0 (X64)。

提前非常感谢。

with member [Measures].[Calculation] as
  Format(
        IIF(isempty([Measures].[average complience to requirements]), null,
        [Measures].[average complience to requirements]),
        "#,0.00"
  )

select
  non empty
  {
        [Measures].[average complience to requirements],
        [Measures].[Calculation]
  } on 0,
  nonempty
  (
        [Customer].[App Key Company Id].children *
        [Location].[App Key Region Id].children *
        [Category].[App Key Category Id].children *
        [Vendor].[App Key Vendor Id].children,
        [average complience to requirements]
  )  on 1
from
  [BSC]
where
  (
        strtomember(
              "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" +  Format( Now(), "yyyyMM") + "]"
              ):
        strtomember(
              "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" +  Format( Now(), "yyyyMM") + "]").Lag(2)

  )
4

2 回答 2

0

If current month is the last member of [Date Submitted Date].[YYYY-MMMM-DD] hierarchy, query could be simplified to this one:

with member [Measures].[Calculation] as
  Format([Measures].[average complience to requirements],"#,0.00")
select
  {
        [Measures].[average complience to requirements],
        [Measures].[Calculation]
  } on 0,
  nonempty
  (
        [Customer].[App Key Company Id].children *
        [Location].[App Key Region Id].children *
        [Category].[App Key Category Id].children *
        [Vendor].[App Key Vendor Id].children,
        [average complience to requirements]
  )  on 1
from
  [BSC]
where
  Tail([Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].Members,3)
  1. Unnecessary Non Empty checks were removed from axis 0 and [Measures].[Calculation].
  2. TAIL function is used instead of dynamic members to let server use block mode instead of cell-by-cell computation.

Please also answer questions under your message to have better understanding of possible issues.

于 2015-01-09T12:37:46.803 回答
0

不确定这是否可行,但也试试这个:

这里WITHsubselect

with member [Measures].[Calculation] as
  Format(
        IIF(isempty([Measures].[average complience to requirements]), null,
        [Measures].[average complience to requirements]),
        "#,0.00"
  )

select
  non empty
  {
        [Measures].[average complience to requirements],
        [Measures].[Calculation]
  } on 0,
  nonempty
  (
        [Customer].[App Key Company Id].children *
        [Location].[App Key Region Id].children *
        [Category].[App Key Category Id].children *
        [Vendor].[App Key Vendor Id].children
        //[average complience to requirements] //removed
  )  on 1
from
  (

  SELECT 
  {
        strtomember(
              "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" +  Format( Now(), "yyyyMM") + "]"
              ):
        strtomember(
              "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" +  Format( Now(), "yyyyMM") + "]").Lag(2)

  } ON 0
  FROM [BSC]
  )

以下查询需要多长时间?

1)没有计算成员

//with member [Measures].[Calculation] as
//  Format(
//        IIF(isempty([Measures].[average complience to requirements]), null,
//        [Measures].[average complience to requirements]),
//        "#,0.00"
//)

select
  non empty
  {
      //  [Measures].[average complience to requirements], /////This measure removed
        [Measures].[Calculation]
  } on 0,
  nonempty
  (
        [Customer].[App Key Company Id].children *
        [Location].[App Key Region Id].children *
        [Category].[App Key Category Id].children *
        [Vendor].[App Key Vendor Id].children
        //[average complience to requirements] //removed
  )  on 1
  FROM [BSC]

  where (
  {
        strtomember(
              "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" +  Format( Now(), "yyyyMM") + "]"
              ):
        strtomember(
              "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" +  Format( Now(), "yyyyMM") + "]").Lag(2)

  }

  )

2) ROWS 上没有任何内容

with member [Measures].[Calculation] as
  Format(
        IIF(isempty([Measures].[average complience to requirements]), null,
        [Measures].[average complience to requirements]),
        "#,0.00"
)

select
  non empty
  {
        [Measures].[average complience to requirements], /////This measure removed
        [Measures].[Calculation]
  } on 0,
{} on 1
  FROM [BSC]

  where (
  {
        strtomember(
              "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" +  Format( Now(), "yyyyMM") + "]"
              ):
        strtomember(
              "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" +  Format( Now(), "yyyyMM") + "]").Lag(2)

  }

  )

3)没有切片机

select
  non empty
  {
      //  [Measures].[average complience to requirements], /////This measure removed
        [Measures].[Calculation]
  } on 0,
  nonempty
  (
        [Customer].[App Key Company Id].children *
        [Location].[App Key Region Id].children *
        [Category].[App Key Category Id].children *
        [Vendor].[App Key Vendor Id].children
        //[average complience to requirements] //removed
  )  on 1
  FROM [BSC]

如果没有任何结论,只需对问题的实际原因进行一些更类似的故障排除即可。一旦你弄清楚了,它就会很容易工作。对我们来说,在对内部立方体没有任何了解的情况下进行扶手椅分析显然是没有意义的,而实际查询看起来还不错。

于 2015-01-09T13:46:38.627 回答