Неофициальный форум разработчиков QlikView и Qlik Sense

Форум разработчиков QlikView и Qlik Sense. Получи любые ответы на вопросы по QlikView и Qlik Sense в течении нескольких часов!

Вы не вошли.

#1 Re: Программирование QlikView » Компиляция файла QlikView » 2019-08-16 12:13:49

Bao

Запустить :

Set MyApp = CreateObject("QlikTech.QlikView")
MyApp.Launch "C:\Program Files\QlikView\Qv.exe", "C:\MyFiles\abc.qvw"

#2 Re: Для начинающих » Однговременная визуализация категорий поля » 2019-08-16 11:43:16

Bao

Добрый день, хотелось поподробней.
Если у вас табличка типа
LOAD * INLINE [
    КАТ, sls
    Тип1, 1
    Тип2, 3
    Тип3, 56
    Тип1, 4
    Тип2, 7
    Тип3, 8
    Тип1, 9
    Тип2, 1
    Тип3, 5
];
и вы в Измерения добавите поле "КАТ", то любая формула в выражениях диаграммы, например Sum(sls) или Count (sls), даст Вам верные значения в разрезе данных "Тип"

Если Вам необходимо сделать отдельные диаграммы в разрезе конкретного типа, то лучше соответствующую архитектуру данных подготовить в скрипте загрузки, если это почему-либо затруднительно, то в диаграмме можно использовать функционал "Вычисляемого измерения" (что то типа '=if(КАТ='Тип1', КАТ)' в диаграмме для Тип1, '=if(КАТ='Тип2', КАТ)' в диаграмме для Тип2 и т.п.)

#3 Re: Для продвинутых » Ошибка экспорта в excel » 2019-07-19 18:36:20

Bao

Я подозреваю у Вас после данной таблички еще joinы какие-нибудь стоят, запросите итоговую табличку в конце загрузки скрипта, типа
Table2:
load*,RowNo() as Row
resident table1;
drop table table1;
Количество должно совпасть

#4 Re: Для продвинутых » Ошибка экспорта в excel » 2019-07-18 19:25:45

Bao
An пишет:

Корни этой проблемы нашлись. Qlikview скрывает повторяющиеся строки. Теперь остается вопрос как сделать так, чтобы Qlik их не скрывал

Я к этому и подводил, у вас в правом нижнем углу количество записей в таблице Qlika 132774, столько же и выгружается в Excel.
Добавьте в скрипт загрузки еще такое поле:
RowNo( ) as Счетчик и вынесите это поле в простую таблицу.

#5 Re: Для продвинутых » Ошибка экспорта в excel » 2019-07-18 13:25:30

Bao

А в нижней правой части окна сколько записей в таблице показывает?

#6 Re: Для продвинутых » Ошибка экспорта в excel » 2019-07-17 18:30:53

Bao

Добрый день! Поподробней?! Какие данные теряются? Как вариант, старые версии Excel не поддерживали более 65500 строк

#7 Re: Для начинающих » Как агрегировать данные по номенклатуре и отбросить отриц-е показатели » 2019-05-28 16:59:32

Bao

Должно помочь. Включая сумму внутрь условия Вы сам сообщаете Клику необходимость сначала все просуммировать в рамках выборки, а затем делать вывод отрицательная ли уже общая сумма или нет. Расчет верно идет не только по измерению Номенклатура, а в разрезе Номенклатура+Статус, так как это частная выборка суммировать в которой по сути и нечего. Как только вы выкинете Статус, я предполагаю, что сумма по Номенклатуре тоже поплывет.
//Попробуем сделать простой пример:
LOAD * INLINE [
    Item, State, Balance, Arrival
    Item1,Active , -10, 2
    Item1,Old , -20, 2
    Item2,Active , 10, 2
    Item2,Old , -15, 2
   
];
Сделаем по ней Прямую таблицу с одним измерением Item, по Item1 должны получить везде 0 (ну т.е. по сути "откинуть" отрицательные значения для дальнейших операций), по Item2 при любой выборке 12:
Item                =(sum (if (((Balance+Arrival))>0,(Balance+Arrival),0)))    =sum (Balance)+sum (Arrival)
Item1                                                  0                                                        -26
Item2                                                 12                                                         -1

во втором выражении специально условие не ставил, что было видно неверную сумму при отсутствии разреза по измерению Статус,
а если добавить - то и второе выражение будет верно отображать сумму (что, как я думаю у вас и происходит):

Item    State                       =(sum (if (((Balance+Arrival))>0,(Balance+Arrival),0)))    =sum (Balance)+sum (Arrival)
Item1    Old                                                          0                                                             -18
Item1    Active                                                          0                                                                -8
Item2    Old                                                          0                                                            -13
Item2    Active                                                        12                                                              12

