Выборочное суммирование многомерных выражений для задачи нормализации

Я новичок в многомерных выражениях, и у меня возникла проблема с фильтрацией значений из суммирования.

Мы хотим выполнить вычисления нормализации, в частности количество (q), деленное на основу (b), чтобы получить интенсивность (I). Формула довольно проста: I=q/b.

НАША КУБИЧЕСКАЯ СТРУКТУРА:

У нас есть таблицы фактов FactQuantity и FactBasis, каждая из которых привязана к нашей таблице измерений DimOrg и DimTime. Оба измерения имеют иерархию: месяцы объединяются в годы в DimTime, а местоположения объединяются в бизнес-единицы и группы в DimOrg.

Таблицы фактов не синхронизированы друг с другом: просто потому, что количество существует для определенного org_id и времени, не гарантируется существование основы для того же самого org_id и времени.

МОЯ ПОПЫТКА РЕШЕНИЯ:

Базовая форма вычисляемого члена проста: [Показатели].[Количество]/[Показатели].[Основание].

Это прекрасно работает, когда мы просматриваем оба измерения на самом низком уровне, но проблемы возникают, когда вы сворачиваете измерения и начинаете агрегирование.

Проблема заключается в том, что включаются значения количества, которые не имеют соответствующего базового значения в то же время и в том же месте, что делает числитель слишком большим и, следовательно, неверным.

БЫСТРЫЙ ПРИМЕР:

org_id 001 в группе A имеет основу 100 и количество 1000, поэтому его расчетная интенсивность составляет 1000/100 = 10. До сих пор хорошо. org_id 002 также в Группе A не имеет основы, но имеет количество 2000, поэтому его рассчитанные ошибки интенсивности отсутствуют. Отлично.

Сведение к Группе А суммирует количество (3000) и базис (100), оставляя расчетную интенсивность 30, что неверно для Группы. 2000 год нужно было исключить, потому что у него не было соответствующего базового значения для того же org_id и времени.

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

Спасибо,


person Stin    schedule 22.04.2010    source источник


Ответы (1)


Deepak Puri ответил на это на форумах MSDN:

Предполагая, что [DimOrg].[Location] и [DimTime].[Month] являются атрибутами конечного уровня для двух измерений, вы можете просуммировать числитель [Measures].[Quantity] только по тем листам с базой, например:

Sum(NonEmpty(existing [DimOrg].[Location].[Location].Members * [DimTime].[Month].[Month].Members, [Measures].[Basis]), [Measures].[Quantity]) / [Measures].[Basis]

person Stin    schedule 22.04.2010