AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 28.11.2007, 10:41   #1  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
while select ... group by dimension[i]
Подскажите, как реализовать такой код? Если вводить просто цифру - все нормально. Если вводишь переменную типа int - ошибка. Нужно сделать селект по сгруппированным значениям в каждом виде аналитик.
Через поиск нашла кучу тем про аналитики, но к моей проблеме ничего близкого (ИМХО)
__________________
MBS-Axapta 3.0 CIS SP3
Alt 28.11.2007, 11:25   #2  
NeveB ist offline
NeveB
Участник
 
60 / 16 (1) ++
Registriert seit: 14.11.2003
Ort: Mosсow
навскидку - использовать QueryRun
Alt 28.11.2007, 11:26   #3  
Silence ist offline
Silence
Участник
Benutzerbild von Silence
 
287 / 27 (1) +++
Registriert seit: 29.09.2004
Ort: г. Москва, Зеленоград
То же на вскидку
А может указывать не int а EDT?
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Alt 28.11.2007, 11:29   #4  
Weez ist offline
Weez
Участник
Axapta Retail User
 
250 / 89 (3) ++++
Registriert seit: 18.01.2006
Ort: Moscow city
Например писать dimension(SysDimension::...)
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Alt 28.11.2007, 11:34   #5  
Dron AKA andy ist offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Registriert seit: 27.03.2002
Ort: Москва
С QueryRun точно работает. Вот джоб:
X++:
static void Job10(Args _args)
{
    InventTable     inventTable;
    Query           query = new Query();
    QueryRun        queryRun;
    QueryBuildDataSource    qbds;
    int                     i = 2;
    ;
    qbds = query.addDataSource(tableNum(InventTable));
    qbds.orderMode(OrderMode::GroupBy);
    qbds.addSortField(fieldId2ext(fieldNum(InventTable, Dimension), i));
    qbds.addSelectionField(fieldNum(InventTable, RecId), SelectionField::Count);
    queryRun = new QueryRun(query);
    while (queryRun.next())
    {
        inventTable = queryRun.getNo(1);
        info(strFmt("%1  %2", inventTable.Dimension[i], inventTable.RecId));
    }
}
__________________
Андрей.
This post has been rated by: Gustav (10), Tiruvileijadal' (1).
Alt 28.11.2007, 11:38   #6  
Alex_KD ist offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Registriert seit: 06.07.2006
Ort: Melbourne, Down Under
Zitat:
Zitat von Weez Beitrag anzeigen
Например писать dimension(SysDimension::...)
Так тоже не работает. Надо использовать QueryRun + fieldId2ext как описал Dron AKA andy.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Alt 28.11.2007, 12:07   #7  
Weez ist offline
Weez
Участник
Axapta Retail User
 
250 / 89 (3) ++++
Registriert seit: 18.01.2006
Ort: Moscow city
Да, прошу прощения, написал не проверив..
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Alt 28.11.2007, 15:49   #8  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
Объясните почему всегда i = 2?
__________________
MBS-Axapta 3.0 CIS SP3
Alt 28.11.2007, 16:17   #9  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
Dron AKA andy, спасибо, работает
__________________
MBS-Axapta 3.0 CIS SP3
Alt 28.11.2007, 16:35   #10  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
Tiruvileijadal'

Ну и выдумала имя себе

Итак, вы делаете распространенную ошибку, предполагая, что while select - это обычный себе цикл, в котором вы что-то можете менять.
Это не так!
while select - это ОДИН запрос, который возвращает набор записей. Но запрос выполняется лишь единажды (отсылается на сервер). Видимо в первый раз значение вашей переменной == 2. Но потом, пытаясь изменять ее в цикле, вы не получите "ожидаемого" результата. Потому как запрос уже исполнился.

