Q: Здравствуйте. В прикреплённой таблице есть два поля: DateNum и WorkType. В поле WorkType чередуются данные разделённые пробелом и соответствующие цифрам строкой ниже. Чтобы много не расписывать, необходимо сделать следующее:
Пример (Как было):DateNum WorkType
17.01.2017/6 УВ Я
17.01.2017/6 6.0 1.8
17.01.2017/7 Я
17.01.2017/7 8.7
17.01.2017/8 Я H
17.01.2017/8 3.7 2.9
17.01.2017/1 УВ
17.01.2017/1 5.3 Пример (Как должно быть:)
DateNum УВ Я Н
17.01.2017/6 6.0 1.8
17.01.2017/7 8.7
17.01.2017/8 3.7. 2.9
17.01.2017/1 5.3 Проблема заключается в том что буквенные данные могут быть различными. Таких таблиц много (по одной на каждый день). Список возможных вариантов так же приложил. Помогите пожалуйста новичку.
https://community.qlik.com/servlet/JiveServlet/download/1268617-278448/%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82%D1%8B.xlsx https://community.qlik.com/servlet/JiveServlet/download/1268617-278447/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%802.qvd https://community.qlik.com/servlet/JiveServlet/download/1268617-278443/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80.qvd
A:Скрипт: https://pastebin.com/dTQgDSQc
Результат: img-2017-05-16-17-21-19.png / Облако Mail.Ru
Q: Делаю отчет где есть
Таблица 1 с платежами (контракт, дата, сумма платежа)
Таблица 2 с балансами (контракт, дата, баланс по телу и тд.)
Есть ряд параметров (например, продукт, dpd), которые завязаны на номере_контракта.
Подскажите как правильно связать таблицы,
Что бы фильтр накладывать на дату (год, мес., день).
Пробовал делать составной ключу
( через “&”
и
Hash160(contract_id, date(date,’YYYY.MM.DD’)) as Key )
Неполучилось (в загруженых таблицах есть записи с ключем и пустыми полями, при проверке на конкретную дату и для конкретного договора запись была и в таблице платежей и в таблице балансов).
Связал по номеру контракта (но поля дата обозвал в каждой таблице поразному) неполучается наложить фильтр на дату.
Подскажите как это правильней сделать?
A: Для работы с датами лучше создавать отдельную таблицу, так называемый «Мастер календарь». А в остальных таблицам будет общее поле с календарём. Тогда при выборе любого периода в календаре, выборка затронет все данные приложения.
Простенький МастерКалендарь
Temp:
Load
Max(ДатаКод) as MaxDate
Resident РегистрДвижений;
Let vMaxDate = Floor(Peek(‘MaxDate’));
МастерКалендарь:
Load
Num(Дата) as ДатаКод,
Date(Дата,’DD.MM.YYYY’) as Дата,
Year(Дата) as Год,
‘Q’ & Num(Ceil(Num(Month(Дата))/3)) as Квартал,
Month(Дата) as Месяц,
‘W’ & Num(Week(Дата),00) as Неделя,
WeekDay(Дата) as ДеньНедели,
‘D’ & Day(Дата) as День,
Left(Month(Дата),3) & ‘-‘ & Year(Дата) as ГодМесяц,
Year(Дата) & ‘-W’ & Num(Week(Дата),00) & ‘ (‘ & Left(WeekStart(Дата),5) & ‘-‘ & Left(WeekEnd(Дата),5) & ‘)’ as ГодНеделя,
Year(Дата) & ‘-Q’ & Num(Ceil(Num(Month(Дата))/3)) as ГодКвартал,
WeekStart(Дата) as НачалоНедели,
WeekEnd(Дата) as КонецНедели,
MonthStart(Дата) as НачалоМесяца,
MonthEnd(Дата) as КонецМесяца,
QuarterStart(Дата) as НачалоКвартала,
QuarterEnd(Дата) as КонецКвартала;
Load
Date(‘01.01.2017′,’YYYYMMDD’)+(Iterno()-1) as Дата
Autogenerate 1
//While Date(‘01.01.2017′,’YYYYMMDD’)+(Iterno()-1) <= Date(Today());
While Date('01.01.2017','YYYYMMDD')+(Iterno()-1) <= Date($(vMaxDate));
Q: У меня есть два столбца экспортированных из БД, в одном из них запрошенная дата доставки, а в другом — реальная дата доставки. Как правильно создать меру, содержащую количество просроченных доставок, т.е. количество пар, где Запрошенное время < Реальное время?
Искал подобное на просторах интернета, самое лучшее что смог сгенерировать -
count({$<[Дней в запасе/Дней просрочено]={"<0"}>}[Дней в запасе/Дней просрочено])
где Дней в запасе/Дней просрочено — созданная мной мера, содержащая столбец с разностями запрошенной и реальной даты доставки. Такой запрос выдает ошибку(прочерк).
Еще пробовал
count({$<[Дней в запасе/Дней просрочено]={">0″}>}[ShippedDate]),
но такой запрос напротив выдает все количество записей, как просто если бы делал count по ShippedDate.
Аналогично запрос
count({$<[Дней в запасе/Дней просрочено]={">0″}>}[RequiredDate])
Выдает количество всех существующих запрошенных дат в базе.
A: Проще всего создать поле-флаг в момент загрузки данных. Тем более если поля с датами — это поля одной таблицы, тогда вообще 1 доп строка в скрипте. Если разных таблиц, конечно придется повозиться. Но зато потом будет быстрый обсчет в самом приложении.
Если хочет именно через меру, то я бы сделал через агрегацию. Как-нибудь так (писал от руки):
Sum(Aggr(If([RequiredDate]<[ShippedDate],1,0),[OrderID]))
И тогда если в измерении у нас покупатель, то эта мера вернут количество просроченных заказов для каждого покупателя.
Q: В таблице есть возможность в качестве измерения выбрать дату, неделю, месяц, квартал, год.
Есть основная таблица в которой содержится 2 типа данных — остаток на конец месяца (OnHandEoM) и приход+расход на каждый день (InventTrans).
Есть таблица с календарем в которой содержится для каждой даты информация о принадлежности каждой конкретной даты к типу периода.
Например, для 3 июля есть 1 запись с типом OnHand_SoM Для определения начала месяца
Дата;_ДатаКлюч
3.07.17;30.06.17
И есть 3 записи с типом OnHand_Sum
Дата;_ДатаКлюч
3.07.17;1.07.17
3.07.17;2.07.17
3.07.17;3.07.17
Соответственно имеем формулу для расчета остатков на конкретную дату:
Sum({<ТипПериода={'OnHand_SoM'}, ТипДокумента={'OnHandEoM'}>} Количество) + Sum({<ТипПериода={'OnHand_Sum'}, ТипДокумента={'InventTrans'}>} Количество)
Первая сумма ищет сумму по всем остаткам на конец месяца, вторая сумму всех движений с начала месяца по указанную в измерении дату.
Данная формула работает если в измерении указывать месяц или дату, но если выбрать например неделю, то в период OnHand_SoM попадают 2 записи, если неделя содержит данные из двух разных месяцев.
Можно как-то в set expression определить значение минимальной даты начальных остатков?
Отсюда же следует второй вопрос, например, в таблице есть данные по промо акциям, есть дата начала промо акции и дата ее окончания, в каждой строке они разные, можно как-то определить в формуле эту дату для расчета остатков на начало и конец промо акции?
A: Можно вариант с «as of table»? Неплохой вариант, кстати.
Насколько большие данные?
Расчет остатков — задача требующая ресурсов. Объем работы примерно одинаков при любом способе.
Если остатки рассчитаны заранее — будет большой массив, но графики, скажем по дате будут строиться махом при любых изменениях выборки, а при выборе «формульных» вариантов — каждый раз будут рассчитываться и съедать память.
Так что, здесь надо экспериментировать. Взять фрагмент/период и протестировать на нем все варианты.
Поэтому и нет однозначного ответа — как лучше считать остатки.

Q: Помогите разобраться
Есть файл, в нем порядка 50 столбцов и миллиона строк, ниже урезанный)))
В нем «номенклатура» входит в «узел», в свою очередь узел позже может быть «номенклатурой» и также входить в какой то другой «узел»
Например,
Как мне отобрав номенклатуру построить «дерево» (или вывести в таблицу итоговые значения), в какой узел она входит и далее этот узел какой номенклатурой становится, далее каким узлом становится та номенклатура и т.д. и на каждом этапе я должен видеть все поля таблицы относящиеся к этой строке.
Т.е. я выбрал номенклатуру «Шланг1» вижу узел «Установка слива», далее должен увидеть
Номенклатуру «Установка слива» входи в узел «Установка ВМ» (исходя из таблицы мы видим что этот узел последний, далее его нет ни в номенклатуре ни в узлах)
Нашел функцию lookup, но она не подходит
Период Дата Номенклатура Узел
22.10.2015 8:51:12 17.06.2016 Шланг1 Установка слива
22.10.2015 8:51:12 17.06.2016 Шланг2 Установка слива
22.10.2015 8:51:12 06.06.2016 Резервуар р10 Резервуар р10
22.10.2015 8:51:12 10.06.2016 Резервуар Р10-100 Резервуар Р10-100
22.10.2015 8:51:12 10.06.2016 Резервуар Р10-300 Резервуар Р10-300
22.10.2015 8:51:12 10.06.2016 Штуцер1 Штуцер1
22.10.2015 8:51:12 27.06.2016 Рукав, 720 Рукав 720
22.10.2015 8:51:12 10.06.2016 Штуцер 720 Штуцер 720
22.10.2015 8:51:12 17.06.2016 Установка слива Установка ВМ
22.10.2015 8:51:12 14.06.2016 Лист пола7 Пол вагона7611
22.10.2015 8:51:12 14.06.2016 Лист пола8 Пол вагона7611
22.10.2015 8:51:12 17.06.2016 Труба301 Установка слива
22.10.2015 8:51:12 14.06.2016 Штуцер 720 Трубопровод 7600
A: Смотри про иерархию http://help.qlik.com/ru-RU/sense/3.1/Subsystems/Hub/Content/DataSource/hierarchies.htm.
Я бы рекомендовал сделать справочник отдельный, на нем сформировать иерархию и подцепить к таблице данных.
Q: Начал знакомство с QlikView, и моя первая задача- требуется узнать оборачиваемость товара за указанный период. Данные берутся из двух таблиц. В одной указаны даты и количество поставок товара, во второй продаж товара.
Путём не сложных выражений он теперь рассчитывает отношение запаса к продажам, но проблема в том, что товарный запас до заданного диапазона он не берёт в учёт.
Собственно сам вопрос- как подсчитать остаток товара до указанной даты. Как я это представляю- будет некая табличная часть, в которую будут заноситься остатки на товары по датам, как реализовать- пока не пойму.
A: Обширная тема, с несколькими вариантами решений.
Посмотрите по поиску по форуму и в сообществе.
Например:
http://qlikview-forum.ru/qvf/index.php/topic,820.msg1894.html#msg1894
http://qlikview-forum.ru/qvf/index.php/topic,1151.msg2913.html#msg2913
http://qlikview-forum.ru/qvf/index.php/topic,1150.0.html
http://qlikview-forum.ru/qvf/index.php/topic,862.msg2179.html#msg2179
http://qlikview-forum.ru/qvf/index.php/topic,1090.msg2735.html#msg2735
https://community.qlik.com/message/570771#570771
https://community.qlik.com/message/1029324#1029324
Поиск в группе Qlik Россия и СНГ
Q: Разбираю статью http://blog.atkcg.ru/distinct-or-no-distinct-vot-v-chyom-vopros/ и столкнулся с тем, что у меня у меня QlikView обрабатывает данные не ясно для меня:
Код: [Выделить]
Table1:
LOAD * INLINE
[Group, Value
A, 150
A, 150
B, 250
B, 250
C, 400
C, 400];
Table2:
LOAD * INLINE
[Group, Value
A, 150
A, 150
B, 250
B, 250
C, 400
C, 400];
Все ясно, получается 1 таблица содержащая данные из 2-х загружаемых таблиц:
Но вот когда добавляю опцию NoConcatenate то поведение становится для меня неожиданным:
1. Почему в таблице только 3 записи, т.е. убираются дубликаты, хотя DISTINCT не используется ?
2. Почему не создаются 2-е таблицы QlikView, а только одна ?
Версия QlikView 12
A:Вы смотрите на ключевую таблицу, с уникальными ключами.
А по таблицам все грузит как обычно, в каждую по 6 записей.
Q:Нужно сгруппировать данные (приходы, расходы, возвраты и т.п.) по продажам по «дате-магазину-артикулу». Памяти не хватает. Как лучше подобную задачу решить?
Код:
Load KeyDOA
,Sum(alt(vr, 0)) as vr
,Sum(alt(pr, 0)) as pr
,Sum(alt(sale, 0)) as sale
…
from lib://SSD/DF.qvd(qvd)
group by KeyDOA;
,где
Hash128(Объект, Дата, Артикул) as KeyDOA
A: Разбейте записи по дате на фрагменты, сгруппируйте и соедините результаты в одну таблицу.
В жертву приносим время, при этом экономим память, занимаемую в процессе вычислений.
Q: В QlikSense есть две таблицы:
1. В первой таблице переменные: Дата заказа, Источник, Сумма заказа
2. Во второй таблице: Дата, Источник, Бюджет
Надо связать: Дата заказа-Дата, Источник-Источник, чтобы Бюджет тоже можно было бы использовать в первой таблице.
А на сколько я поняла, нельзя две таблицы связать двумя связями, получаются циклическая связь. Как этого избежать?
A:1) Если эти две даты несут в себе разную смысловую нагрузку, я бы по ним вообще не связывал.
2) В третью таблицу поле Источник заменить на id_Источник.
Получится две таблицы с данными, которые будут связанны через таблицу-справочник.
ПС
Синтетические ключи не кретичены, но и нежелательны, если только вы не делаете их сознательно, понимая почему именно должен быть такой ключ.
Q: При освоении программы Qlikview 12 возникли следующие вопросы:
1) Есть несколько таблиц. Хочу отобразить продажи(UnitPrice*Quantity) по месяцам для продукта(ProductName) Омары. Создаю диаграмму с полем Month и пишу выражение If(ProductName=’Омары’, UnitPrice*Quantity,), но так не работает от слова совсем. Пытался с помощью Aggr, но не очень понял как сделать. Подскажите, что можно попробовать? Если выделить в ручную, то видно, что для ‘Омары’ одному месяцу соответствует одно значение из Quantity и UnitPrice.
2) Например в ProductName есть разные торты, например [Шоколадный торт], [Ванильный торт] и т.д. Как выбрать все торты из ProductName? Я решил эту проблему через FindOneOf, но это очень криво выглядит.
A: Я бы объединил заголовки документов с их табличными частями, и прицепил бы календарь на ключевое поле «дата».
Вместо if() в выражениях следует использовать другой способ — set analysis.
Вместо расчетов в выражении UnitPrice*Quantity лучше использовать расчеты в скрипте.

Найти решение у бизнес-партнера QlikTech (QlikView) в России.
Форум разработчиков QlikView и Qlik Sense. Получите ответы на все вопросы по QlikView и Qlik Sense!
RSS
4 декабря 2017
gromych
Опубликовано в рубрике