MDX Case Statement с несколькими критериями в одном «Когда» - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь максимально объединить следующий сценарий MDX, и мне было интересно, есть ли способ объединить четыре квартала (Q1, Q2, Q3, Q4) в одну строку?Кроме того, если у вас есть какие-либо дальнейшие идеи о том, как упростить это, я все уши!

Case [Period].CurrentMember
  When [Q1] Then [Finance Charge and NSF Revenue] / ([CXO_Average Total A/R]+[Average Total A/R - Normalized Load])*4
  When [Q2] Then [Finance Charge and NSF Revenue] / ([CXO_Average Total A/R]+[Average Total A/R - Normalized Load])*4
  When [Q3] Then [Finance Charge and NSF Revenue] / ([CXO_Average Total A/R]+[Average Total A/R - Normalized Load])*4
  When [Q4] Then [Finance Charge and NSF Revenue] / ([CXO_Average Total A/R]+[Average Total A/R - Normalized Load])*4
  When [Total Year] Then [Finance Charge and NSF Revenue] / ([CXO_Average Total A/R]+[Average Total A/R - Normalized Load])        
Else 
  [Finance Charge and NSF Revenue] / ([CXO_Average Total A/R]+[Average Total A/R - Normalized Load])*12
End

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Оператор IS является вашим другом здесь: я не уверен, что оператор = будет даже работать, а ....Properties ("Member_Value",TYPED) ="caps" работает медленно.

Также я пытался использовать IIFкоторый в MDX обычно быстрее, чем CASE

IIF(
      ( [Period].CURRENTMEMBER IS [Period].[Period].[Q1] ) 
   OR ( [Period].CURRENTMEMBER IS [Period].[Period].[Q1] ) 
   OR ( [Period].CURRENTMEMBER IS [Period].[Period].[Q1] ) 
   OR ( [Period].CURRENTMEMBER IS [Period].[Period].[Q1] ) 
   , DIVIDE(
         [Finance Charge and NSF Revenue]
        ,( [CXO_Average Total A/R]+[Average Total A/R - Normalized Load] )*4
     )
   , IIF(
        ( [Period].CURRENTMEMBER IS [Period].[Period].[Total Year] )
        , DIVIDE(
             [Finance Charge and NSF Revenue]
            ,( [CXO_Average Total A/R]+[Average Total A/R - Normalized Load] )
          )
        , DIVIDE(
             [Finance Charge and NSF Revenue]
            ,( [CXO_Average Total A/R]+[Average Total A/R - Normalized Load] )*12
          )
)

Редактировать

В более сложных запросах использование IIF / IS будет быстрее - это эквивалентноСкрипт MoazRubs AdvWrks:

WITH 
MEMBER measures.test as 
IIF(   
  [Product].[Subcategory].currentmember IS  [Product].[Subcategory].[Caps]
  OR [Product].[Subcategory].currentmember IS  [Product].[Subcategory].[Chains] 
    OR [Product].[Subcategory].currentmember IS  [Product].[Subcategory].[Gloves] 
  , 1
    , IIF(
       [Product].[Subcategory].currentmember IS  [Product].[Subcategory].[Fenders] 
     ,5
         ,NULL
      )
) 
SELECT 
   {
        [Measures].[Internet Sales Amount],
            measures.test
        } ON 0,
[Product].[Subcategory].[Subcategory] ON 1 
FROM 
[Adventure Works]
0 голосов
/ 15 декабря 2018

Это должно работать

Case 
  When [Period].CurrentMember =[Q1] or [Period].CurrentMember =[Q2] or [Period].CurrentMember =[Q3] or [Period].CurrentMember =[Q4]
  Then [Finance Charge and NSF Revenue] / ([CXO_Average Total A/R]+[Average Total A/R - Normalized Load])*4
   When [Period].CurrentMember =[Total Year] Then [Finance Charge and NSF Revenue] / ([CXO_Average Total A/R]+[Average Total A/R - Normalized Load])        
Else 
  [Finance Charge and NSF Revenue] / ([CXO_Average Total A/R]+[Average Total A/R - Normalized Load])*12
End

Ниже приведен еще один пример, основанный на приключенческих работах, который помогает.

with member measures.test as 
case  
when 
[Product].[Subcategory].currentmember.Properties ("Member_Value",TYPED) ="caps" 
or [Product].[Subcategory].currentmember.Properties ("Member_Value",TYPED) ="chains" 
or [Product].[Subcategory].currentmember.Properties ("Member_Value",TYPED) ="gloves" 
then 1 
when [Product].[Subcategory].currentmember.Properties ("Member_Value",TYPED) ="Fenders" 
then 5
else 0 end 
select {[Measures].[Internet Sales Amount],measures.test} on columns ,
[Product].[Subcategory].[Subcategory] on rows 
from 
[Adventure Works]

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...