Неофициальный форум пользователей Qlik Sense & Qlikview

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: AlfaLucky от 17 апреля 2019, 11:22:18

Название: Вопрос по выгрузки из БД
Отправлено: AlfaLucky от 17 апреля 2019, 11:22:18
Добрый день,Не корректно работает выгрузка данных если мы совмещаем фильтра по дате и по видом накладных, фильтр по дате отрабатывает но вид документов попадает только 101, во втором варианте всё работает, но сделано через костыль и для проверки.

KATSOPRold:
SQL SELECT

KATSOPR.NREC,
KATSOPR.CDOGOVOR,
KATSOPR.NAME,
KATSOPR.CORG,
KATSOPR.CVAL,
KATSOPR.DPRICE,
KATSOPR.DOPR,
KATSOPR.DSOPR,
KATSOPR.NSOPR,
KATSOPR.VIDSOPR,
KATSOPR.CPODRFROM,
KATSOPR.CPODRTO

FROM BDMAV91.KATSOPR
where ((KATSOPR.DSOPR < '132251905' and KATSOPR.DSOPR <> '0')
and
(VIDSOPR = 101 or VIDSOPR = 201 or VIDSOPR = 206 or VIDSOPR = 106 or VIDSOPR = 502 or VIDSOPR = 504));
STORE * from KATSOPRold into KATSOPRold.qvd(qvd);
DROP Table KATSOPRold;

Попробовал выгрузить их таким способом и у меня выгрузилось.

KATSOPRold:
SQL SELECT

KATSOPR.NREC,
KATSOPR.CDOGOVOR,
KATSOPR.NAME,
KATSOPR.CORG,
KATSOPR.CVAL,
KATSOPR.DPRICE,
KATSOPR.DOPR,
KATSOPR.DSOPR,
KATSOPR.NSOPR,
KATSOPR.VIDSOPR,
KATSOPR.CPODRFROM,
KATSOPR.CPODRTO

FROM BDMAV91.KATSOPR
where ((KATSOPR.DSOPR < '132251905' or KATSOPR.DSOPR <> '0'));
STORE * from KATSOPRold into KATSOPRold.qvd(qvd);
DROP Table KATSOPRold;

KATSOPRold1:
LOAD *
FROM $(vDirectory)KATSOPRold.qvd(qvd)
where ((VIDSOPR = 101 or VIDSOPR = 201 or VIDSOPR = 206 or VIDSOPR = 106 or VIDSOPR = 502 or VIDSOPR = 504));

STORE * from KATSOPRold1 into KATSOPRold1.qvd(qvd);
DROP Table KATSOPRold1;

Название: Re: Вопрос по выгрузки из БД
Отправлено: admin от 17 апреля 2019, 12:06:19
А что некорректного в загрузке?
Проверьте первый запрос в SQL MS.
Название: Re: Вопрос по выгрузки из БД
Отправлено: AlfaLucky от 17 апреля 2019, 01:33:53
Запрос отрабатывает, но попадают только KATSOPR.DSOPR < '132251905' and KATSOPR.DSOPR <> '0' и VIDSOPR = 101,
 а нужно что бы попадали VIDSOPR = 101 or VIDSOPR = 201 or VIDSOPR = 206 or VIDSOPR = 106 or VIDSOPR = 502 or VIDSOPR = 504

И я не могу понять почему не попадают другие документы.

Например если их запускать по раздельности, применяя сначала фильтр по дате, а потом фильтр по документам, то все данные попадают(во втором примере кода).
Название: Re: Вопрос по выгрузки из БД
Отправлено: admin от 18 апреля 2019, 08:53:46
Цитата: AlfaLucky от 17 апреля  2019, 01:33:53  Запрос отрабатывает, но попадают только KATSOPR.DSOPR < '132251905' and KATSOPR.DSOPR <> '0' и VIDSOPR = 101,
 а нужно что бы попадали VIDSOPR = 101 or VIDSOPR = 201 or VIDSOPR = 206 or VIDSOPR = 106 or VIDSOPR = 502 or VIDSOPR = 504
Следовательно, проблема в параметрах условиях Where.
Проведите отладку запроса, ради эксперимента замените and на or между группами условий.
Название: Re: Вопрос по выгрузки из БД
Отправлено: AlfaLucky от 18 апреля 2019, 09:56:49
Запрос отрабатывает. В данном запросе попадают все виды документов и документы с заданной даты , что является некорректно
Название: Re: Вопрос по выгрузки из БД
Отправлено: admin от 18 апреля 2019, 12:07:57
 :)  OK, а если так:
KATSOPR.DSOPR < '132251905' and KATSOPR.DSOPR <> '0'
and
(VIDSOPR = 101 or VIDSOPR = 201 or VIDSOPR = 206 or VIDSOPR = 106 or VIDSOPR = 502 or VIDSOPR = 504)
Дальше не буду "издеваться".
Следует правильно составить условие в запросе с учетом порядка и приоритетов срабатывания скобок AND OR и отладить его в Managment Studio или любом другом инструменте.
Qlik всего лишь отправляет sql-запрос через ODBC драйвер или коннектор и принимает ответ.
Название: Re: Вопрос по выгрузки из БД
Отправлено: AlfaLucky от 19 апреля 2019, 02:07:00
Я так и не понял почему не работает, сделал по такой схеме.

where (
(KATSOPR.VIDSOPR = 101 and KATSOPR.DSOPR >= 132251905) or
(KATSOPR.VIDSOPR = 201 and KATSOPR.DSOPR >= 132251905) or
(KATSOPR.VIDSOPR = 206 and KATSOPR.DSOPR >= 132251905) or
(KATSOPR.VIDSOPR = 106 and KATSOPR.DSOPR >= 132251905) or
(KATSOPR.VIDSOPR = 502 and KATSOPR.DSOPR >= 132251905) or
(KATSOPR.VIDSOPR = 504 and KATSOPR.DSOPR >= 132251905)
);
Название: Re: Вопрос по выгрузки из БД
Отправлено: AlfaLucky от 23 апреля 2019, 04:08:58
Вот ещё один рабочий вариант
where (
KATSOPR.DSOPR >= '132251905' and
(KATSOPR.VIDSOPR IN (101, 201, 206, 106, 502, 504)));