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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.09.2015, 16:52   #1  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Несколько источников для QueryBuildDataSource
Доброго времени суток!

Пытаюсь повторить SQL запрос в коде:

PHP код:
SELECT DimensionAttribute.nameDimensionConstraintNodeCriteria.* FROM DimensionConstraintNode

JOIN  DimensionHierarchyLevel ON DimensionConstraintNode
.DimensionHierarchyLevel DimensionHierarchyLevel.RecId 

JOIN DimensionConstraintNodeCriteria ON DimensionConstraintNode
.RecId DimensionConstraintNodeCriteria.DimensionConstraintNode  
AND((RangeFrom<N'104.211') OR (RangeFrom N'104.211'))  
AND ((
RangeTo>N'104.211') OR (RangeTo N'104.211')) 

JOIN  DimensionAttribute ON DimensionHierarchyLevel.DIMENSIONATTRIBUTE DimensionAttribute.RecId
order by DimensionConstraintNodeCriteria
.RangeFrom 
X++:
Query q;
    QueryRun queryRun;
    QueryBuildDataSource qbDCN;
    QueryBuildDataSource qbDHL;
    QueryBuildDataSource qbDCC;
    QueryBuildDataSource qbDA;
    
    DimensionAttribute da;
    

    q = new Query();

    qbDCN = q.addDataSource(tablenum(DimensionConstraintNode));
    qbDCN.relations(false);
    
    qbDHL = qbDCN.addDataSource(tablenum(DimensionHierarchyLevel));
    qbDHL.relations(false);
    qbDHL.addLink(fieldNum(DimensionConstraintNode,DimensionHierarchyLevel),fieldNum(DimensionHierarchyLevel,RecId));
    qbDHL.joinMode(JoinMode::InnerJoin);
    
    qbDCC = qbDCN.addDataSource(tablenum(DimensionConstraintNodeCriteria));
    qbDCC.relations(false);
    qbDCC.addLink(fieldNum(DimensionConstraintNode,RecId),fieldNum(DimensionConstraintNodeCriteria,DimensionConstraintNode));
    qbDCC.joinMode(JoinMode::InnerJoin);
    
    qbDA = qbDHL.addDataSource(tablenum(DimensionAttribute));
    qbDA.relations(false);
    qbDA.addLink(fieldNum(DimensionHierarchyLevel,DimensionAttribute),fieldnum(DimensionAttribute,RecId));
    qbDA.joinMode(JoinMode::InnerJoin);
Поскольку строка qbDHL = qbDCN встречается несколько раз, запрос карежится. Подскажите как добавлять несколько источников к одному QueryBuildDataSource
Старый 03.09.2015, 17:17   #2  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
397 / 478 (16) +++++++
Регистрация: 27.02.2006
Адрес: Дания
А так?
X++:
 qbDHL.joinMode(JoinMode::InnerJoin);
qbDHL.fetchMode(QueryFetchMode::One2One); // <--
Старый 03.09.2015, 17:24   #3  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
По дебаггеру после выполнения данного кода:

X++:
qbDHL = qbDCN.addDataSource(tablenum(DimensionHierarchyLevel));
    qbDHL.relations(false);
    qbDHL.addLink(fieldNum(DimensionConstraintNode,DimensionHierarchyLevel),fieldNum(DimensionHierarchyLevel,RecId));
    qbDHL.joinMode(JoinMode::InnerJoin);
в переменную q пишется запрос, затем после добавления этого кода:
X++:
qbDCC = qbDCN.addDataSource(tablenum(DimensionConstraintNodeCriteria));
    qbDCC.relations(false);
    qbDCC.addLink(fieldNum(DimensionConstraintNode,RecId),fieldNum(DimensionConstraintNodeCriteria,DimensionConstraintNode));
    qbDCC.joinMode(JoinMode::InnerJoin);
переменная очищается и запрос тупо не генерируется.

Цитата:
qbDHL.joinMode(JoinMode::InnerJoin);
qbDHL.fetchMode(QueryFetchMode::One2One); // <--
Ничего не меняет
Старый 03.09.2015, 17:30   #4  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 23.10.2012
Попробуйте джоинить не в параллель, а каскадом.
X++:
qbDCN = q.addDataSource(tablenum(DimensionConstraintNode));
...
qbDHL = qbDCN.addDataSource(tablenum(DimensionHierarchyLevel));
...
qbDCC = qbDHL.addDataSource(tablenum(DimensionConstraintNodeCriteria));
...
Старый 03.09.2015, 17:34   #5  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Пробовал. Тогда :
X++:
qbDCC.addLink(fieldNum(DimensionConstraintNode,RecId),fieldNum(DimensionConstraintNodeCriteria,DimensionConstraintNode));
В запросе выглядит как
DimensionHierarchyLevel.RecId = DimensionConstraintNodeCriteria.DimensionConstraintNode

а должно быть
DimensionConstraintNode.RecId = DimensionConstraintNodeCriteria.DimensionConstraintNode
Старый 03.09.2015, 17:56   #6  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Я и не меняю. Оно по умолчанию хватает как родителя последнего добавленного. И в итоге портит условие соединения в запросе
Старый 03.09.2015, 17:58   #7  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 23.10.2012
X++:
qbDCC.addLink(fieldNum(DimensionConstraintNode,RecId),fieldNum(DimensionConstraintNodeCriteria,DimensionConstraintNode), qbDCN.name());
Остальные по аналогии, если эта же проблема повторится.
Старый 03.09.2015, 17:59   #8  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Странно, но заработало так как вы говорили:

X++:
qbDHL = qbDCN.addDataSource(tablenum(DimensionHierarchyLevel));
    qbDHL.relations(false);
    qbDHL.addLink(fieldNum(DimensionConstraintNode,DimensionHierarchyLevel),fieldNum(DimensionHierarchyLevel,RecId));
    qbDHL.joinMode(JoinMode::InnerJoin);
    qbDHL.fetchMode(QueryFetchMode::One2One); 
    
    qbDCC = qbDCN.addDataSource(tablenum(DimensionConstraintNodeCriteria));
    qbDCC.relations(false);
    qbDCC.addLink(fieldNum(DimensionConstraintNode,RecId),fieldNum(DimensionConstraintNodeCriteria,DimensionConstraintNode));
    qbDCC.joinMode(JoinMode::InnerJoin);
    qbDCC.fetchMode(QueryFetchMode::One2One);
В SQL Server запрос возвращает 3 строки, а тут только одну. Как исправить?

Последний раз редактировалось syl; 03.09.2015 в 18:17.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
SQL в QueryBuildDataSource syl DAX: Программирование 6 02.09.2015 15:58
QueryBuildDataSource Emka DAX: Программирование 3 06.05.2015 11:51
Несколько отчетов в одном вьювере IKA DAX: Программирование 3 20.08.2013 16:17
QueryBuildDataSource - динамически if_maks DAX: Программирование 6 07.04.2006 13:39
Вопрос по QueryBuildDataSource, QueryBuildRange и QueryRun Paul_ST DAX: Программирование 9 11.02.2004 17:13
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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