Я правильно выразил вашу ошибку?
Alt 30.11.2007, 20:22   #11  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
Нет, Иван Но это не от того, что вы неверно что-то объяснили, это от того, что я так неопределенно написала Я спрашивала про i, который пишут в примерах-кодах на тему Dimension умные люди этого форума. Эта переменная всегда изначально = 2. Простите, это был риторический вопрос
У меня i меняется в цикле for в другом методе, и в этом цикле уже вызывается метод с обработкой запроса. И все здорово работает, кроме одной вещи: я не могу вытащить Description ;(
select description from dim where dim.num == mytable.dimension[i]
&& dim.DimensionCode == i;
Не работает Не подскажите, почему? Сразу скажу - код написала по-памяти, поэтому если перепутала поля - это память подводит.
__________________
MBS-Axapta 3.0 CIS SP3
Alt 30.11.2007, 23:36   #12  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
часть выделена сюда Имя Tiruvileijadal'
__________________
полезное на axForum, github, vk, coub.
Alt 03.12.2007, 09:56   #13  
Peter Savintsev ist offline
Peter Savintsev
Участник
 
246 / 124 (5) +++++
Registriert seit: 14.12.2001
Zitat:
Zitat von Tiruvileijadal' Beitrag anzeigen
Нет, Иван Но это не от того, что вы неверно что-то объяснили, это от того, что я так неопределенно написала Я спрашивала про i, который пишут в примерах-кодах на тему Dimension умные люди этого форума. Эта переменная всегда изначально = 2. Простите, это был риторический вопрос
У меня i меняется в цикле for в другом методе, и в этом цикле уже вызывается метод с обработкой запроса. И все здорово работает, кроме одной вещи: я не могу вытащить Description ;(
select description from dim where dim.num == mytable.dimension[i]
&& dim.DimensionCode == i;
Не работает Не подскажите, почему? Сразу скажу - код написала по-памяти, поэтому если перепутала поля - это память подводит.
Дело в том, что первый элемент в массиве Dimension имеет значение 1, а первый элемент енума SysDimension (на котором основано поле Dimensions.DimensionCode) - 0. Поэтому ваш код должен выглядеть так:

X++:
select description from dim where dim.num == mytable.dimension[i]
                                             && dim.DimensionCode == i - 1;
This post has been rated by: Tiruvileijadal' (1).
Alt 03.12.2007, 11:41   #14  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
Ура!!! Заработало!!! Знаете, Peter Savintsev, я и сама до этого дошла (но Вам спасибо за образный тычок в лоб), но у нас к таблице Dimensions был написан другими программистами метод как раз для поиска описания. И вот, когда я в этот метод вставляла эти данные - ну нифига!!! А вот сделала простым селектом (это как раз тычок в лоб) - ВСЕ ЗДОРОВО!!! Туплю...
__________________
MBS-Axapta 3.0 CIS SP3
Alt 04.12.2007, 12:08   #15  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
А сейчас такая проблема (может кто сталкивался):
нужно сделать выборку типа
MyTable t1, t2, t3, t4, ..., t14;

while select t1 group by dim[x]
{
while select t2 group by dim[y] where t2.dim[x] == t1.dim[x]
{
while select t3 group by dim[z] where t3.dim[x] == t1.dim[x] && t3.dim[y] == t2.dim[y]
{
...
}
}
}
сколько таких циклов заранее не известно (это зависит от того, возле скольких аналитик пользователь поставит галочки). У меня такое ощущение, что это невыполнимо. Пока никаких вариантов не вижу.
__________________
MBS-Axapta 3.0 CIS SP3

Geändert von Tiruvileijadal' (04.12.2007 um 12:09 Uhr) Grund: орфография
Alt 04.12.2007, 12:24   #16  
Silence ist offline
Silence
Участник
Benutzerbild von Silence
 
287 / 27 (1) +++
Registriert seit: 29.09.2004
Ort: г. Москва, Зеленоград
Zitat:
Zitat von Tiruvileijadal' Beitrag anzeigen
А сейчас такая проблема (может кто сталкивался):
нужно сделать выборку типа
MyTable t1, t2, t3, t4, ..., t14;

while select t1 group by dim[x]
{
while select t2 group by dim[y] where t2.dim[x] == t1.dim[x]
{
while select t3 group by dim[z] where t3.dim[x] == t1.dim[x] && t3.dim[y] == t2.dim[y]
{
...
}
}
}
сколько таких циклов заранее не известно (это зависит от того, возле скольких аналитик пользователь поставит галочки). У меня такое ощущение, что это невыполнимо. Пока никаких вариантов не вижу.
"QueryBuildDataSource"
И в условия их. Выполняется условие генериться QueryBuildDataSource.
Ренжи так же.

ЗЫ.Только код получится страшный
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Alt 04.12.2007, 12:51   #17  
Peter Savintsev ist offline
Peter Savintsev
Участник
 
246 / 124 (5) +++++
Registriert seit: 14.12.2001
Используйте рекурсивный метод, который будет строить запрос с помощью Query и выполнять его с помощью QueryRun. Тогда код будет не очень страшным.
Alt 04.12.2007, 13:16   #18  
Silence ist offline
Silence
Участник
Benutzerbild von Silence
 
287 / 27 (1) +++
Registriert seit: 29.09.2004
Ort: г. Москва, Зеленоград
Zitat:
Zitat von Peter Savintsev Beitrag anzeigen
Используйте рекурсивный метод, который будет строить запрос с помощью Query и выполнять его с помощью QueryRun. Тогда код будет не очень страшным.
+1
Нда, поспешил. Не подумал
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Alt 04.12.2007, 13:27   #19  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
Я, конечно же, попрошу мёд да ещё и ложкой... А примерно как это может выглядеть не подскажете? Вообще ничего в голову не приходит
__________________
MBS-Axapta 3.0 CIS SP3
Alt 04.12.2007, 13:47   #20  
Silence ist offline
Silence
Участник
Benutzerbild von Silence
 
287 / 27 (1) +++
Registriert seit: 29.09.2004
Ort: г. Москва, Зеленоград
Возможно, как то так:
X++:
void method(QueryBuildDataSource _qbds, common _table, QueryBuildRange _qbr)
{
    ;
    _qbds.addDataSource(_table);
    ...
    ...
    ...

    if (bla-bla-bla)
    {
        ...
        ...
        this.method(_qbds, Table, Range);
    }
}
Сильно не пинать, писал в блокноте

Там наверняка будет косяк с "_table", "TableNum" наверное не пройдет, но смысл таков


ЗЫ. Полезно!
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)

Geändert von Silence (04.12.2007 um 13:50 Uhr)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
Фильтр по пустому Dimension[x] в select Yprit DAX: Программирование 3 05.03.2008 15:11
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43
select group by listener DAX: Программирование 10 18.11.2003 12:19
group , но не by slava DAX: Программирование 9 21.05.2003 19:05

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 02:34 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.