Вставлю свои 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) из записей подвергнутых группировке).
|