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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.10.2013, 22:18   #1  
twilight is offline
twilight
MCTS
MCBMSS
 
890 / 241 (10) ++++++
Регистрация: 17.10.2004
Адрес: Королёв
Например, вот анализируется поле EnumItemValue из датасорса MSKOLAP_FactTypeView представления MSKOLAP_FactSalesView и выбирается соответвующее ему значение из Map amountMap
X++:
public static server str getAmountFactType1()
{
    #macrolib.MSKOLAP

    Map                     amountMap = new Map(Types::String, Types::String);

    amountMap.insert(#cLiteral(MSKOlapFactType::Qty), #cField(MSKOLAP_FactSalesAllDiscView, CustInvoiceTrans, Qty));
    amountMap.insert(#cLiteral(MSKOlapFactType::Retail), MSKOLAP_FactSalesAllDiscView::amount());
    amountMap.insert(#cLiteral(MSKOlapFactType::Sale), MSKOLAP_FactSalesAllDiscView::amountSales());
    amountMap.insert(#cLiteral(MSKOlapFactType::Purch), MSKOLAP_FactSalesAllDiscView::amountPurch());

    return #cSwitch(#cComparisonField(MSKOLAP_FactSalesView, MSKOLAP_FactTypeView, EnumItemValue),
        amountMap,
        #cLiteral(0));
}
я использую свою небольшую макробиблиотеку, чтобы выражения не были слишком громоздкими
X++:
    #localmacro.cField
    SysComputedColumn::returnField(tableStr(%1), identifierStr(%2), fieldStr(%2, %3))
    #endmacro

    #localmacro.cFieldL
    SysComputedColumn::returnField(tableStr(%1), identifierStr(%2), fieldStr(%3, %4))
    #endmacro

    #localmacro.cAdd
    SysComputedColumn::add(%1, %2)
    #endmacro

    #localmacro.cMultiply
    SysComputedColumn::multiply(%1, %2)
    #endmacro

    #localmacro.cSubtract
    SysComputedColumn::subtract(%1, %2)
    #endmacro

    #localmacro.cLiteral
    SysComputedColumn::returnLiteral(%1)
    #endmacro

    #localmacro.cSwitch
    SysComputedColumn::switch(%1, %2, %3)
    #endmacro

    #localmacro.cComparisonField
    SysComputedColumn::comparisonField(tableStr(%1), identifierStr(%2), fieldStr(%2, %3))
    #endmacro

    #localmacro.cComparisonFieldL
    SysComputedColumn::comparisonField(tableStr(%1), identifierStr(%2), fieldStr(%3, %4))
    #endmacro

    #localmacro.cIf
    SysComputedColumn::if(%1, %2, %3)
    #endmacro

    #localmacro.cEqual
    SysComputedColumn::equalExpression(%1, %2)
    #endmacro

    #localmacro.cCast
    SysComputedColumn::cast(%1, %2)
    #endmacro

    #localmacro.isNullExpr
    SysComputedColumn::isNullExpression(%1)
    #endmacro
__________________
I could tell you, but then I would have to bill you.
Старый 14.10.2013, 23:47   #2  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Благодарю!

А как в методе SysComputedColumn::returnField() правильно указать индекс поля массива в третьем параметре?

Upd: Можно прописать просто строкой. Но может есть какие-то стандартные методы?

Последний раз редактировалось Cardagant; 15.10.2013 в 00:05.
Старый 15.10.2013, 15:33   #3  
twilight is offline
twilight
MCTS
MCBMSS
 
890 / 241 (10) ++++++
Регистрация: 17.10.2004
Адрес: Королёв
Цитата:
Сообщение от Cardagant Посмотреть сообщение
Благодарю!

А как в методе SysComputedColumn::returnField() правильно указать индекс поля массива в третьем параметре?

Upd: Можно прописать просто строкой. Но может есть какие-то стандартные методы?
Точно не знаю, с полями-массивами в вычислимых полях ранее не сталкивался. А просто указать индекс в [] у названия поля не работает?
__________________
I could tell you, but then I would have to bill you.
Старый 15.10.2013, 23:23   #4  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от twilight Посмотреть сообщение
Точно не знаю, с полями-массивами в вычислимых полях ранее не сталкивался. А просто указать индекс в [] у названия поля не работает?
Работает, если указать подобным образом, к примеру для пятого индекса:
X++:
comparisonExpressionMap.insert(SysComputedColumn::returnLiteral(WeekDays::Monday),
        SysComputedColumn::returnField(viewName, identifierStr(myTable), fieldStr(myTable, Results) + "[5]"));
За это сообщение автора поблагодарили: twilight (1).
Старый 02.11.2013, 21:54   #5  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Мне очень интересно, а как всё-таки предпочтительнее решать подобные задачи: со стороны Аксапты или всё же со стороны BIDS?

И, если я произвёл доработку кода со стороны BIDS, не будут ли потеряны мои модификации после следующего обновления проекта этого же куба с помощью средств Аксапты?

Спасибо!

Последний раз редактировалось Cardagant; 02.11.2013 в 21:58.
Старый 25.12.2013, 11:35   #6  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Снова прошу помощи более опытных коллег!

Добавлял ли кто-то стандартным мастером в куб финансовые аналитики в Dynamics AX 2012?
Не совсем понимаю результат, которые получаю, просматривая структуру куба в BIDS. После добавления следующих аналитик (рис.1) имею следующую ситуацию в BIDS (рис.2) Помимо измерений "OLAP* " я получаю ещё и некоторые измерения "Main account OLAP* ", которые ссылаются на те же измерения "OLAP* ". Не совсем понимаю в чём логика данного результата?

А также некоторые из измерений, если использовать Excel как UI отображаются без каких либо идентификаторов (рис.3).
В то время как, к примеру, Departments отображается красиво.

Очень прошу помочь разобраться или хотя натолкнуть на верные суждения! Буду рад любым ответам, так как информацию об этом нигде не могу найти. Благодарю!
Изображения
   
Старый 22.04.2014, 01:20   #7  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Доброго времени суток!
Может кто сталкивался с работой поддержки преобразования валют, предлагаемой стандартным мастером развёртывания кубов в 2012й версии и дальше.

Для развёртывания использую DAX 2012, ставлю галку добавить фрэймворк преобразования валют.
1. В книге "Inside MS Dynamics AX 2012" нашёл интересный абзац, а именно:
Цитата:
Provided that you define the field-level metadata tag ExchangeRateDateField, the wizard adds the currency conversion calculation to the generated project as a multidimensional expression (MDX) script. The wizard also adds the system dimension Analysis Currency (the Currency dimension is added regardless of whether you select currency conversion). The wizard also creates an intermediate measure group called Exchange Rates By Day in each cube.
Однако, как только я выключаю добавление фрэймворка преобразования валют, не добавляется (или удаляется) в (из) проект(а) измерение Currency, но по логике оно должно создаваться и оставаться вне зависимости от этой настройки. Как так? Ведь книга говорит иное. Может у меня одного такое и чего-то не хватает?

2. При добавлении измерения Analysis Currency получаю интересную наполненность этого измерения данными. А именно, Измерение не имеет членов, кроме [Local] и [Unknown] (ну и [All], естественно) (см. рисунок). Насколько я понимаю, здесь должны содержаться пересчёты валют (список доступных валютных курсов и валют к пересчёту). При этом использованные вьюхи имеют данные, если просматривать через Аксу. Чего может не хватать?

Буду благодарен за любые мысли.

Спасибо!
Изображения
 
Старый 15.10.2013, 00:35   #8  
Alex_K is offline
Alex_K
Участник
 
531 / 36 (3) +++
Регистрация: 07.02.2003
Ну тады и от себя добавлю 5 копеек
Небольшая наколенная модель с использованием оператора UNPIVOT:
X++:
--    
CREATE TABLE Perfomance (EmplID varchar(20), FromDate datetime, ToDate datetime, 
                         Result int, Result2_ int, Result3_ int, Result4_ int,Result5_ int,Result6_ int, Result7_ int);

GO
INSERT INTO Perfomance VALUES ('Иванов','2013-10-07','2013-10-07',1,2,3,4,5,6,7);
INSERT INTO Perfomance VALUES ('Иванов','2013-10-14','2013-10-20',4,5,6,7,8,9,10);
INSERT INTO Perfomance VALUES ('Петров','2013-10-07','2013-10-07',2,3,4,5,6,7,8);
INSERT INTO Perfomance VALUES ('Петров','2013-10-14','2013-10-20',9,8,6,7,8,9,10);

GO

--  Unpivot    
SELECT EmplID, (dateadd(DAY, CAST(DayIdx as int), FromDate) ) as TransDate, Results
FROM 
   (SELECT EmplID, FromDate, Result "0", Result2_ "1", Result3_ "2", Result4_ "3", Result5_ "4", Result6_ "5", Result7_ "6"
   FROM Perfomance) p
UNPIVOT
   (Results FOR DayIdx IN 
      ("0", "1", "2", "3", "4", "5", "6")
)AS unpvt;
GO
Создаем в DSV новый Named Query, вставляем в него SELECT и после некоторого негодования BIDS на нему "Unpivot statement not supported" получаем искомый результат.
Нажмите на изображение для увеличения
Название: screenshot.png
Просмотров: 400
Размер:	10.9 Кб
ID:	8454
За это сообщение автора поблагодарили: Cardagant (1).
Старый 15.10.2013, 23:17   #9  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
2Alex_K

Спасибо большое за Ваш интересный вариант! С удовольствием его попробую!
Теги
olap, ssas, кубы

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
daxdilip: Troubleshooting OLAP Errors in OLAP Storage Engine The attribute key cannot be found when processing: Table Blog bot DAX Blogs 0 14.04.2012 17:13
emeadaxsupport: Dynamics AX OLAP cubes shows data only till 2008 year Blog bot DAX Blogs 0 07.02.2011 16:11
Почему не могут зайти пользователи Excel 2003 на OLAP 2005? mazzy DAX: Администрирование 4 30.08.2007 10:35
Опять про 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, время: 11:43.