Можно ли создать повторяющееся измерение в хранилище данных? - PullRequest
1 голос
/ 26 августа 2010

Существует ли шаблон, который может обрабатывать повторяющиеся измерения в хранилище данных? У меня есть постоянная структура субъектов компании. Факт продажи может быть назначен на каждом уровне. Пример

 Company A                  <- sales facts here
    Company A subcompany    <- sales facts here
         Department A1      <- sales facts here
         Department A2      <- sales facts here
 Company B                  <- sales facts here
 Company C                  <- sales facts here
    Company C department    <- sales facts here

При отображении суммы факта продаж для Компании A я хочу, чтобы она была суммой продаж всего дерева.

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

Я думал о трех уровнях иерархии, но в некоторых компаниях вообще нет отделов.

Я использую InfiniDB и пытаюсь настроить Mondrian и JPalo

Ответы [ 2 ]

1 голос
/ 26 августа 2010

Просто отмените нормирование в таблице dimDepartment

dimDepartment          Example Data
----------------       -------------
DepartmentKey            1234
DepartmentBusinessKey    a_b_a1
Department               A1
SubCompany               B
Company                  A

Так для всей компании A:

select
    sum(Amount) as TotalSale
  , sum(Taxes)  as TotalTax
from factSale      as f
join dimDepartment as d on d.DepartmentKey = f.DepartmentKey
where Company = 'A' 

для дочерней компании B компании A

where Company    = 'A'
  and SubCompany = 'B'

для отдела A1, подкомпания B, компания A

where Company    = 'A'
  and SubCompany = 'B'
  and Department = 'A1'

Если у компании нет подгрупп, просто используйте 'none' or 'main' в качестве названия подгруппы по умолчанию.

0 голосов
/ 20 сентября 2010

Ваш вопрос здесь действительно относится к моделированию рваных иерархий по сравнению с фиксированными иерархиями. Это большая тема, и, хотя существуют методы для хранения и запроса рваных иерархий, во многих случаях вы обнаружите, что тот или иной аспект вашей архитектуры или бизнес-модели заставляет вас иметь иерархию фиксированного / именованного уровня - следовательно, если глубина действительно произвольно (это редко бывает), вам лучше выбрать разумное значение и реализовать на его основе. Например, в ваших данных можно предположить, что сами уровни известны / определены, но могут быть необязательными - Компания / Подкомиссия / Отдел / Подотдел и т. Д. компаниям, вам было бы намного проще, если бы вы всегда знали, что эти данные существуют на определенном уровне (например, 3) вашего дерева ...

M

...