慢MDX查询

时间:2016-11-03 12:01:39

标签: ssas mdx ssrs-2012

我有一个查询,它构建了当月的SSRS报告的当月和年初至今;年使用传递给查询的参数。问题是因为有太多的客户,部件号等,查询执行时间太长。有没有办法更好地编写查询或加快查询速度。对不起,我对此非常陌生。以下是查询...

  WITH
  MEMBER [Measures].[Key for Today] AS 
    Format
    (
      Now(),'yyyyMMdd'
    ) 
  MEMBER [Measures].[Today string] AS 
    '[Date].[Dates].[Day].&[' + [Measures].[Key for Today] + ']' 

  MEMBER [Measures].[Quantity Shipped MTD] AS 
    Sum
    (
      MTD([Date].[Dates].CurrentMember)
     ,[Measures].[Quantity Shipped]
    ) 
  MEMBER [Measures].[Quantity Shipped YTD] AS 
    Sum
    (
      YTD([Date].[Dates].CurrentMember)
     ,[Measures].[Quantity Shipped]
    ) 
  MEMBER [Measures].[Sales Amount MTD] AS 
    Sum
    (
      MTD([Date].[Dates].CurrentMember)
     ,[Measures].[Sales Amount]
    ) 
  MEMBER [Measures].[Sales Amount YTD] AS 
    Sum
    (
      YTD([Date].[Dates].CurrentMember)
     ,[Measures].[Sales Amount]
    ) 
  MEMBER [Measures].[Cost Amount MTD] AS 
    Sum
    (
      MTD([Date].[Dates].CurrentMember)
     ,[Measures].[Cost Amount - Sales]
    ) 
  MEMBER [Measures].[Cost Amount YTD] AS 
    Sum
    (
      YTD([Date].[Dates].CurrentMember)
     ,[Measures].[Cost Amount - Sales]
    ) 
  MEMBER [Measures].[Sales Margin MTD] AS 
    Sum
    (
      MTD([Date].[Dates].CurrentMember)
     ,[Measures].[Sales Margin]
    ) 
  MEMBER [Measures].[Sales Margin YTD] AS 
    Sum
    (
      YTD([Date].[Dates].CurrentMember)
     ,[Measures].[Sales Margin]
    )
 MEMBER [Measures].[Forecast Quantity MTD] AS 
    Sum
    (
      MTD([Date].[Dates].CurrentMember)
     ,[Measures].[Forecast Quantity]
    ) 
  MEMBER [Measures].[Forecast Quantity YTD] AS 
    Sum
    (
      YTD([Date].[Dates].CurrentMember)
     ,[Measures].[Forecast Quantity]
    ) 
  MEMBER [Measures].[Forecast Turnover MTD] AS 
    Sum
    (
      MTD([Date].[Dates].CurrentMember)
     ,[Measures].[Forecast Total Turnover]
    ) 
  MEMBER [Measures].[Forecast Turnover YTD] AS 
    Sum
    (
      YTD([Date].[Dates].CurrentMember)
     ,[Measures].[Forecast Total Turnover]
    ) 
  MEMBER [Measures].[Forcast Cost MTD] AS 
    Sum
    (
      MTD([Date].[Dates].CurrentMember)
     ,[Measures].[Forecast Total Cost]
    ) 
  MEMBER [Measures].[Forecast Cost YTD] AS 
    Sum
    (
      YTD([Date].[Dates].CurrentMember)
     ,[Measures].[Forecast Total Cost]
    ) 
  MEMBER [Measures].[Forecast Margin MTD] AS 
    Sum
    (
      MTD([Date].[Dates].CurrentMember)
     ,[Measures].[Forecast Margin]
    ) 
  MEMBER [Measures].[Forecast Margin YTD] AS 
    Sum
    (
      YTD([Date].[Dates].CurrentMember)
     ,[Measures].[Forecast Margin]
    )
  MEMBER [Measures].[Budget Quantity MTD] AS 
    Sum
    (
      MTD([Date].[Dates].CurrentMember)
     ,[Measures].[Budget Quantity]
    ) 
  MEMBER [Measures].[Budget Quantity YTD] AS 
    Sum
    (
      YTD([Date].[Dates].CurrentMember)
     ,[Measures].[Budget Quantity]
    )  
   MEMBER [Measures].[Budget Turnover MTD] AS 
     Sum
     (
       MTD([Date].[Dates].CurrentMember)
      ,[Measures].[Budget Total Turnover]
     ) 
   MEMBER [Measures].[Budget Turnover YTD] AS 
     Sum
     (
       YTD([Date].[Dates].CurrentMember)
      ,[Measures].[Budget Total Turnover]
     ) 
   MEMBER [Measures].[Budget Cost MTD] AS 
     Sum
     (
       MTD([Date].[Dates].CurrentMember)
      ,[Measures].[Budget Total Cost]
     ) 
   MEMBER [Measures].[Budget Cost YTD] AS 
     Sum
     (
       YTD([Date].[Dates].CurrentMember)
      ,[Measures].[Budget Total Cost]
     ) 
   MEMBER [Measures].[Budget Margin MTD] AS 
     Sum
     (
       MTD([Date].[Dates].CurrentMember)
      ,[Measures].[Budget Margin]
     ) 
   MEMBER [Measures].[Budget Margin YTD] AS 
     Sum
     (
       YTD([Date].[Dates].CurrentMember)
      ,[Measures].[Budget Margin]
    )