А теперь уберем измерение Номенклатуры, оставим только Статус:

State    =(sum (if (((Balance+Arrival))>0,(Balance+Arrival),0)))    =sum (Balance)+sum (Arrival)
Old                                                           0                                                   -31
Active                                                           12                                                     4


И тут Вы получаете, как раз неверную сумму для Вашей формулы, и верную, при любой выборке, когда условие проверяется сначала, а потом уже суммируется результат.

#8 Re: Для начинающих » Как агрегировать данные по номенклатуре и отбросить отриц-е показатели » 2019-05-27 18:49:46

Bao

Добрый день, вместо If(sum([Остаток]+ [К получению])>0, sum([Остаток]+ [К получению]), ‘Отсутствует’), думаю надо
sum (If(([Остаток]+ [К получению])>0, ([Остаток]+ [К получению]), 0)) и уже к сумме ставить условие, если она отрицательна, то 'отсутствует'

#9 Re: Для начинающих » Выборочная загрузка данных » 2019-04-09 11:26:55

Bao
Валерий пишет:

Left Join [Table]:
Load
Country as [Страна],
TOP
Resident [tmp];
drop Table [tmp];

Синтаксис неверный:

Right Join (Table) // - скобки круглые и не надо ":" и не Left, а Right или Inner Join, т.к. надо обрезать по значениям TOP таблицы, да и вообще лучше не использовать квадратные скобки в наименовании таблиц

Load
Country as [Страна],
TOP
Resident tmp;
drop table tmp;

#10 Re: Для начинающих » Выборочная загрузка данных » 2019-04-08 11:32:05

Bao
Валерий пишет:

Спасибо!
Решение отличное.

Сначала тоже думал в этом направлении, но "залип" на "order by", т.к. изначально пытался сделать через "group by".

Добавлено спустя 08 мин 10 с:
Единственное, заметил, что таблицу удаётся приджойнить, только предварительно сохранив её в qvd, удалив через Drop Table и загрузив обратно из qvd...

Мож кто-то сталкивался и подскажет почему не получается джойнить "на лету"?

Что значит не получается? в чем выражается ошибка? Подозреваю что у Вас конструкция типа такой, без использования оператора join?


load *
resident (Table)?

#11 Re: Для начинающих » Выборочная загрузка данных » 2019-04-05 18:49:20

Bao

//Решение неизящное, но рабочее  smile

Table: //Пример
LOAD * INLINE [
    Country, Num
    США, 1000
    Россия, 4000
    Корея, 200
    Китай, 100
    США, 1000
    Россия, 5000
];

Table2:
load
sum(Num) as Sum,
Country
resident Table group by Country
;
Table3:
First 3 // тут числом задаете топ стран
load Country as TOP
resident Table2 order by Sum desc;
drop table Table;
drop table Table2;

//Топ стран получили, а  дальше джойните Вашу табличку с периодами к этой

#12 Re: Программирование QlikView » Произвольная сортировка списка » 2019-03-22 17:52:06

Bao

Добрый день! На закладке Сортировка укажите выражение =match(Metal,'Платина','Золото','Серебро') (Metal - поле с металлами)

#13 Re: Программирование QlikView » Поиск в колонке » 2019-03-01 12:39:47

Bao

Может там не ноль, а пусто  (isnull), по "пустоте" Qlik не фильтрует

#14 Re: Для продвинутых » Работа с диапазонами дат » 2019-03-01 11:42:12

Bao

//Загрузим календарик
Table:
    load
    Date(MakeDate(2018) + IterNo() - 1) as Date
    autogenerate 1
    while (Date(MakeDate(2018) + IterNo() - 1)) < MakeDate(2019);


//Ваша табличка
Intervals:
LOAD * INLINE [
Product,    Date_from,     Date_to,           QTY
aaa,          10.10.2018,     15.10.2018,    90
bbb,          18.10.2018,     22.10.2018,    78
ccc,          12.10.2018,     16.10.2018,    62
ddd,          20.10.2018,     24.10.2018,    100
];



IntervalMatch (Date) left join (Table) load Date_from,Date_to resident Intervals;
left join  (Table) LOAD distinct * RESIDENT Intervals;
drop table Intervals;
inner join (Table) load  Product, (QTY)/(count(QTY)) as Parts //Поле Parts - искомое Вами
resident Table where Len(Date_from)>0  group by Product,QTY;

#16 Re: Для продвинутых » Загрузка данных из MS SQL DWH » 2018-11-22 12:36:07

Bao

А в чем проблема? Подключаетесь OLE DB к вашей базе и вперед )

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.020 сек, 8 запросов выполнено - Использовано памяти: 1.46 Мбайт (Пик: 1.59 Мбайт) ]