Показать сообщение отдельно
Старый 21.01.2007, 13:23   #11  
DmitrySt_imported is offline
DmitrySt_imported
Участник
 
4 / 10 (1) +
Регистрация: 25.11.2004
Вставлю свои 5 копеек насчет того, почему в качестве мер нельзя использовать поля из связанных таблиц: мне кажется, ответ заключается в том, как Аксапта обрабатывает конверсию из валюты в базовую валюту для отображения в кубе.

Аксапта пересчитывает все значения AmountCur в AmountMst в том самом классе OLAPCreateAmount, и сохраняет их в огромной таблице OLAPAmount - по одной записи в OLAPAmount для каждой записи из таблицы фактов, и затем подсовывает ОЛАПу не значения из таблицы фактов, а что-то вроде MyFact INNER JOIN OLAPAmount ON MyFact.RecId = OLAPAmount.RelRecId (достаточно посмотреть на SQL сервере любую из автоматически созданных таким образом View типа OLAP<company><cubeId>_)

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

Кстати, если создать Query для куба не на основе таблицы, а на основе View, и если в этом View будут использованы агрегированные поля и, т.о., View будет построено с использованием GROUP BY, то поле RecId в нем будет создано кернелом как RECID AS (1010), т.е. конверсия Amounts в кубе построенном таким образом работать не будет (из-за того, что выборка фактов для OLAP будет реализована как MyFact INNER JOIN OLAPAmount ON MyFact.RecId (т.е. 1010 для любой записи из View) = OLAPAmount.RelRecId).

Это в некоторой мере лечится только доработкой классов OLAPCreaetAmount & OLAPCreateSchema так, чтобы в них, при распознавании таблицы фактов как View, они бы брали не поле Recid, а некое иное поле (у меня -recId_View), которое я должен буду создавать в моем View уникальным (например, как Max(RecId) из записей подвергнутых группировке).