MDX 月初至今年初至今查询

MDX Month To Date Year To Date Query

我正在尝试构建一个查询,该查询将从多维数据集检索值,并根据当前日期构建一个月至今和年初至今的 SSRS 报告。我基本上是在尝试构建一个应该看起来像这样的报告...

Type Customer Product Group Quantity Shipped MTD Quantity Shipped YTD
=====================================================================

OE   CompanyX Bikes                    5                 396 
              Helmets                  10                254

     CompanyY Repair Kits              93                653
              T-shirts                 38                564
              Shoes                    10                120

我真的为此苦苦挣扎,到目前为止,这就是我想出的...

 WITH 
 MEMBER [Measures].[Quantity Shipped YTD] As Sum(YTD([Date].[Dates].CurrentMember),[Measures].[Quantity Shipped])
 Member [Measures].[Quantity Shipped MTD] As Sum(MTD([Date].[Dates].CurrentMember),[Measures].[Quantity Shipped])
 SELECT NON EMPTY { [Measures].[Quantity Shipped MTD], [Measures].[Quantity Shipped YTD] } ON COLUMNS,
 NON EMPTY { ([Customer].[Business Type].[Business Type].ALLMEMBERS * [Customer].[Customer].[Customer].ALLMEMBERS * [Customer Sales].[Summary Prod Group 1].[Summary Prod Group 1].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
 FROM ( SELECT ( -{ [Customer Sales].[Summary Prod Group 1].&[Missing Product Group] } ) ON COLUMNS 
 FROM ( SELECT ( { [Customer].[Customer Code].&[2.254E3], [Customer].[Customer Code].&[2.063E3], [Customer].[Customer Code].&[2.183E3], [Customer].[Customer Code].&[2.261E3], [Customer].[Customer Code].&[5.3753E4], [Customer].[Customer Code].&[1.3084E5], [Customer].[Customer Code].&[1.37058E5] } ) ON COLUMNS 
 FROM ( SELECT ( { [Customer].[Business Type].&[OE] } ) ON COLUMNS 
 FROM ( SELECT ( [Date].[Day].&[Now()]) ON COLUMNS
 FROM [Sales])))) WHERE ( [Customer].[Customer Code].CurrentMember )  
 CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS

上面的查询没有检索到任何东西。我得到的只是一个空白的结果集。我需要完成更多的领域,但我假设如果我能将数量运送到工作中,我就能得到其他一切。请帮忙。发送

目前您没有任何日期 in context 这意味着 currentmember 不会找到太多 - 要有一个日期 in context 您需要添加一个实际的日期成员到您的 WHERESELECT 子句 - 而不是 subselect.

SELECT 子句

Now() 是一个不常见的成员名称,因为它是一个 vba 函数,但如果这确实是名称,那么您可以将它移到 where 子句中:

WITH 
  MEMBER [Measures].[Quantity Shipped YTD] AS 
    Sum
    (
      YTD([Date].[Dates].CurrentMember)
     ,[Measures].[Quantity Shipped]
    ) 
  MEMBER [Measures].[Quantity Shipped MTD] AS 
    Sum
    (
      MTD([Date].[Dates].CurrentMember)
     ,[Measures].[Quantity Shipped]
    ) 
SELECT 
  NON EMPTY 
    {
      [Measures].[Quantity Shipped MTD]
     ,[Measures].[Quantity Shipped YTD]
    } ON COLUMNS
 ,NON EMPTY 
    {
        [Customer].[Business Type].[Business Type].ALLMEMBERS*
        [Customer].[Customer].[Customer].ALLMEMBERS*
        [Customer Sales].[Summary Prod Group 1].[Summary Prod Group 1].ALLMEMBERS
    } ON ROWS
FROM 
(
  SELECT 
    {
      [Customer].[Customer Code].&[2.254E3]
     ,[Customer].[Customer Code].&[2.063E3]
     ,[Customer].[Customer Code].&[2.183E3]
     ,[Customer].[Customer Code].&[2.261E3]
     ,[Customer].[Customer Code].&[5.3753E4]
     ,[Customer].[Customer Code].&[1.3084E5]
     ,[Customer].[Customer Code].&[1.37058E5]
    } ON 0
   ,{[Customer].[Business Type].&[OE]} ON 1
   ,-
      {
        [Customer Sales].[Summary Prod Group 1].&[Missing Product Group]
      } ON 2
  FROM [Sales]
)
WHERE 
  [Date].[Day].&[Now()];

我怀疑这个 [Date].[Day].&[Now()]; 不是成员的名字,而你正试图做一些动态的事情,在这种情况下你需要使用 strToMember

进行研究

我在 AdvWrks 立方体中构建了类似的东西:

WITH 
  MEMBER [Measures].[_YTD] AS 
    Aggregate
    (
      YTD([Date].[Calendar].CurrentMember)
     ,[Measures].[Order Quantity]
    ) 
  MEMBER [Measures].[_MTD] AS 
    Aggregate
    (
      MTD([Date].[Calendar].CurrentMember)
     ,[Measures].[Order Quantity]
    ) 
SELECT 
  {
    [Measures].[_YTD]
   ,[Measures].[_MTD]
  } ON COLUMNS
 ,[Product].[Category].Children ON ROWS
FROM [Adventure Works]
WHERE 
  [Date].[Calendar].[Date].&[20050805];

它returns这个:

如果我想通过使用 vba 函数 now() 使上述动态化,那么这需要发生:

WITH
  MEMBER [Measures].[Key for Today] AS 
    Format
    (
      Now()
     ,'yyyyMMdd'
    ) 
  MEMBER [Measures].[Today string] AS 
    '[Date].[Calendar].[Date].&[' + [Measures].[Key for Today] + ']'  
  MEMBER [Measures].[_YTD] AS 
    Aggregate
    (
      YTD([Date].[Calendar].CurrentMember)
     ,[Measures].[Order Quantity]
    ) 
  MEMBER [Measures].[_MTD] AS 
    Aggregate
    (
      MTD([Date].[Calendar].CurrentMember)
     ,[Measures].[Order Quantity]
    ) 
SELECT 
  {
    [Measures].[_YTD]
   ,[Measures].[_MTD]
  } ON COLUMNS
 ,[Product].[Category].Children ON ROWS
FROM [Adventure Works]
WHERE 
  StrToMember
    (
      [Measures].[Today string]
     ,constrained
    ) ;

感谢 whytheq,这就是我想出的...

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

SELECT NON EMPTY
  {
    [Measures].[Quantity Shipped MTD],
    [Measures].[Quantity Shipped YTD]
  } ON COLUMNS, NON EMPTY
  {
    [Customer].[Business Type].[Business Type].ALLMEMBERS*
    [Customer].[Customer].[Customer].ALLMEMBERS*
    [Customer Sales].[Summary Prod Group 1].[Summary Prod Group 1].ALLMEMBERS} On Rows
From
(
    SELECT 
    {
      [Customer].[Customer Code].&[2.254E3]
     ,[Customer].[Customer Code].&[2.063E3]
     ,[Customer].[Customer Code].&[2.183E3]
     ,[Customer].[Customer Code].&[2.261E3]
     ,[Customer].[Customer Code].&[5.3753E4]
     ,[Customer].[Customer Code].&[1.3084E5]
     ,[Customer].[Customer Code].&[1.37058E5]
    } ON 0
   ,{[Customer].[Business Type].&[OE]} ON 1
   ,-
      {
       [Customer Sales].[Summary Prod Group 1].&[Missing Product Group]
      } ON 2
From [Sales])
Where
StrToMember
    (
      [Measures].[Today string]
     ,constrained
    )