SSAS 2005上的快速MDX查询在SSAS 2012上的性能非常差

SSAS 2005上的快速MDX查询在SSAS 2012上的性能非常差,ssas,mdx,cube,ssas-2012,Ssas,Mdx,Cube,Ssas 2012,我对MDX和SSA的经验很少,因此不知道从何处开始: 我们正在从SQL 2005环境转移到SQL 2012环境。在SSAS2005上,下面的查询大约在3到4秒钟内运行。在SSAS 2012上运行相同的查询时,它会运行1小时58分钟,然后才能完成。谁能解释一下为什么性能如此糟糕,以及如何改进性能?我们使用的是SQL 2012 11.0.5532.0 X64 先谢谢你 with member [Measures].[Calculation] as Format( IIF(isem

我对MDX和SSA的经验很少,因此不知道从何处开始:

我们正在从SQL 2005环境转移到SQL 2012环境。在SSAS2005上,下面的查询大约在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)

  )

如果当前月份是[Date Submitted Date].[YYYY-MMMM-DD]层次结构的最后一个成员,则可以将查询简化为以下查询:

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)
已从轴0和[Measures].[Calculation]删除不必要的非空检查。 使用TAIL函数代替动态成员,让服务器使用块模式,而不是逐单元计算。
另外,请回答您邮件中的问题,以便更好地了解可能出现的问题。

不确定这是否可行,但也请尝试一下这一点:

此处替换为带有subselect的子句

以下查询需要多少时间

1无计算成员

2排上没有

3无切片机


如果没有任何结论,只需进行一些类似的故障排除,以找出问题的实际原因。一旦你弄明白了,就很容易去做了。对我们来说,当实际查询看起来很正常时,在不了解内部多维数据集的情况下进行纸上谈兵的分析显然是毫无意义的。

请回答以下问题:1。“BSC”多维数据集中是否有分区?2.“Date Submitted Date”维度成员是否大于当前月份?为什么在两个轴中都选择[average Compliance to requirements]?把它从AXIS1@AlexPeshik回答你的问题:1。二号。No@user24605491.所以,没有预取分区问题可能会导致这种减速,这是好事。2.我想,您可以通过如下所述更改WHERE filter to TAIL函数来提高速度。但不幸的是,这不是你问题的一般答案。您能否在分析器中创建两条记录道,其中包含最多数量的SSAS相关事件,并对其进行分析?如果第2点的答案为“是”,则TAIL将不起作用。另外,有时候,我个人看到NON-EMPTY子句实际上加快了查询速度。@Sourav_Agasti,我完全同意你的说法。幸运的是,作者回答“不”,所以我们不需要添加一些复杂的逻辑。谢谢Alex,我尝试了这个,它只运行了几秒钟,但没有返回任何结果。尝试在尾值设置为20的情况下运行它,但仍然没有返回任何数据。@user246059,我已经在示例数据上测试了它,它可以正常工作。很抱歉浪费了你的时间,也许我错过了什么,所以它只适用于我的数据。如果您有时间,尝试部分替换代码段:首先是StrToMembers,然后是主查询的其余部分。如果有效,则移除其他零件。如果否,请删除非空和IIF,然后使用stroMembers筛选器版本进行测试。我仍然在想,为什么它不起作用…感谢你的建议-尝试运行这个,并在40分钟后它还没有完成时终止它。在SSAS 2005上大约需要3-4秒,所以我不知道为什么SSAS 2012会慢得多。请查看更多查询以进行一些疑难解答,如我的编辑所示。
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]
  )
//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)

  }

  )
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)

  }

  )
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]