Проблема фильтра MDX - PullRequest
       17

Проблема фильтра MDX

3 голосов
/ 05 ноября 2008

Я довольно новичок во всем, что касается MDX, но следующее просто сводит меня с ума. FILTER заявление, которое я использую, действует ... странно. Пример кода с последующим описанием:

SELECT
    {
        FILTER(
            MEMBERS([Time].[5-4-4 Week Year]),
            [Measures].[Ship Gross Units] > 0
        )
    }
    ON COLUMNS,
    {
        FILTER(
            MEMBERS([Group].[Alternate Hierarchies]),
            [Measures].[Ship Gross Units] > 0
        )
    }
    ON ROWS
FROM SBD.SBD
WHERE
    (
        [FiscalYear].[FY09],
        [Scenario].[Actuals Total],
        [Measures].[Ship Gross Units],
        [Channel].[FOS]
    )

Я пытаюсь получить брутто-единицы для определенного канала продаж по неделям финансового года (некоторые столбцы слегка запутаны). Все эти фильтры установлены из-за того, что мне часто нужно их разбирать на уровне SKU, и проще иметь на своем компьютере усеченный набор данных (пусть, скажем, работает БД!).

Проблема , этот запрос возвращает 0 продаж в канале FOS. Это казалось странным, поэтому я удалил фильтр строк:

SELECT
    {
        FILTER(
            MEMBERS([Time].[5-4-4 Week Year]),
            [Measures].[Ship Gross Units] > 0
        )
    }
    ON COLUMNS,
    MEMBERS([Group].[Alternate Hierarchies])
    ON ROWS
FROM SBD.SBD
WHERE
    (
        [FiscalYear].[FY09],
        [Scenario].[Actuals Total],
        [Measures].[Ship Gross Units],
        [Channel].[FOS]
    )

И вдруг продажи появляются на канале FOS. Это поражает меня; Ранее я предполагал, что фильтрую, чтобы получать строки, показывающие продажи, и не получил ни одного. Сейчас я показываю все, и есть строки с продажами. Достаточно легко обойти эту проблему с помощью Perl или чего-то еще, но я бы лучше решил ее «правильно».

Я вполне уверен, что просто неправильно понимаю некоторые мелкие детали, но я устал от удара головой о стол.

Спасибо!

1 Ответ

2 голосов
/ 10 ноября 2008

Я обычно работаю с Microsoft Analysis Services, но MDX обычно очень похож на тот, который используется в Essbase.

Ось будет оцениваться независимо, поэтому оператор фильтра для Group будет рассматривать только элементы в предложении where. Так возможно ли, что у ваших валовых юнитов есть некоторые негативы, и они меньше или равны 0 в 2009 финансовом году? Или количество ваших единиц достаточно велико, чтобы они потенциально переполняли тип данных и переходили в отрицательные числа?

Один из возможных способов обойти, если вы просто ищете непустые ячейки, - это использовать ключевое слово NON EMPTY на оси. например.

SELECT    
   NON EMPTY MEMBERS([Time].[5-4-4 Week Year]),
     ON COLUMNS,
   NON EMPTY  MEMBERS([Group].[Alternate Hierarchies])
     ON ROWS
FROM SBD.SBD
WHERE
    (
        [FiscalYear].[FY09],
        [Scenario].[Actuals Total],
        [Measures].[Ship Gross Units],
        [Channel].[FOS]
    )
...