Операторы case многомерных выражений в предложении WHERE

Я играю с MDX в Adventure Works. Я пробую разные вещи, чтобы просто практиковаться (поэтому я знаю, что, вероятно, есть лучший способ использовать иерархию дат для достижения этой цели, но я пытаюсь сделать это с именем месяца, а не с конкретными именами месяца и года (если это имеет смысл) То, что я пытаюсь сделать, это использовать оператор case, который будет отставать для 2 моих наборов, но не будет отставать для других 2. Другими словами, я хочу, чтобы он возвращал значения 2010 года для моего Q1 (июль, август). , сентябрь) и наборы Q2 (октябрь, ноябрь, декабрь), но значения 2011 года для наборов Q3 (январь, февраль, март) и наборы Q4 (апрель, май, июнь). Вот что у меня есть, но оператор case просто дает отставание 1 для всех. Итак, я понимаю, как это работает, но, похоже, не могу понять, как вернуть разные значения для каждого набора, как указано выше.

WITH 
    SET [Q1 Combined] AS {
    [Date].[Month of Year].&[7],
    [Date].[Month of Year].&[8],
    [Date].[Month of Year].&[9]   }

SET [Q2 Combined] AS {
    [Date].[Month of Year].&[10],
    [Date].[Month of Year].&[11],
    [Date].[Month of Year].&[12]   }

SET [Q3 Combined] AS {
    [Date].[Month of Year].&[1],
    [Date].[Month of Year].&[2],
    [Date].[Month of Year].&[3]   }

SET [Q4 Combined] AS {
    [Date].[Month of Year].&[4],
    [Date].[Month of Year].&[5],
    [Date].[Month of Year].&[6]   }

MEMBER [Date].[Month of Year].[FY Q1 Fix] AS Aggregate([Q1 Combined])
MEMBER [Date].[Month of Year].[FY Q2 Fix] AS Aggregate([Q2 Combined])
MEMBER [Date].[Month of Year].[FY Q3 Fix] AS Aggregate([Q3 Combined])
MEMBER [Date].[Month of Year].[FY Q4 Fix] AS Aggregate([Q4 Combined])

SELECT
[Measures].[Internet Sales Amount] ON COLUMNS,

{
[Date].[Month of Year].[FY Q1 Fix],
[Date].[Month of Year].[FY Q2 Fix],
[Date].[Month of Year].[FY Q3 Fix],
[Date].[Month of Year].[FY Q4 Fix]} ON ROWS
                                                                                            } ON ROWS


FROM [Adventure Works]

WHERE **I WANT TWO DIFFERENT SLICES**

Другими словами, я хочу:

[FY Q1 Fix] и [FY Q2 Fix] должны быть разделены и отображать [Date].[2010] меры

[Исправление 3 кв. ФГ] и [Исправление 4 кв. ФГ] в разрезе и показывают [Дата].[2011] меры


person chitown88    schedule 30.07.2017    source источник


Ответы (1)


Я был бы более склонен поместить логику различных фрагментов в ваше предложение WITH, а не в предложение WHERE. Итак, ниже вы можете видеть, что есть один жестко закодированный год, а затем я использую отставание от двух наборов кварталов:

WITH 
  SET [targetYear] AS 
    [Date].[Fiscal Year].&[2008] 
  SET [Q1 Combined] AS 
      {
        [Date].[Month of Year].&[7]
       ,[Date].[Month of Year].&[8]
       ,[Date].[Month of Year].&[9]
      }
    * 
      [targetYear].Item(0) 
  SET [Q2 Combined] AS 
      {
        [Date].[Month of Year].&[10]
       ,[Date].[Month of Year].&[11]
       ,[Date].[Month of Year].&[12]
      }
    * 
      [targetYear].Item(0) 
  SET [Q3 Combined] AS 
      {
        [Date].[Month of Year].&[1]
       ,[Date].[Month of Year].&[2]
       ,[Date].[Month of Year].&[3]
      }
    * 
      [targetYear].Item(0).Lag(1) 
  SET [Q4 Combined] AS 
      {
        [Date].[Month of Year].&[4]
       ,[Date].[Month of Year].&[5]
       ,[Date].[Month of Year].&[6]
      }
    * 
      [targetYear].Item(0).Lag(1) 
  MEMBER [Date].[Month of Year].[FY Q1 Fix] AS 
    Aggregate([Q1 Combined]) 
  MEMBER [Date].[Month of Year].[FY Q2 Fix] AS 
    Aggregate([Q2 Combined]) 
  MEMBER [Date].[Month of Year].[FY Q3 Fix] AS 
    Aggregate([Q3 Combined]) 
  MEMBER [Date].[Month of Year].[FY Q4 Fix] AS 
    Aggregate([Q4 Combined]) 
SELECT 
  [Measures].[Internet Sales Amount] ON COLUMNS
 ,{
    [Date].[Month of Year].[FY Q1 Fix]
   ,[Date].[Month of Year].[FY Q2 Fix]
   ,[Date].[Month of Year].[FY Q3 Fix]
   ,[Date].[Month of Year].[FY Q4 Fix]
  } ON ROWS
FROM [Adventure Works];
person whytheq    schedule 15.08.2017
comment
В порядке. Я понимаю что ты имеешь ввиду. В этом есть смысл. Мне даже не пришло в голову сделать это таким образом. - person chitown88; 16.08.2017
comment
рад, что это помогло - вы знаете, что когда у вас есть эта точка входа, вы можете использовать либо strToMember, либо StrToSet, чтобы клиентский параметр мог быть передан в mdx - person whytheq; 16.08.2017