SELECT 
  {
    [Measures].[Quantity Shipped MTD],
    [Measures].[Sales Amount MTD],
    [Measures].[Cost Amount MTD],
    [Measures].[Sales Margin MTD],  
    [Measures].[Margin %],
    [Measures].[Forecast Quantity MTD],
    [Measures].[Forecast Turnover MTD],
    [Measures].[Forcast Cost MTD],
    [Measures].[Forecast Margin MTD],
    [Measures].[Margin %],
    [Measures].[Budget Quantity MTD],
    [Measures].[Budget Turnover MTD],
    [Measures].[Budget Cost MTD],
    [Measures].[Budget Margin MTD],
    [Measures].[Margin %],
    [Measures].[Quantity Shipped YTD],
    [Measures].[Sales Amount YTD],
    [Measures].[Cost Amount YTD],
    [Measures].[Sales Margin YTD],  
    [Measures].[Margin %],
    [Measures].[Forecast Quantity YTD],
    [Measures].[Forecast Turnover YTD],
    [Measures].[Forecast Cost YTD],
    [Measures].[Forecast Margin YTD],
    [Measures].[Margin %],
    [Measures].[Budget Quantity YTD],
    [Measures].[Budget Turnover YTD],
    [Measures].[Budget Cost YTD],
    [Measures].[Budget Margin YTD],
    [Measures].[Margin %]
  } ON COLUMNS, 
  NON EMPTY { (
 [Customer].[Customer].[Customer].ALLMEMBERS *
 [Customer Sales].[Summary Prod Group 1].[Summary Prod Group 1].ALLMEMBERS * 
 [Customer Sales].[Vehicle Mode].[Vehicle Mode].ALLMEMBERS * 
 [Customer Sales].[Part Number].[Part Number].ALLMEMBERS ) } 
 ON ROWS 
 FROM ( SELECT ( STRTOSET(@SummaryProdGroup, CONSTRAINED) ) ON COLUMNS 
 FROM ( SELECT ( STRTOSET(@SalesSummaryCode, CONSTRAINED) ) ON COLUMNS 
 FROM ( SELECT ( STRTOSET(@BusinessType, CONSTRAINED) ) ON COLUMNS FROM [Sales]))) 
 Where((
StrToMember
    (
      [Measures].[Today string],constrained
    )),
 IIF( STRTOSET(@BusinessType, CONSTRAINED).Count = 1, STRTOSET(@BusinessType, CONSTRAINED), [Customer].[Business Type].currentmember ), 
 IIF( STRTOSET(@SalesSummaryCode, CONSTRAINED).Count = 1, STRTOSET(@SalesSummaryCode, CONSTRAINED), [Customer].[Sales Summary Code].currentmember ))

谢谢

1 个答案:

答案 0 :(得分:0)

我很想尝试将以下内容移出WHERE条款:

StrToMember
    (
      [Measures].[Today string],constrained
    )

因此WITH子句可能如下所示:

WITH
  MEMBER [Measures].[Key for Today] AS 
    Format
    (
      Now(),'yyyyMMdd'
    ) 
  MEMBER [Measures].[Today string] AS 
    '[Date].[Dates].[Day].&[' + [Measures].[Key for Today] + ']' 
  SET [today] AS 
    StrToSet([Measures].[Today string],constrained)
  MEMBER [Measures].[Quantity Shipped MTD] AS 
    Sum
    (
      MTD([today].ITEM(0))
     ,[Measures].[Quantity Shipped]
    ) 
  MEMBER [Measures].[Quantity Shipped YTD] AS 
    Sum
    (
      YTD([today].ITEM(0))
     ,[Measures].[Quantity Shipped]
    ) 
  ...
  ...