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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.10.2014, 16:42   #1  
Kashesh is offline
Kashesh
Участник
 
29 / 10 (1) +
Регистрация: 08.12.2004
Адрес: Саров
выборка истории на дату или как перевести select в query. ax4
Всем доброго времени суток.

Пытаюсь адаптировать select запрос на query, но никак не выходит.
Задача состоит, чтобы для каждого сотрудника выбрать одну запись из истории, удовлетворяющую условиям дат. (параметры сотрудник и дата), но при этом должен быть доступ ко всем полям таблиц.

В select это выглядит так:

X++:
while SELECT FORUPDATE * FROM EmplTable
        ORDER BY Name ASC
    WHERE EmplTable.EmplId == emplId
    JOIN * FROM table
        WHERE   0 == HRMVirtualNetworkTable.referenceType &&
                EmplTable.EmplId == HRMVirtualNetworkTable.reference
    JOIN * FROM HRMVirtualNetworkHistory1
        ORDER BY startDate DESC
    WHERE HRMVirtualNetworkTable.hrmVirtualNetworkId == HRMVirtualNetworkHistory1.hrmVirtualNetworkId
          && HRMVirtualNetworkHistory1.startDate <= onDate
    JOIN * FROM position
        WHERE HRMVirtualNetworkHistory1.hrmPositionId == position.hrmPositionId
              && 1 == position.active
    NOTEXISTS JOIN * FROM HRMVirtualNetworkHistory2
        WHERE HRMVirtualNetworkHistory1.startDate < HRMVirtualNetworkHistory2.startDate &&
              HRMVirtualNetworkHistory1.hrmVirtualNetworkId == HRMVirtualNetworkHistory2.hrmVirtualNetworkId &&
              HRMVirtualNetworkHistory2.startDate <= onDate
Пытаюсь сделать что-то похожее на query.
X++:
q = new query();

    qbdsEmpl = q.addDataSource(tableNum(EmplTable));
    if(emplId)
        qbdsEmpl.addRange( fieldnum(EmplTable, EmplId)).value(emplId);

    qbdsNetworkTable = qbdsEmpl.addDataSource(tableNum(HRMVirtualNetworkTable));
    qbdsNetworkTable.relations(true);
    qbdsNetworkTable.fetchMode(queryFetchMode::One2One);
    
    qbdsNetworkHistory = qbdsNetworkTable.addDataSource(tableNum(HRMVirtualNetworkHistory));
    qbdsNetworkHistory.relations(true);
    qbdsNetworkHistory.fetchMode(queryFetchMode::One2One);
    qbdsNetworkHistory.addSortField(fieldNum(HRMVirtualNetworkHistory, startDate), sortOrder::Descending);
    qbdsNetworkHistory.orderMode(orderMode::OrderBy);
    qbdsNetworkHistory.addRange(fieldNum(HRMVirtualNetworkHistory, startDate)).value(queryRange(dateNull(), onDate));
    
    qbdsPosition = qbdsNetworkHistory.addDataSource(tableNum(HRMPosition));
    qbdsPosition.relations(true);
    qbdsPosition.fetchMode(queryFetchMode::One2One);
    
    qbdsNetworkHistory2 = qbdsNetworkHistory.addDataSource(tableNum(HRMVirtualNetworkHistory));
    qbdsNetworkHistory2.addLink(fieldNum(HRMVirtualNetworkHistory, hrmVirtualNetworkId), fieldNum(HRMVirtualNetworkHistory, hrmVirtualNetworkId));
    qbdsNetworkHistory2.joinMode(joinMode::NoExistsJoin);
    qbdsNetworkHistory2.fetchMode(queryFetchMode::One2One);
    qbdsNetworkHistory2.addRange(fieldNum(HRMVirtualNetworkHistory, recId)).value(strfmt('(%1.%2 < %3.%2) && (%3.%2 <= %4)',
                                                                              qbdsNetworkHistory.name(), // %1
                                                                              fieldStr(HRMVirtualNetworkHistory, startDate), // %2
                                                                              qbdsNetworkHistory2.name(), // %3
                                                                              queryValue(onDate))); // %4));
И вроде как работает, но не работает последний NotExists JOIN с таблицей на саму себя) чтобы выбрать только одну запись а не все из истории.
И как я не пытаюсь это исправить, никак не выходит. (((
Еще пробовал делать через View с группировкой по сотруднику и дате. работает, но медленно из-за того, что приходилось делать 2 прохода, первый для выбора сотрудника и нужной даты, а второй, чтобы подцепить остальные таблицы.

Может где ошибка затаилась и глаз замылился? Заранее спасибо!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: Microsoft Dynamics AX general performance analysis scripts page 5 Blog bot DAX Blogs 0 01.09.2014 14:11
dynamicscare: Using Power BI to Analyze Your Dynamics AX Data Blog bot DAX Blogs 1 06.10.2013 18:11
dynamicsaxtraining: How to use select statements instead of query in data source Blog bot DAX Blogs 0 06.12.2010 23:11
Запрос на форме как Select или готовая выборка в форму? rohlenko DAX: Программирование 9 23.06.2005 13:38

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

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

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