Я новичок в MDX, и у меня возникла проблема с фильтрацией значений из суммирования.
Мы хотим выполнить вычисления нормализации, в частности, величину (q), деленную на основу (b), чтобы получить интенсивность (I). Формула довольно проста: I = q / b.
СТРУКТУРА НАШЕГО КУБА:
У нас есть таблицы фактов FactQuantity и FactBasis, каждая из которых связана с нашими таблицами измерений DimOrg и DimTime. Оба измерения имеют иерархию: месяцы объединяются в годы в DimTime, а местоположения объединяются в бизнес-единицы и группы в DimOrg.
Таблицы фактов не синхронизированы друг с другом: только потому, что количество существует для определенного org_id и времени, не гарантируется существование базы для того же самого org_id и времени.
МОЯ ПОПЫТКА НА РЕШЕНИЕ:
Базовая форма вычисляемого члена проста:
[Measures]. [Количество] / [Measures]. [Базисные]
Это прекрасно работает, когда мы видим на самом низком уровне обоих измерений, но проблемы возникают, когда вы сворачиваете измерения и начинаете агрегирование.
Проблема заключается в том, что включены количественные значения, которые не имеют соответствующего базового значения в то же время и в другом месте, что делает числитель слишком большим и, следовательно, неправильным.
БЫСТРЫЙ ПРИМЕР:
org_id 001 в группе A имеет основание 100 и количество 1000, поэтому его расчетная интенсивность равна 1000/100 = 10. Хорошо до сих пор.
org_id 002 также в группе A не имеет основания, но имеет количество 2000, поэтому его расчетные ошибки интенсивности отсутствуют. Хорошо.
При сворачивании в Группу A суммируется количество (3000) и основание (100), в результате чего вычисленная интенсивность равна 30, что неверно для Группы. 2000 должен был быть исключен, потому что у него не было соответствующего базового значения для того же org_id и времени.
Любая помощь, которую вы можете предложить, высоко ценится.
Спасибо