14.12.2006, 14:39 | #1 |
Участник
|
Добрый день. Пытаюсь построить куб по вот этой статье:
http://axapta.mazzy.ru/lib/olap/ При попытке запустить обработку экземпляра куба вываливается ошибка: "Ошибка времени выполнения. : Поле с идентификатором (FieldID) '0' в таблице 'CustInvoiceJour' не обнаружено. Не получилось выполнить запрос Доходы по клиентам>tst" ошибка происходит в методе createAmounts класса OLAPCreateAmount в строке: Код: // find the date transDAte = factTableRecord.(cubeTable.TransDateFieldId); З.Ы. Axapta 3.0. SP3, SQL Server 2000 + Analysis Service SP4, все на одном компе, двухуровневая конфигурация. |
|
14.12.2006, 14:59 | #2 |
Участник
|
Цитата:
2. Как создан куб? Вы его импортировали из db-каталога или создали руками? Если из db-каталога, то в нем использовались поля, которые позже были удалены. Если отключен конфигурационный ключ SysDeletedObject30, то удаленные поля действительно отсутствуют на SQL-сервере. В общем, проверьте определение куба. |
|
14.12.2006, 15:43 | #4 |
Участник
|
Цитата:
Mazzy - пользуясь случаем Вам спасибо за статьи, очень помогают в изучении Аксапты! |
|
14.12.2006, 15:47 | #5 |
Участник
|
Цитата:
Пользуясь случаем также хочу сказать: Спасибо, Вадим. |
|
14.12.2006, 17:04 | #6 |
Модератор
|
а я что.. пользуйтесь на здоровье
__________________
-ТСЯ или -ТЬСЯ ? |
|
14.12.2006, 18:05 | #7 |
Участник
|
|
|
15.12.2006, 16:49 | #8 |
Участник
|
А может еще подскажете...
Создал куб. Работает Но захотелось мне добавить в него еще мер. У куба в поле запрос стоит созданный мной query у которого есть датасорс CustInvoiceJour у которого в свою очередь подчиненный датасорс CustInvoiceTrans. Relation по InvoiceId. Пытаюсь добавить новую меру, но в выпадающем списке полей из CustInvoiceTrans нет... Только из CustInvoiceJour. Это нормально или я что-то не то сделал? Вообще реально мне добавить меры из подчиненных таблиц? И еще вопрос: можно ли добавлять в качестве мер методы, а не поля как DataMethod у Grid? |
|
15.12.2006, 17:41 | #9 |
Модератор
|
нет, таблица фактов одна
Цитата:
можно ли добавлять в качестве мер методы, а не поля как DataMethod у Grid?
\Classes\OLAPCreateAmount\isSpecialCalcField() \Classes\OLAPCreateAmount\fieldMethodName()
__________________
-ТСЯ или -ТЬСЯ ? |
|
21.12.2006, 11:09 | #10 |
Участник
|
Цитата:
можно - см.
\Classes\OLAPCreateAmount\isSpecialCalcField() \Classes\OLAPCreateAmount\fieldMethodName() |
|
21.01.2007, 13:23 | #11 |
Участник
|
Вставлю свои 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) из записей подвергнутых группировке). |
|