Форум разработчиков QlikView и Qlik Sense. Получи любые ответы на вопросы по QlikView и Qlik Sense в течении нескольких часов!
Вы не вошли.
Страницы 1
Запустить :
Set MyApp = CreateObject("QlikTech.QlikView")
MyApp.Launch "C:\Program Files\QlikView\Qv.exe", "C:\MyFiles\abc.qvw"
Добрый день, хотелось поподробней.
Если у вас табличка типа
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 и т.п.)
Я подозреваю у Вас после данной таблички еще joinы какие-нибудь стоят, запросите итоговую табличку в конце загрузки скрипта, типа
Table2:
load*,RowNo() as Row
resident table1;
drop table table1;
Количество должно совпасть
Корни этой проблемы нашлись. Qlikview скрывает повторяющиеся строки. Теперь остается вопрос как сделать так, чтобы Qlik их не скрывал
Я к этому и подводил, у вас в правом нижнем углу количество записей в таблице Qlika 132774, столько же и выгружается в Excel.
Добавьте в скрипт загрузки еще такое поле:
RowNo( ) as Счетчик и вынесите это поле в простую таблицу.
А в нижней правой части окна сколько записей в таблице показывает?
Добрый день! Поподробней?! Какие данные теряются? Как вариант, старые версии Excel не поддерживали более 65500 строк
Должно помочь. Включая сумму внутрь условия Вы сам сообщаете Клику необходимость сначала все просуммировать в рамках выборки, а затем делать вывод отрицательная ли уже общая сумма или нет. Расчет верно идет не только по измерению Номенклатура, а в разрезе Номенклатура+Статус, так как это частная выборка суммировать в которой по сути и нечего. Как только вы выкинете Статус, я предполагаю, что сумма по Номенклатуре тоже поплывет.
//Попробуем сделать простой пример:
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
И тут Вы получаете, как раз неверную сумму для Вашей формулы, и верную, при любой выборке, когда условие проверяется сначала, а потом уже суммируется результат.
Добрый день, вместо If(sum([Остаток]+ [К получению])>0, sum([Остаток]+ [К получению]), ‘Отсутствует’), думаю надо
sum (If(([Остаток]+ [К получению])>0, ([Остаток]+ [К получению]), 0)) и уже к сумме ставить условие, если она отрицательна, то 'отсутствует'
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;
Спасибо!
Решение отличное.Сначала тоже думал в этом направлении, но "залип" на "order by", т.к. изначально пытался сделать через "group by".
Добавлено спустя 08 мин 10 с:
Единственное, заметил, что таблицу удаётся приджойнить, только предварительно сохранив её в qvd, удалив через Drop Table и загрузив обратно из qvd...Мож кто-то сталкивался и подскажет почему не получается джойнить "на лету"?
Что значит не получается? в чем выражается ошибка? Подозреваю что у Вас конструкция типа такой, без использования оператора join?
load *
resident (Table)?
//Решение неизящное, но рабочее
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;
//Топ стран получили, а дальше джойните Вашу табличку с периодами к этой
Добрый день! На закладке Сортировка укажите выражение =match(Metal,'Платина','Золото','Серебро') (Metal - поле с металлами)
Может там не ноль, а пусто (isnull), по "пустоте" Qlik не фильтрует
//Загрузим календарик
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;
load
FirstValue (Описание),
ИД
from table group by ИД;
А в чем проблема? Подключаетесь OLE DB к вашей базе и вперед )
Страницы 1
[ Сгенерировано за 0.020 сек, 8 запросов выполнено - Использовано памяти: 1.46 Мбайт (Пик: 1.59 Мбайт) ]