2015-07-16 3 views
0

Я должен использовать [ZONE]. [MY_ZONE_1] ON ROWS, потому что это группа зон с разными именами, начинающаяся с «зоны, которая начинается с MY_ZONE_1», которую я отфильтровал и установите [ФИЛЬТРИРОВАННАЯ ЗОНА].
Мне нужно показать продукты, доступные на складе (мин. 1 шт.) В [ЗОНА]. [MY_ZONE_1], но нет на складе в [ЗОНА]. [MY_ZONE_2]. Поэтому размер, который я использую здесь для фильтрации результата, - [ZONE]. [MY_ZONE_1], но не может фильтровать [ZONE]. [MY_ZONE_2], потому что я не могу использовать размер [ZONE] на двух разных осях.MDX - Отфильтровать меру другим измерением одного измерения

Что-то вроде:

выберите article_code
где (stock_in_zone1> = 1) & & (stock_in_zone2 равно нулю или = 0)


WITH 
    SET [FILTERED ZONE] AS 
    { 
     { 
     Filter 
     (
      [ZONE].[ZONE].MEMBERS 
     , 
      Instr 
      (
       [ZONE].[ZONE].CurrentMember.Name 
      ,"a zone that starts with MY_ZONE_1" 
      ) 
      > 0 
     ) 
     } 
    } 
    MEMBER [Measures].[AVAILABLE STOCK] AS 
    IIF 
    (
     [Measures].[STOCK] < 1 
    ,null 
    ,[Measures].[STOCK] 
    ) 
SELECT 
    NON EMPTY 
    {[Measures].[AVAILABLE STOCK]} ON 0 
,NON EMPTY 
    CrossJoin 
    (
     [FILTERED ZONE] 
    ,[ARTICLE CODE].[ARTICLE CODE].MEMBERS 
    ) ON 1 
FROM [MyCube]; 

ответ

1

У меня есть тенденция нарушить правило держать вещи простыми, но, надеюсь, вы получите представление о том, как я наружу король вещи вниз в несколько комплектов, чтобы попытаться помочь:

WITH 
    SET [AllArtCodes] AS 
    [ARTICLE CODE].[ARTICLE CODE].MEMBERS 
    SET [AllArtCodes_zone1Greater1] AS //<<to find the article codes in zone 1 with [Measures].[STOCK] >= 1 
    Filter 
    (
     NonEmpty 
     (
     [AllArtCodes] 
     ,[ZONE].[MY_ZONE_1] 
    ) 
    , 
     [Measures].[STOCK] >= 1 
    ) 
    SET [AllArtCodes_zone2nullZero] AS //<<to find the article codes in zone 2 with [Measures].[STOCK] = 0 (this should cover the null option as well) 
    Filter 
    (
     NonEmpty 
     (
     [AllArtCodes] 
     ,[ZONE].[MY_ZONE_2] 
    ) 
    , 
     [Measures].[STOCK] = 0 
    ) 
    SET [intersectAbove] AS //<< narrow to common members of above two custom sets 
    Intersect 
    (
     [AllArtCodes_zone1Greater1] 
    ,[AllArtCodes_zone2nullZero] 
    ) 
    SET [FILTERED ZONE] AS 
    { 
     { 
     Filter 
     (
      [ZONE].[ZONE].MEMBERS 
     , 
      Instr 
      (
       [ZONE].[ZONE].CurrentMember.Name 
      ,"a zone that starts with MY_ZONE_1" 
      ) 
      > 0 
     ) 
     } 
    } 
    MEMBER [Measures].[AVAILABLE STOCK] AS 
    IIF 
    (
     [Measures].[STOCK] < 1 
    ,null 
    ,[Measures].[STOCK] 
    ) 
SELECT 
    NON EMPTY 
    {[Measures].[AVAILABLE STOCK]} ON 0 
,NON EMPTY 
    [FILTERED ZONE] * [intersectAbove] ON 1 //<<filtered set here 
FROM [MyCube]; 
Смежные вопросы