AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.07.2006, 15:23   #1  
Viknik is offline
Viknik
Участник
 
23 / 13 (1) ++
Регистрация: 26.11.2005
Добрый день.
Да действительно имеется такой ограничение. Но оно срабататывает когда хотя бы одна мера в кубе типа "AmountCur" или руками поставлена галка "Использование таблицы суммы" в "Экземлярах куба" (когда мера типа AmountCur - эта галочка проставляется автоматически и убрать ее нельзя - используется для пересчета суммы в валюте).
Здесь 2 решения:
1. Увеличить кол-во элементов (Array Elements) в EDT OLAPAmountArray до нужного количества...
2. Прежде чем увеличивать кол-во элементов, я бы на вашем месте проверил сколько на самом деле мер типа "AmountCur", и если оно меньше 10 - то можно сделать как мы, небольшую доработку:
- в методе init класса OLAPCubeMetaData вместо
PHP код:
 ...
        while 
select OLAPMeas order by measName where OLAPMeas.cubeName ==  OLAPCube.cubeName
    
{
        if (
OLAPMeas.isValid())
        {
            
n++;
            
measures[n] = conInsmeasures[n],1,OLAPMeas.measName);
            
measures[n] = conInsmeasures[n],2,OLAPMeas.measAgregate);
            
measures[n] = conInsmeasures[n],3,this.viewName(OLAPMeas.table));
            
measures[n] = conInsmeasures[n],4,OLAPMeas.field);
            
measures[n] = conInsmeasures[n],5,'');
            
measures[n] = conInsmeasures[n],6,OLAPCube.transDate);
            
measures[n] = conInsmeasures[n],7,this.currency());
            
measures[n] = conInsmeasures[n],8,OLAPMeas.amountCur);
            
measures[n] = conInsmeasures[n],9,OLAPMeas.amountMST);

            [
COLOR="DarkRed"]amountNumber++;[/COLOR]

            if (
OLAPMeas.amountCur || OLAPMeas.amountMST)
            {
  ... 
поставить
PHP код:
 ...
         while 
select OLAPMeas order by measName where OLAPMeas.cubeName ==  OLAPCube.cubeName
    
{
        if (
OLAPMeas.isValid())
        {
            
n++;
            
measures[n] = conInsmeasures[n],1,OLAPMeas.measName);
            
measures[n] = conInsmeasures[n],2,OLAPMeas.measAgregate);
            
measures[n] = conInsmeasures[n],3,this.viewName(OLAPMeas.table));
            
measures[n] = conInsmeasures[n],4,OLAPMeas.field);
            
measures[n] = conInsmeasures[n],5,'');
            
measures[n] = conInsmeasures[n],6,OLAPCube.transDate);
            
measures[n] = conInsmeasures[n],7,this.currency());
            
measures[n] = conInsmeasures[n],8,OLAPMeas.amountCur);
            
measures[n] = conInsmeasures[n],9,OLAPMeas.amountMST);

            if (
OLAPMeas.amountCur || OLAPMeas.amountMST)
            {
            [
COLOR="DarkRed"]amountNumber++;[/COLOR]
  ... 
- в методе createAmounts класса OLAPCreateAmount
вместо
PHP код:
...
             
// find the currency
        
rowCurrencyCode factTableRecord.(idxCurField);
        
// find the date
        
transDAte factTableRecord.(cubeTable.TransDateFieldId);
        
// loop over all measures
        
0;
        while 
select measTmp
        where measTmp
.cubename == cubeTable.CubeName
        
{
            [
COLOR="Red"]i++;[/COLOR]
            
// get amount
            
amount factTableRecord.(measTmp.measFieldId);

            
// if amount field
            
if ((measTmp.AmountCur == noyes::Yes) || (measTmp.AmountMST == noyes::Yes))
            {

                if (
measTmp.AmountMST == Noyes::Yes)
                {
                    
measCurrencyCode companyCurrencyCode;
                    
// translate if needed
                    
if (this.isSpecialMSTAmount(measTmp.measTableId,measTmp.measFieldId))
                    {
                        
amount this.specialMSTAmount(factTableRecordmeasTmp.measFieldId,dictTable);
                    }
                }
                if (
measTmp.AmountCur == noyes::Yes)
                {
                    
measCurrencyCode rowCurrencyCode ;
                }
                if (
measCurrencyCode != cubeInstance.currency)
                {
                    if (
cubeInstance.currency == companyCurrencyCode)
                    {
                        
amount Currency::mstAmount(amount,measCurrencyCode,transDate);
                    }
                    else
                    {
                        
amount Currency::curAmount2CurAmount(amount,measCurrencyCode,cubeinstance.currency,transDate);
                    }
                }
                }
         
olapAmount.OLAPAmount[i] = amount;
         
// end loop measures  
... 
поставить
PHP код:
 ...
        
// find the currency
        
rowCurrencyCode factTableRecord.(idxCurField);
        
// find the date
        
transDAte factTableRecord.(cubeTable.TransDateFieldId);
        
// loop over all measures
        
0;
        while 
select measTmp
        where measTmp
.cubename == cubeTable.CubeName
        
{
            
// get amount
            
amount factTableRecord.(measTmp.measFieldId);

            
// if amount field
            
if ((measTmp.AmountCur == noyes::Yes) || (measTmp.AmountMST == noyes::Yes))
            {

                if (
measTmp.AmountMST == Noyes::Yes)
                {
                    
measCurrencyCode companyCurrencyCode;
                    
// translate if needed
                    
if (this.isSpecialMSTAmount(measTmp.measTableId,measTmp.measFieldId))
                    {
                        
amount this.specialMSTAmount(factTableRecordmeasTmp.measFieldId,dictTable);
                    }
                }
                if (
measTmp.AmountCur == noyes::Yes)
                {
                    
measCurrencyCode rowCurrencyCode ;
                }
                if (
measCurrencyCode != cubeInstance.currency)
                {
                    if (
cubeInstance.currency == companyCurrencyCode)
                    {
                        
amount Currency::mstAmount(amount,measCurrencyCode,transDate);
                    }
                    else
                    {
                        
amount Currency::curAmount2CurAmount(amount,measCurrencyCode,cubeinstance.currency,transDate);
                    }
                }
                }
        [
COLOR="red"]if( cubeInstance.UseAmountTable )
                    if( (
measTmp.AmountCur == noyes::Yes) ||
                        (
measTmp.AmountMST == noyes::Yes) )
                    {    
                        
i++ ;
                        
olapAmount.OLAPAmount[i] = amount;
                    } [/
COLOR]
         
// end loop measures  
... 
Теги
ax3.0, olap, ошибка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX UK: Repairing the AX 2009 OLAP Cubes where License/Config keys are switched off Blog bot DAX Blogs 0 03.12.2008 19:05
Почему не могут зайти пользователи Excel 2003 на OLAP 2005? mazzy DAX: Администрирование 4 30.08.2007 10:35
ALEG: Olap. Что нам стоит куб настроить Blog bot DAX Blogs 4 05.12.2006 17:16
Опять про OLAP и Enum mit DAX: Программирование 6 05.04.2004 11:06
Проблема с подключением к OLAP серверу Andrew Besedin DAX: Администрирование 0 20.03.2002 12:06

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:38.