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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.09.2003, 14:42   #1  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
UNION
В Оракле был (нехорошо как-то в прошедшем времени, он вроде не умер ещё) такой оператор - UNION. Хотелось бы узнать есть ли в Аксапте какие-нибудь аналоги ему. Может можно два(или больше) набора данных затащить в один query? Как быть если понадобится два набора данных (с одинаковым набором полей конечно) отобразить в одном лукапе?
__________________
Дмитрий
Старый 29.09.2003, 15:32   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
join

См. документацию по этому ключевому слову.
А также форму tutorial_Form_Join
Старый 29.09.2003, 15:45   #3  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
По-моему, это все-таки вопрос про Map.

Если я прав, то читайте дальше.

Есть в Аксапте такой объект - Map. Живут они в Data Dictionary. С помощью Map'ов можно сделать так, что данные из нескольких таблиц, будут представлены в одной (вернее выглядеть это будет так). Для всех остальных объектов Axapta Map'ы выглядят, как обычные таблицы.

Резюме.
Все зависит от того, как вы хотите объединить свои данные. Если хотите две таблицы рядом (одна слева, другая справа), тогда вам Join нужен. Если друг за другом (одна сначала, другая в конце), тогда Map.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 29.09.2003, 15:49   #4  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
А также форму tutorial_Form_Join
Возможно ты не работал с Ораклом .. или я неправильно сформулировал вопрос. Но UNION служит для соединения набора записей, возвращаемых двумя SQL-запросами. Также применяются UNION ALL, MINUS, INTERSECT (извиняюсь за случайное рекламирование неаксаптовских операторов). Соединяемые запросы никаким образом не связываются друг с другом. Просто записи, возвращаемые одним, добавляются к записям второго. Единственное требование - одинаковое кол-во столбцов и одинаковые типы этих столбцов.
__________________
Дмитрий
Старый 29.09.2003, 16:05   #5  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано Damn
Просто записи, возвращаемые одним, добавляются к записям второго. Единственное требование - одинаковое кол-во столбцов и одинаковые типы этих столбцов.
Итак, теперь мы переходим к Map'ам....
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 29.09.2003, 16:13   #6  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Поглядел я Map'ы. Интересные создания . Таблицы они соединяют. А запросы? Query то есть. И ведь эти запросы мне нужно соединить в лукапе. Программно. Да там ещё параметры будут.
__________________
Дмитрий
Старый 29.09.2003, 16:27   #7  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Будем мыслить логически.

1. Map объединит только Table'ы.
2. Query в результате дает DataSource в результате.
3. Из 1 и 2 следует, что Query Map'ом мы не получим.

А если пойти наоборот? Какая задача, если не секрет?

И, кстати, версия Axapta (в третьей еще, кажется, кое-какие пряники есть).
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 29.09.2003, 16:28   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Damn
Возможно ты не работал с Ораклом .. или я неправильно сформулировал вопрос. Но UNION служит для соединения набора записей, возвращаемых двумя SQL-запросами. Также применяются UNION ALL, MINUS, INTERSECT (извиняюсь за случайное рекламирование неаксаптовских операторов). Соединяемые запросы никаким образом не связываются друг с другом. Просто записи, возвращаемые одним, добавляются к записям второго. Единственное требование - одинаковое кол-во столбцов и одинаковые типы этих столбцов.
См. руководство разработчика. ключевая фраза "Sequencing of retrieved records"
Это оно? Или я не так понял? С Ораклом я действительно плотно не работал.

Про МАПы.
МАП лучше всего воспринимать как interface для классов.
В отличие от interface МАП умеет работать с переименованными полями, переменными. А в остальном - типичный интерфейс.

