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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.11.2006, 11:19   #1  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Диапазон условий
Здравствуйте всем.
Подскажите, если кто знает.
Имеюстя 2 строки условий, например "A1..A5, A7" и "A3..A8, A11", каким образом эти две строки превратить в фильтр по одному полю?
Цель - получить пересечение (исправил, было "объединение") значений.

Последний раз редактировалось Roman777; 15.11.2006 в 11:35.
Старый 15.11.2006, 11:32   #2  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
X++:
static void Job68(Args _args)
{
    Table t;
    Query q = new query();
    QueryRun qr;
    str s = 'A1..A5, A7';
    str s1 = 'A3..A8, A11';
;
    q.addDataSource(tableNum(Table)).addRange(fieldNum(Table, Field)).value(s+','+s1);
    qr = new QueryRun(q);
    while (qr.next())
    {
        t = qr.getNo(1);
        info(strfmt('%1', t.Field));
    }
}
Только зачем?
Старый 15.11.2006, 11:33   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
А если просто сцепить через запятую: "A1..A5, A7" + ", " + "A3..A8, A11" ?
А если просто сделать 2 Range по одному полю? По одному полю они же как OR идут?
Старый 15.11.2006, 11:34   #4  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Извиняюсь, не о том написал - нужно именно пересечение.
Старый 15.11.2006, 11:40   #5  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
join таблицы сама с собой
на первую первый фильтр, на вторую - второй
Старый 15.11.2006, 11:42   #6  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Цитата:
Сообщение от Wamr Посмотреть сообщение
join таблицы сама с собой
на первую первый фильтр, на вторую - второй
Думал над этим - не совсем понятно, как быть, если это поле Dimension...,
а такие условия нужно повесить на несколько полей аналитики
Старый 15.11.2006, 11:49   #7  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Гы! Если бы это были ячейки Excel (а нотация напоминает, согласитесь), то можно было бы вот так забавно воспользоваться "совершенно другой оперой":

? Application.Intersect( Range("A1:A5, A7"), Range("A3:A8, A11")).Address

$A$3:$A$5,$A$7

Ответ такой должен быть? A3..A5, A7 ?
Старый 15.11.2006, 11:51   #8  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Цитата:
Сообщение от Gustav Посмотреть сообщение
Гы! Если бы это были ячейки Excel (а нотация напоминает, согласитесь), то можно было бы вот так забавно воспользоваться "совершенно другой оперой":

? Application.Intersect( Range("A1:A5, A7"), Range("A3:A8, A11")).Address

$A$3:$A$5,$A$7

Ответ такой должен быть? A3..A5, A7 ?
Если так, то да. Но тут 2 диапазона значений аналитики.
Старый 15.11.2006, 12:08   #9  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Написать парсер строк, который, например, из
X++:
    str s = '1..7,9';
    str s1 = '7..9,12';
делает
X++:
resStr = '(((Field1 >= 1) && (Field1 <=7)) || (Field1=9)) && ((((Field1 >= 7) && (Field1 <=9)) || (Field1=12)))';
За это сообщение автора поблагодарили: Roman777 (2).
Старый 15.11.2006, 12:10   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Хм. А вы знаете, какой фильтр должен получиться в результате пересечения?

Не знаю, или это подойдет, но есть метод mergeRanges() у класса SysQuery
Может как раз то, что Вам нужно?
За это сообщение автора поблагодарили: oip (1).
Старый 15.11.2006, 12:14   #11  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
А двойное отрицание не прокатывает? Что-то типа:

str s1 = 'A1..A5, A7';
str s2 = 'A3..A8, A11';

strfmt("! ( ! (%1), ! (%2) )", s1, s2);
__________________
Старый 15.11.2006, 12:18   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Ruff Посмотреть сообщение
А двойное отрицание не прокатывает? Что-то типа:

str s1 = 'A1..A5, A7';
str s2 = 'A3..A8, A11';

strfmt("! ( ! (%1), ! (%2) )", s1, s2);
По идее не сработает это, так как
!1,!2
дать должно результат not 1 and not 2, а не ожидаемый or
Старый 15.11.2006, 13:46   #13  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Наверное остается только делать парсер строк.
Старый 15.11.2006, 13:56   #14  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Ну он пишется минут за 15.
Старый 15.11.2006, 14:00   #15  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Roman777 Посмотреть сообщение
Наверное остается только делать парсер строк.
Да, похоже на то... Чего-то никакая дьявольщинка-сумасшедшинка в голову не идет...
А две точки и запятая - это максимум из того, что может быть в одном диапазоне или допускается полный букет всех спецсимволов для Range?
Старый 15.11.2006, 14:07   #16  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Цитата:
Сообщение от Gustav Посмотреть сообщение
Да, похоже на то... Чего-то никакая дьявольщинка-сумасшедшинка в голову не идет...
А две точки и запятая - это максимум из что может быть в одном диапазоне или допускается полный букет всех спецсимволов для Range?
Может быть целый букет.
Но для парсера по аналитикам есть такая мысль:
1. повесить диапазон как условие на таблицу Dimensions по интересующему виду аналитики, заполнить получеными значениями множество.
2. проделать то же самое со вторым диапазоном, заполнив второе множество
3. получить пересечение множеств
4. из этого пересечения составить новый Range
Старый 13.01.2011, 13:58   #17  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Только что придумал ещё один способ. Без джойна, но с созданием вьюхи
Идея состоит в том чтобы обмануть Query и создать во View два "виртуальных" поля ссылающихся на одно и тоже поле реальной таблицы. Тогда на каждое "виртуалное" поле можно будет повесить своё условие. Система будет думать что это разные поля и соеденит условия по логическому "И".
Старый 13.01.2011, 15:25   #18  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
см также Объединение таблиц по Range-полю одной из них
Цитата:
Сообщение от raz Посмотреть сообщение
X++:
    qBDS.addRange(fieldNum(LedgerTable, AccountNum)).value(userRangeNum);
    qBDS.addRange(fieldId2Ext(fieldNum(LedgerTable, AccountNum), 1)).value(curRangeNum);
Теги
пересечение условий, запрос (query)

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Можно ли исп. switch задать диапазон для case ??? djoker DAX: База знаний и проекты 23 27.12.2004 15:28
Вызвать отчет напрямую, минуя окно установки условий ATimTim DAX: Программирование 4 19.10.2004 12:10
Передача условий в отчет ArturK DAX: Программирование 4 18.08.2003 22:56
Диапазон дат YVAS DAX: Программирование 3 08.08.2003 14:06
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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