Здравствуйте.
Застыл на решении задачки по построению Parent-Child иерархии на дату.
Есть
1. таблица сотрудников которая содержит время жизни сотрудника и его руководителя на должностях:
EMP_POS (EMP_ID, EMP_PARENT_ID, EMP_POS_ID, EMP_PARENT_POS_ID, EMP_START_DATE, EMP_END_DATE, EMP_PARENT_START_DATE, EMP_PARENT_END_DATE)
Если сгруппировать по смыслу то получается:
EMP_ID, EMP_START_DATE, EMP_END_DATE (ID сотрудника, дата приема на должность, дата ухода с должности - EMP_POS_ID)
и
EMP_PARENT_ID, EMP_PARENT_START_DATE, EMP_PARENT_END_DATE(ID руководителя, дата приема на должность, дата ухода с должности - EMP_PARENT_POS_ID)
2. Построенная на основе таблицы п.1 иерархическая таблица
EMP_MAP (MEMBER_KEY, ANCESTOR_KEY, Distance, IS_LEAF,
EMP_START_DATE, EMP_END_DATE, EMP_PARENT_START_DATE, EMP_PARENT_END_DATE)
Таблица стандартная, только добавлены поля с временем жизни позиций сотрудника и руководителя. Таблицы 1 и 2 связаны по EMP_POS.EMP_ID= EMP_MAP.ANCESTOR_KEY
3. Таблица фактов
F_T ( EMP_ID, FIRST_DAY_OF_MONTH, SALES )
, где EMP_ID - ID сотрудника, FIRST_DAY_OF_MONTH -1й день месяца продаж (данные уже агрегированы по месяцам, столбец для удобства фильтрации), SALES -объем продаж.
Таблица связана п.2 по EMP_MAP.MEMBER_KEY=F_T.EMP_ID
По всему этому великолепию вполне можно построить Parent-Child иерархию. Получается развесистое такое дерево (т.к. сотрудники могут менять должности, руководители тоже).
Думал, что при создании связи EMP_MAP с F_T можно будет задать условие
Where EMP_MAP.MEMBER_KEY=F_T.EMP_ID
and F_T.FIRST_DAY_OF_MONTH between EMP_MAP.EMP_START_DATE and EMP_MAP.EMP_END_DATE
and F_T.FIRST_DAY_OF_MONTH between EMP_MAP.EMP_PARENT_START_DATE and EMP_MAP.EMP_PARENT_END_DATE
Идея была вот в чем: при таком условии получилась бы иерархия на дату продаж. Т.е. задаем месяц продаж в анализе, по нему фильтруется таблица фактов, а связанная с ней таблица иерархии сотрудников "собирается" на нужную дату на лету.
Однако в BI при физ. соединении таблиц нельзя задавать BETWEEN или формировать его с помощью <=, >= операций. Возможно только использование "=".
Как это обойти - не соображу: добавлять условие фильтрации на логическом уровне можно, но там нет таблицы фактов на которую идет привязка фильтром.
Как можно создавать динамически формирующуюся иерархию? Чтобы при изменении параметра "Месяц продаж" формировалась именно иерархия сотрудников на нужный месяц. Ну и таблица фактов подтянется обычным путем...
Извините, что сумбурно, но должен же кто-то использовать временные интервалы при построении Parent-Child иерархий...