МАП ни в коем случае не является запросом и не имеет физической реализации.
Старый 29.09.2003, 16:51   #9  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано mazzy
См. руководство разработчика. ключевая фраза "Sequencing of retrieved records"
Факт. Этим тоже можно воспользоваться. Обратите внимание на пример "Multiple embedded data sources".
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 29.09.2003, 17:18   #10  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Ладно , закидали вы меня ответами
"Упорядочивание возвращаемых записей" я поглядел. На "Multiple embedded data sources" внимание обратил. Привожу иллюстрацию:
[IMG][/IMG]
не отображал никогда иллюстрации, может она и не отобразится сейчас.

Дочерние датасоурсы привязаны к главному DataSource A посредством ExistJoin. Так вот мне надо чтобы между DataSource B и DataSource C было логическое ИЛИ .. то есть либо та либо другая связь должна присутствовать (хотя бы одна).
Как между Link'ами делать ИЛИ я не знаю, поэтому и подумал насчёт UNION. Хотя это оказалось ещё сложнее.
Вложения
Тип файла: img20884-1 (3.2 Кб, 512 просмотров)
__________________
Дмитрий
Старый 29.09.2003, 17:56   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Возможно я сильно туплю... Но не понимаю в чем проблема.

Сделайте запрос по:
LedgerJournalTrans
- LedgerTable
- CustTable
- VendTable

введите строчки со счетами различного типа и посмотрите на результаты запроса.
или воспользуйтесь программированием, как в печати журнала.

В форме, видимо, придется прграммировать.
См. форму HRMCompetanceSearch
главное меню \ Управление персоналом \ Периодические операции \ подбор персонала
Вложения
Тип файла: xpo mazdinalinktest.xpo (32.3 Кб, 218 просмотров)
Старый 30.09.2003, 09:21   #12  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Если я правильно понял, то Damn требуется получить результирующий набор азписей, выбранных из двух (или более таблиц). Map тут не поможет. Единственное средство, которое приходит на ум - временные таблицы. Создаешь временную таблицу, определяешь ее поля, потом создаешь обработчик, который ее заполняет сначала записями из одной таблицы, потом из другой. В итоге временная таблица содержит то, что надо. По-моему, это единственный способ реализовать функциональность оператора UNION (кстати, в MS SQL Server он тоже имеется).
Старый 30.09.2003, 10:23   #13  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Так, хорошо.
ИЛИ между линками разобрались как делается. Путём добавления поля-флажка. Но приведу небольшой примерчик:
PHP код:
        qb query.addDataSource(
                 
tablenum(InventTable));
        
qb2 qb.addDataSource(
                 
tablenum(InventTable));
        
qb2.addRange(fieldnum(InventTableItemtype)).valuequeryvalueItemType::BOM));
        
qb2.relations(false);
        
qb2.addLink(fieldNum(InventTable,ItemId),fieldNum(InventTable,ItemId));
        
qb2.joinModeJoinMode::InnerJoin);
/*        qb2 = qb.addDataSource(
                 tablenum(InventTable));
        qb2.addRange(fieldnum(InventTable, Itemtype)).value( queryvalue( ItemType::Item));
        qb2.relations(false);
        qb2.addLink(fieldNum(InventTable,ItemId),fieldNum(InventTable,ItemId));
        qb2.joinMode( JoinMode::InnerJoin);*/ 
вот почему если к главному датасоурсу добавить только один со связью InnerJoin , то всё нормально - отобразятся только Спецификации(ItemType::BOM). А если убрать заремаривание и добавить второй, то отобразятся все записи. Как будто нельзя добавлять два дочерних датасоурса со связями InnerJoin. Или может в них ещё какие свойства надо заполнить.
Цитата:
Единственное средство, которое приходит на ум - временные таблицы.
Да, тоже вариант. Хотя воспринимается как дубовый, но порой без него никак.
__________________
Дмитрий
Старый 12.04.2004, 10:41   #14  
Al Pacino is offline
Al Pacino
Участник
 
20 / 10 (1) +
Регистрация: 09.04.2004
Цитата:
В форме, видимо, придется прграммировать.
См. форму HRMCompetanceSearch
главное меню \ Управление персоналом \ Периодические операции \ подбор персонала
Не нашел в форме никакого программирования. Речь о 3-ке?

