2015-08-05 3 views
1

В отношении даты, у меня есть 4 дня (21,22,27,28) как день .. У меня есть измерение времени, которое имеет час. Я выбрал только 7 из часа во времени. Доступная мера - Max Price. Для параметра [Time dimension.Hour]. [7] только 2 дня i.e 21 и 28 имеют значения и значение null для 22 и 27. Теперь я хочу получить результаты дна 2 на основе даты фильтрации (по максимальной цене). Ниже приведен запрос mdx:Mdx не удаляет элементы иерархии на основе существующих фильтров

WITH 
    SET [XL_Col_Dim_0] AS 
    VisualTotals 
    (
     (DISTINCT 
     Hierarchize 
     (
      { 
      Ascendants([Time dimensions.Hour].[7]) 
      ,Descendants([Time dimensions.Hour].[7]) 
      } 
     )) 
    ) 
    SET [XL_Row_Dim_0] AS 
    VisualTotals 
    (
     (DISTINCT 
     Hierarchize 
     (
      { 
      { 
       DrillDownLevelBottom 
       (
       {[Date dimensions.Day].[All Date dimensions.Days]} 
       ,2, 
       ,[Measures].[Max Price] 
      ) 
      } 
      } 
     )) 
    ) 
SELECT 
    NON EMPTY 
    Hierarchize 
    (
     Intersect 
     (
     AddCalculatedMembers 
     (
      { 
      DrillDownLevel({[Time dimensions.Hour].[All Time dimensions.Hours]}) 
      } 
     ) 
     ,[XL_Col_Dim_0] 
    ) 
    ) 
    DIMENSION PROPERTIES 
    PARENT_UNIQUE_NAME 
    ,HIERARCHY_UNIQUE_NAME 
    ON COLUMNS 
,NON EMPTY 
    Hierarchize 
    (
     Intersect 
     (
     AddCalculatedMembers 
     (
      { 
      DrillDownLevel({[Date dimensions.Day].[All Date dimensions.Days]}) 
      } 
     ) 
     ,[XL_Row_Dim_0] 
    ) 
    ) 
    DIMENSION PROPERTIES 
    PARENT_UNIQUE_NAME 
    ,HIERARCHY_UNIQUE_NAME 
    ON ROWS 
FROM [mycube] 
WHERE 
    [Measures].[Max Price] 
CELL PROPERTIES 
    VALUE 
,FORMAT_STRING 
,LANGUAGE 
,BACK_COLOR 
,FORE_COLOR 
,FONT_FLAGS; 

Проблема в том, что он вернет 27 и 28, хотя [Час]. [7] не имеет значения для даты 27. Вместо этого даты, которые должны быть возвращены, являются 21 и 28.

EDIT Когда я заменяю [Date dimension.Day]. [Все размеры Date.Days] с [Date dimensions.Day] . [21], [Date dimensions.Day]. [28] которые являются доступными датами, когда [Час]. [7] уже используется как slicer, кажется, что все работает нормально, но если я делаю дно 1 вместо 2, он все равно возвращает 2 результата для измерения дня, что неверно, оно должно возвращаться только 1. Кажется, что-то DrillDownLevelBottom работает не так, как ожидалось ,

+0

Почему вы не используете 'BottomCount' функцию, если вы хотите, чтобы нижние два из списка, основанные на измерении? – whytheq

+0

@whytheq DrillDownLevelBottom используется для получения нижней части большинства элементов набора. На самом деле запрос генерируется excel. Я пытаюсь подключить excel с mondrian. –

+0

Без сомнения, это самый сложный код MDX, с которым я когда-либо сталкивался (мое личное мнение, поскольку я редко использовал эти функции и не видел, чтобы кто-то использовал большинство из них). Вопрос: Если этот код генерируется excel, я предполагаю, что вы не ищете другой запрос. Как мы можем вам помочь? – SouravA

ответ

1

Если вы просто хотите, чтобы запрос, чтобы посмотреть на not isempty членов, то вы должны использовать функцию NonEmpty

NonEmpty({[Date dimensions.Day].[All Date dimensions.Days]}) 

Если вы хотите, чтобы рассмотреть те дни, которые NonEmpty в течение часа 7 затем использовать кортеж в второй аргумент функции NonEmpty:

NonEmpty(
    {[Date dimensions.Day].[All Date dimensions.Days]} 
    ,(
    [Time dimensions.Hour].[7] 
    ) 
) 

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

Пожалуйста, попробуйте это очень простой скрипт изначально для обеспечения вашей Not IsEmpty логики работают нормально:

SELECT 
    [Measures].[Max Price] ON COLUMNS, 
    Filter(
     [Date dimensions.Day].Members 
    ,Not IsEmpty([Time dimensions.Hour].[7]) 
    ) 
    ON ROWS 
FROM [mycube]; 

Может быть, для каждого дня будет существовать каждый час -Постарайтесь добавить в мере для кортежа, используемого в IsEmpty функция:

SELECT 
    [Measures].[Max Price] ON COLUMNS, 
    Filter(
     [Date dimensions.Day].Members 
    ,Not IsEmpty(
      (
       [Time dimensions.Hour].[7] 
      ,[Measures].[someMeasureInMyCube] 
      ) 
     ) 
    ) 
    ON ROWS 
FROM [mycube]; 
+0

Mondrian, похоже, не поддерживает подпись NonEmpty. Я использую mondrian 3.7 на данный момент, но ничего не вижу, чтобы предложить 4.2 поддерживает NonEmpty. –

+0

Вместо этого я попытался использовать Фильтр ({[Date dimension.Day]. [Все размеры Date.Days]}, Not IsEmpty ([Time dimensions.Hour]. [7])) , но это не даст мне другого значения хорошо .. –

+1

wow - это меня удивляет - 'NonEmpty' является ключевым в реализации Microsoft' mdx' – whytheq

Смежные вопросы