Цитата:
вот почему если к главному датасоурсу добавить только один со связью InnerJoin , то всё нормально - отобразятся только Спецификации(ItemType::BOM). А если убрать заремаривание и добавить второй, то отобразятся все записи. Как будто нельзя добавлять два дочерних датасоурса со связями InnerJoin. Или может в них ещё какие свойства надо заполнить.
Никто не знает?
__________________
Являться частью базы знаний, дабы не изобретать велосипед
Делать больше, чем говорить
Старый 12.04.2004, 16:33   #15  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
А если проще?

PHP код:

   qb 
query.addDataSource(tablenum(InventTable));

   
qbr qb.addRange(fieldnum(InventTableItemtype)).
   
qbr.value(queryvalue(ItemType::BOM));
   
qbr.value(queryvalue(ItemType::Item)); 
Старый 13.04.2004, 11:28   #16  
Al Pacino is offline
Al Pacino
Участник
 
20 / 10 (1) +
Регистрация: 09.04.2004
Хорошо, а если надо сделать так:

К таблице InventTable подсоединяется таблица B, в которой должно быть по две записи на каждую в InventTable. Каким образом сделать так, чтобы при отсутствии записей в таблице B, в гриде отобразились бы по две InventTable с пустыми "заготовками", относящимися к B?
__________________
Являться частью базы знаний, дабы не изобретать велосипед
Делать больше, чем говорить
Старый 13.04.2004, 18:15   #17  
metal is offline
metal
Юзовские
Дети Юза
 
92 / 10 (1) +
Регистрация: 06.08.2002
Адрес: Украина
Цитата:
вот почему если к главному датасоурсу добавить только один со связью InnerJoin , то всё нормально - отобразятся только Спецификации(ItemType::BOM). А если убрать заремаривание и добавить второй, то отобразятся все записи. Как будто нельзя добавлять два дочерних датасоурса со связями InnerJoin. Или может в них ещё какие свойства надо заполнить.
Если я не ошибаюсь на дочерних датасоурсах нужно поменять свойство FetchMode на 1:1.

И еще, мне кажеться что вам, Damn, нужно почитать о расширенных возможностях query. (Developers Handbook поиск по Advanced query range value expressions)

Цитата:
К таблице InventTable подсоединяется таблица B, в которой должно быть по две записи на каждую в InventTable. Каким образом сделать так, чтобы при отсутствии записей в таблице B, в гриде отобразились бы по две InventTable с пустыми "заготовками", относящимися к B?
outer join не пробовали?
Старый 14.04.2004, 16:51   #18  
Al Pacino is offline
Al Pacino
Участник
 
20 / 10 (1) +
Регистрация: 09.04.2004
2 metal:
Читаете невнимательно:
Цитата:
К таблице InventTable подсоединяется таблица B, в которой должно быть по две записи на каждую в InventTable. Каким образом сделать так, чтобы при отсутствии записей в таблице B, в гриде отобразились бы по две InventTable с пустыми "заготовками", относящимися к B?
То, что это OUTER JOIN понятно, но он сделает одну "пустую" запись в B.
__________________
Являться частью базы знаний, дабы не изобретать велосипед
Делать больше, чем говорить
Старый 14.04.2004, 18:42   #19  
metal is offline
metal
Юзовские
Дети Юза
 
92 / 10 (1) +
Регистрация: 06.08.2002
Адрес: Украина
Цитата:
Читаете невнимательно:
Извините, поспешил.
В одном гриде это можно сделать, используя временную таблицу.
А если не в гриде, то использовать два датасоурса на одной таблице. Как в номенклатурнике на закладке Цена\Скидка.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вспомогательный класс для импорта из Excel через ADO gl00mie DAX: База знаний и проекты 80 10.04.2017 10:55
Выделить несколько диапазонов одновременно (в Excel) MironovI DAX: Программирование 31 23.12.2016 15:12
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:05.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.