FAQ по формулам, в т.ч. измерениям, в Qlik Sense/Qlik View часть 5

Q: Хочу попросить совета — в каком направлении двигаться )

Дана таблица, в которой (для примера) описываются некие события, есть поля «Код события» и «Время». Где то (неважно), я задал текущую выборку, определил для нее минимальное и максимальное время.
Теперь стоит задача отобразить на других диаграммах: события за 5 (для примера) минут до минимального времени и за 5 минут после максимального. Реальность требует использования сеточных диаграмм, где «Код события» и «Время» — измерения. Собственно вопрос: как ?
Я прочитал»Анализ множеств», но там дело идет с выражениями. В моем случае, получается, необходимо ограничивать измерения…

A:Измерения отображаются по выражениям. если у вас фильтр настроен на июль 2015, то и будет только 07-2015. Постройте выражение с учетом своих допусков.
Для начала поэкспериментируйте с днями, выделите день, а в условии поставьте +/-1 к полю Дата.

Q:Дано:

Продукт Выручка
продукт1 500
продукт2 300
продукт3 400

Вопрос: как получить (путем вычисления выражения в текст. объекте) количество продуктов, у которых суммарная накопленная доля по выручке, например, будет меньше 70 % … ? т.е. в данном случае ответ будет 2 шт.

A:В моем примере, чтобы вывести значения, например, меньше 90% я в текстовом поле прописываю:

=sum(aggr(if(RANGESUM(ABOVE(SUM(SALE)/SUM(TOTAL SALE),1,RowNo()),SUM(SALE)/SUM(TOTAL SALE))<0.9,1,0),ITEM)) При этом у вас не настроена сортировка в таблице по выражению "Выручка". Вам ведь необходимо находить от мин. к макс. Q: есть 3 измерения Страна, Регион, Город они составляют иерархию
я из них делаю иерархическую группу

в диаграмме нужно для этой группы подсчитать одно выражение, суть его не важна, но для разных уровней это выражение считается по разному
есть такая функция могу ошибаться в синтаксисе, что типа getselectcurrent(имя группы)
она как вроде должна отдавать имя текущего уровня

но во первых не могу понять как мне вывести значение этой функции, куда нибудь, чтобы увидеть что же она возвращает в 3 случаях
а во вторых я пишу ее в вложенном if , и не работает

A: GetCurrentField(ВАША_ГРУППА)

Просто не пугайтесь, что редактор подчеркнет как ошибку, он много чего так подчеркивает >:(, посчитается всё правильно. Единственное, что я не научился обрабатывать названия групп с пробелом, но думаю это не критично.

Q: Если,при выборе месяца,конец недели не входит в этот месяц — необходимо,чтобы эта неделя совсем не попадала в данные диаграммы.
Ну или для начала недели аналогично.Суть все равно одна и та же, т.е. если начало нед не входит в выбранный месяц,то нужно,чтобы эта неделя вообще не попадала в данные диаграммы.
Каким образом можно это осуществить?Я так понимаю все дело в прописывании условия?
Ниже приведен используемого календаря,возможно в нем нужно дополнить что-то,для правильности отображаемых данных.
А также на рис.Безымянный11 приведен пример,конкретно какие недели должны отображаться на графике (полные недели января)

A: Добрый день
=if(WeekStart(Дата) >= MonthStart(Дата) and WeekEnd(Дата) <= MonthEnd(Дата) , WeekName(Дата) )

Q: Не могу разобраться, как правильно прописать оператор YTD в QlikView.
Суть в том, что у меня выборка должна включать не просто выбранную дату, но и период, предшествующий ей.
Покажу на примере:
Нужно загрузить данные за 2014 и 2015 год, и, допустим, если я выбираю дату 30.06.15, то нужно, чтобы программа отображала не только данные за это число, а включала период с 01.01.2014 по 30.06.2015.
Нашла много материалов по данному оператору, понимаю, что прописывать его нужно через Set Analysis.
Проблема в том, что не нашла конкретных примеров — только формула + в разных источниках по-разному прописан синтаксис, хоть и не кардинально, но всё же отличается.
Если у кого-то есть источники, где есть реальные примеры с данным оператором, буду искренне благодарна.
Впрочем, буду признательна любой помощи.

A: Да, вариантов несколько может быть.
Самое простое выражение для таблицы:
Код:
sum({<дата = {'>=$(=yearstart(min(дата),-1))<=$(=max(дата))'}>} Сумма)
дата — поле календаря и таблицы фактов.
Сумма — поле связанной по дате таблицы.

Q: Не знаю как написать правильно условие для расчета суммы продаж за предыдущий месяц.
Есть два варианта, если не выбрано конкретное число,например май 2015 и если выбрано, например 5 мая 2015. Т.е если число не выбрано, то нужно посчитать полностью за предыдущий месяц,а если число выбрано, то нужно посчитать за предыдущий месяц с учетом дня. Т.е в первом случае надо посчитать за апрель 2015, а во втором за 5 апреля 2015. Как можно указать в условии формирования сдвига даты что выбран день или не выбран день,
можно ли написать следующим образом?
If(День >0, AddMonths(vMaxPeriod,-1),if( День=0,Monthend(AddMonths(vMaxPeriod,-1))))

A: вопрос пересекается с темой http://qlikview-forum.ru/qvf/index.php/topic,811.0.html
Предлагаю разбить задачу на этапы.
Для начала определимся с выражениями а затем с условием.
За эти дни может быть уже пришли к какому-то решению?

Q: Начинаю присматриваться к QlikView и мне понадобился подсчёт по выборке.
Как правильно составить, если есть столбец [Статус] в нём значения «true» и «false». Мне необходимо подсчитать количество значений «true»

A: Выражение простое, вот пример для текстового объекта:
Код:
=Count(
{<[Статус]={'true'}>}
[Статус])
Теория хорошо изложена в документации и справке. Искать по фразе «анализ множеств».
Очень хорошая документация по Qlik Sense тоже может помочь

Q: Просмотр профиля
Перенос выражения в загрузочный скрипт (qlikview)
« : Июль 06, 2015, 05:47:23 pm »
Здравствуйте, есть выражение такого типа:
Код:
if( count(DISTINCT D_ID) > 0.6* max ( total Aggr(count(DISTINCT D_ID), Владелец) )…
Цель: пытаюсь перенести данное вычисление в загрузочный скрипт.
Код:
tab_02:
load D_ID,
if( peek(‘D_ID’)=D_ID,0,1) as D_count
DC_NUMBER as CardID,
Resident tab_01 order by D_ID asc;

tab_03:
load
CardID,
sum(D_count) as Count_DistD_ID
Resident tab_02
Group by CardID;
В результате — да, получается табличка с подсчетом D_ID для каждого CardID соответственно… ну и теперь возможно найти макс. среди всех, но… это будет константа.
Вопрос-проблема: возможно ли вообще получить такие «макс. тотал», чтобы оно(и) реагировали на выборку?!
A:Конечно, можно считать «макс тотал».
Небольшой фрагмент данных для опытов по задаче был бы весьма кстати.

Q:Здравствуйте, не подскажете как подсчитать сумму продаж за предыдущую и за текущий месяц?

A:Sum({<месяц={$(=Max(месяц))}>} sales) -текущий
Sum({<месяц={$(=Max(месяц)-1)}>} sales) -предыдущий

Q:Имеется график в котором считается количество продаж в формате «Месяц-год»->Количество продаж

Необходимо добавить на данный график линейный график изменения в процентном соотношении объема продаж «Месяц-год»-> Изменилось на N%.
Строю комбо график и не могу понять как сделать выборку значений за предыдущий месяц
Формула должна быть (Объем(предыдущий месяц)/Объем(Следующий месяц))*100
Не могу понять как это сделать(

A:Если измерение = Месяц
То, выражение above(sum()) вернет значение по предыдущему отображаемому месяцу.
Попробуй above(sum())/sum()

Q: Коллеги, не хватает знаний, как реализовать подобное?
Столбец А,
Иван
Петр
Иван
Петр
Илья
Иван
Петр
Иван
Петр

Как посчитать и вывести в отчет количество имен Иван, Петр, Илья в данном столбце.

A: Столбец А как измерение, а в выражении count([Столбец А])

Q: Подскажите, пожалуйста. Есть такая ситуация. У нас есть прямая таблица, в которой есть измерения, одно из измерений с условием. Есть выражения, по которым считаются значения измерений Как можно вывести поле, значение выражения которого равно null. Если во вкладке измерения этой таблицы убрать галочку скрыть null Значения, то появится не только это поле,но и поля,которые не нужно отображать. А поставить галочку в поле показать все значения в измерении с условием нельзя. Может кто-то знает решения данной проблемы?

A: if( isnull(ВЫРАЖЕНИЕ) , ‘Тут ничего нет’, ВЫРАЖЕНИЕ )
Или избавиться от «пустышек » в значениях измерений в скриптах, при формировании модели данных.
Просто заменив null на любое текстовое обозначение.

Q: У меня есть табличка вида:
№ заказа Товар Возрастная группа
22 N Детская
22 U Взрослая
24 К Взрослая
25 К Взрослая
25 О Взрослая

Вопрос — как посчитать количество заказов, в которые входят товары ТОЛЬКО Взрослой возрастной группы? Т.е. в данном примере таких заказов будет 2.

A: Нам надо подсчитать, следовательно count().

Будем считать по значению поля «№заказа», а чтобы исключить двойной подсчет одного и того же заказа, применим — Distinct, следовательно count(Distinct [№ Заказа])

Нам следует ограничить подсчет множеством взрослой возрастной группы , т.е. [Возрастная группа]=»Взрослая», следовательно, применяя анализ множеств запишем
Код:
count( Distinct { <[Возрастная группа]={"Взрослая"}> } [№ Заказа] )


Найти решение у бизнес-партнера QlikTech (QlikView) в России.

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

FAQ по формулам, в т.ч. измерениям, в Qlik Sense/Qlik View часть 4

Q: Хочу сделать линейную диаграмму, где в зависимости от выбранного пользователем года строится YTD.
Но все YTD у меня показывают одинаковые значения. Делал так:
YTD 2015: Sum({<[Date__c]={">=01.01.2015<=$(=MAX(Date__c, 'DD.MM.YYYY'))"}>} FactCost__c)

YTD 2014: Sum({<[Date__c]={">=01.01.2014<31.12.2014"}>} FactCost__c)

YTD 2013: Sum({<[Date__c]={">=01.01.2013<=31.12.2013"}>} FactCost__c)

Но ничего в итоге не формируется. И это я так понимаю хардкод, можно ли без него обойтись?
FactCost — сумма продаж

A: В целом код верный и должно считаться все верно.
Возможно, нужно попробовать вот так:
Код: [Выделить]
YTD 2014: Sum({$<[Date__c]={">=01.01.2014<31.12.2014"}>} FactCost__c)

2. Если ничего не выводит, то можно попробовать двигаться «поступательно». Сначала посчитать (сделать таблицу) для одного года. Если удалось это сделать, то добавить еще один год и т.д.

3. По-поводу, харкода. Не до конца понимаю структуру данных (но это и не важно), но можно/нужно использовать таблицу периодов в которой уже есть MQT, YTD, MAT и т.д. Сейчас нет времени описывать это, возможно в дальнейшем опишу.

P.s. Все это описал для QlikView. Думаю, для QlikSense все где-то так же.

Q: Подскажите пожалуйста можно ли как то округлить время в диаграмме.
мне нужно округлить время:

A: Конечно, можно.
Если время в поле дата (29.02.2016 08:14:31), то можно сделать вот такой Dimension:

Код:
=If (WildMatch (Mid (DATE_TIME, 15, 1), 0, 1, 2), Mid (DATE_TIME, 12, 2) & ‘:00’, Mid (DATE_TIME, 12, 2) & ‘:30’)

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

Q: Прошу Вас помочь с формулой, позволяющей сделать нарастающий итог по каждой неделе в каждой «группе материалов».

Понимаю, что нужно использовать set expression, но почему то она не работает
SUM({$ } Income-Outcome)

A: Малость с телефона, и немного не выспавшийся…
Но похоже в вашей формуле не хватает знака Равно в этой части для сравнения
{‘<=$(=Week)'}

Q:Давно у меня уже висит задача, с которой разобраться не могу. Сейчас появляются на работе задачи, поэтому она стала критичной.
К сути — у меня Set Analysis и конструкция if не распознают переменные с датой.

1) Касаемо Set Analysis:

Есть стандартный синтаксис, где задаются переменные с датой:
Код:
SET vYearMin = 2004;
SET vYearMax = 2014;
SET vYearCurr = 2015;
Потом данные переменные должны работать в формуле:
Код:
=SUM({$ <Год = {'>=$(vYearMin)<=$(vYearMax)'}>} Продажи)
В своём случае я задаю переменные:
Код:
SET vDate1 = «‘17.08.2015 00:00:00’,’DD.MM.YYYY HH24:MI:SS'»;
SET vDate2 = «‘19.08.2015 23:59:59’,’DD.MM.YYYY HH24:MI:SS'»;
Подставляю их в формулу:
Код:
=SUM({$ =$(vDate1)<=$(vDate2)'}>} Приход)

Формула выдаёт 0. К слову, данная конструкция не видит переменные, т. е. они становятся серыми, когда я убираю фигурные скобки и кавычки одинарные.
Забыла описать саму задачу.
Мне необходимо задать период с понедельника по среду, чтобы поле суммировало приходы за 3 дня. Причём, чтобы один столбец всегда показывал бы предыдущую неделю, а второй текущую — сравнительная аналитика по приходам нужна.
Возможно ли задать данные периоды динамически, чтобы постоянно не переписывать даты? И как быть с переменными, если он их не видит, есть ли другие способы решения данной задачи?
Наверное, стоит уточнить, что поле doc_date содержит массив дат (скрин 2 во вложении). Возможно ли несооттвествие из-за того, что данное поле содержит дату в таком виде? К слову, именно к этому полю у меня прикреплён календарь (скрин 3 во вложении), дату идентифицирует корректно.

2) Касаемо if:

Пишу формулу, но она очень странно работает:
Код:
if(DOC_DATE = $(vM1), sum(KOL))

Допустим, нужно просуммировать приход за 17 сентября. Пишу, если doc_date = 17 сентября (переменная), то суммируй приход.
Работает в моём случае эта формула так — она суммирует любые другие даты, кроме указанной. Когда же выбираю роковое 17 сентября, то она выдаёт формат даты (скрин 4 во вложении).
С чем это может быть связано? Или есть какие-то нюансы в данной конструкции, которые я не учла?

Буду благодарна за любую помощь, голову уже сломала, не могу понять, где я допустила ошибки.

A: Попробуйте даты задать в таком формате:

Код:
LET vDate1Tmp = MakeDate(2015,08,17);
LET vDate2Tmp = MakeDate(2015,08,19);

LET vDate1 = floor($(vDate1Tmp));
LET vDate2 = floor($(vDate2Tmp));

В скрипте DOC_DATE прописать как
Код: [Выделить]
floor(DOC_DATE) as DOC_DATE

Задаем даты. Преобразуем их в числа. При изменении дат, они автоматически будут преобразованы в числа, соответственно. Даты задаем в переменных с Tmp, в формулах используем переменные vDate1 и vDate2.

Соответственно подставляя в формулы

Код:
SUM({$ =$(vDate1)<=$(vDate2)'}>} Приход)

Формат времени указывать не обязательно, потому что и так возьмутся целые дни.
Пишу на коленке, поэтому могут быть «Очепятки» 🙂

Насчет if.
Судя по тому что я вижу, то могу предположить, что формула отрабатывает не корректно, потому что разные форматы дат. Поэтому лучше использовать все тот же floor (Округление в меньшую сторону). С числами проще работать, чем с датами.

Код:
if(floor(DOC_DATE) = floor($(vM1)), sum(KOL))

Q: Подскажите,пожалуйста. Есть ли такая возможность в qliksense отображать опорную линию(линию тренда) но не на всем графике, а продолжать ее при отсутствии данных за какой-то период.
Т.е если у нас в 2015 году есть данные только до октября, то линия тренда отображалась от октября до декабря. Я склоняюсь к тому,что такой возможности нет. Но решила уточнить на всякий случай.
Может возможно такую задачу решить через комбо диаграмму?Т.е основной график отобразить как линейчатую диаграмму, а недостающий период через линию?

A: Как-то так:
If( год= max(TOTAL год),месяц)

Q: Добрый день,есть такая маленькая проблемка. Есть месяц год в формате dual, Как можно посчитать предыдущий месяц. Т.е нужно чтобы при выборе месяц год,например сентябрь 2015, считались данные для августа 2015

A: Посмотрите похожие темы:
http://qlikview-forum.ru/qvf/index.php/topic,797.msg1711.html#msg1711
http://qlikview-forum.ru/qvf/index.php/topic,470.msg825.html#msg825
http://qlikview-forum.ru/qvf/index.php/topic,798.msg1716.html#msg1716
http://qlikview-forum.ru/qvf/index.php/topic,804.msg1746.html#msg1746

Можете выложить пример данных (кодом или таблицу), чтобы на вашем примере показать решение.

Q: Подскажите пожалуйста,каким образом,в Клик Сенсе, в выражениях, можно исключить определенные значение,например «медиак»?
Составил выражение: Count({<Компания='медиак'>}[Продажа Сумма]) .Не сработало!
Хотелось бы,чтобы исчезло деление (рисунок ниже)

A:Сообщений: 961
Страна: ru
Почитайте про анализ множеств.
По выражению, попробуйте так:
Код:
Count({<Компания-={'медиак'}>}[Продажа Сумма])

Q:Столкнулась с тем, что нужно задать немного противоречивое ограничение.
К сути. Есть 4 типа документов, по которым нужно выводить количество. С этой задачей прекрасно справляется данная формула:
Код:
=SUM({ $ } KOL)

Но помимо этого нужно, чтобы формула реагировала на выборку между этими 4-мя типами.

Получается, в итоге она по умолчанию всегда должна суммировать только эти 4 типа (на самом деле их больше 20), но если я выберу один из этих типов, то должна отображать сумму только по нему.
Читала блоги, мануал, но никак не пойму, как это реализовать.

A:Если правильно понимаю задачу, то думаю, можно решить где-то так:
Код:
Переменная: v_Value = TYPE
if (TYPE = ‘14286858’ or TYPE = ‘14286852’ or TYPE = ‘28835859’ or TYPE = ‘14286850’,
SUM({ $ } KOL),
SUM({ $ } KOL)
)

Q:Не подскажите как лишний символ $ и преобразовать строку в число.

Пример:
$980.00

A: есть и такой вариант:

Код:
num(Money#(‘$987.23′,’$#’,’.’ ))

Q:Есть таблица:
QUANT DATE
10 01.10.2015
5 02.10.2015
20 03.10.2015
1 04.10.2015
4 05.10.2015
Каким образом можно узнать QUANT на максимальную дату? В данном случае, это будет 4.
Например, пользователь может выбрать любой период — пусть будет август. И нужно узнать QUANT на 31 августа.
Или, пользователь выберет любые три дня — пусть будет 02.10.2015, 03.10.2015, 04.10.2015. И нужно узнать QUANT на 04.10.2015.

A:=avg({$} QUANT)

Q: Подскажите,пожалуйста, как можно посчитать сумму для последнего выбранного месяца?
Нужно сделать так,чтобы если выбрано несколько месяцев, то нужно чтобы сумма не за все месяцы считалась,а за последний выбранный.

A:sum({<месяц={$(=Max(месяц))}>} shototam )

Если нужно только при выборке месяцев выбирать последний, а по умолчанию считать по всем, то

if( GetSelectedCount(месяц)>0 ,sum({<месяц={$(=Max(месяц))}>} shototam ),sum(shototam ))

Q: Скажите пожалуйста,есть ли в QV функция на подобии cluster как в Экселе. К примеру у нас есть владельцы карт скидочных 10 процентов скидка.Они делают покупки ( кто-то больше , кто-то меньше) Необходимо разбить их на сегменты, по как-му либо признаку, то есть найти закономерности между людьми.

A: Если я правильно понял о чем идет речь (кластерный анализ) то в Qlik-ах пока такого функционала нет, к счастью 🙂
Есть возможность выгрузить данные в R и загрузить обработанные обратно.
Но предварительно я бы сделал модель в кликвью и «покрутил» бы там подобный массив данных.

Q: Может кто-то подскажет, как сделать нечеткое сравнение двух текстовых полей в таблице.
Например, у меня есть 2 базы данных с названиями брендов. Мне нужно получить следующую таблицу:

Название бренда -База 1 Название бренда — База 2 Результат сравнения
Данон Донон Сходятся
Буги Вуги БугиВуги Сходятся

В QlikView есть нечеткий поиск, идея близка, только нужно выводить результат сравнения.
Нашла только одну тему на форуме, но без ответа https://community.qlik.com/message/8913#8913

A:Таблицу соответствий придется делать руками.
А потом — маппингом.
А я бы еще и первоисточники просмотрел бы на предмет унификации, чтобы не ломать потом голову на сопровождение.


Найти решение у бизнес-партнера QlikTech (QlikView) в России.

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

FAQ по формулам, в т.ч. измерениям, в Qlik Sense/Qlik View часть 3

Q: Есть задача посчитать доли по статусам продаж в каждом месяце.
К примеру: имеем следующие данные

Date Статус Sales
29.08.2016 Оплачен 100
30.08.2016 Возврат 200
31.08.2016 Оплачен 300
01.09.2016 Оплачен 400
02.09.2016 Возврат 500

В итоге нужно получить:

Август Сентябрь
Sum([Статус]) Доля, % Sum([Статус]) Доля, %
Итого 600 100% 900 100%
Оплачен 400 67% 400 44%
Возврат 200 33% 500 56%

В QlikSense сделала сводную таблицу, проблемы возникают с подсчетом показателя — Доля, %.
Sum([Sales])/Sum(total [Sales]) не катит, так как Sum(total [Sales]) считает сумму по всей базе, а не по определенному месяцу.
Еще пробовала так: Sum([Sales])/Aggr(Sum([Sales]),[Дата-Дата .autoCalendar.Month]), тоже не получается.
Помогите, пожалуйста.

A: Читаем хелп по sum()
А можно сразу здесь почитать, с примером по вашему случаю.
Вкратце, надо будет указать поле для определения уровня агрегирования Total.
Цитировать
Если слово TOTAL стоит перед аргументами функции, вычисление выполняется по всем возможным значениям, указанным в текущих выборках, а не только в тех, которые относятся к значению текущего измерения, т. е. измерения диаграммы игнорируются.

После префикса TOTAL может быть указан список, включающий одно или несколько имен полей в угловых скобках . Эти имена полей должны быть поднабором переменных измерений диаграммы.

Q: Приветствую есть ли аналог функции СУММЕСЛИ в QV?
Есть список номенклатуры на остаках всего порядка 80 000 артикулов.
Как подсчитать количество разных артикулов по которым была реализация?

A: Надо подсчитать количество уникальных артикулов, по которым была реализация.
count( distinct [признак реализации])

Q: Есть ли возможность организовать выражение, которое находило бы max и min не из диапазона значений, а из набора основных элементов или набора переменных, которые содержат в себе какие-то выражения?

На пальцах:
У меня есть 3 созданных мною основных выражения (двойные кавычки обозначают название):

«SLA»

num((1-if($(tnTicket1)=0,’-‘,($(tnTicket4))/($(tnTicket1)+$(tnTicket2_1)+$(tnTicket2_2)))
),
‘##,00%’
)

«SLAAIR»

num((1-if($(tnTicket1SLA)=0,’-‘,($(tnTicket4SLA))/($(tnTicket1SLA)+$(tnTicket2_1SLA)+$(tnTicket2_2SLA)))
),
‘##,00%’
)

«SLABLPS»

num((1-if($(tnTicket1BLPS)=0,’-‘,($(tnTicket4BLPS))/($(tnTicket1BLPS)+$(tnTicket2_1BLPS)+$(tnTicket2_2BLPS)))
),
‘##,00%’
)

Хотел бы на лист добавить элемент ключевого показателя эффективности, который принимал бы минимальное значение, принимаемое одним из этих основных элементов.

A: Попробуйте использовать функцию rangemin().
Например, при rangemin(1,2,3), данная функция вернёт минимальное значение, равное 1.
Также, можно воспользоваться вот таким выражением:
Min(ValueList(1,2,3))

Q: К сожалению, не удалось найти ответ на просторах форума. Эксперименты тоже не увенчались успехом :'( Есть подозрение, что это делается крайне легко, но как-то не получается((

Подскажите, пожалуйста: возможно ли сделать заголовок диаграммы с изменяющимся параметром? Например, «Количество продаж за *дата*». При этом *дата* — это некая формула, которая берет, например, текущий день или последний день из данных.

A: Конечно можно. Для этого следует прописать выражение возвращающее/формирующее текстовую строку, например:
Код:
=’Данные от ‘&$(vDataZaprosa)&’.’
Т.е. если в заголовке будет выражение начинающееся со знака = , то оно будет вычисляться, иначе просто отображаться.

Q: Всем привет, нужна помощь по получению долей. Есть таблица, в ней у меня указан контрагент и суммы.
Хочу получить, какую долю занимает каждый из них.
Пример:
Контр1 2345 рублей
Контр2 1111 рублей
Контр3 4343 рублей
Контр4 32131 рублей

Нужно добавить колонку, которая будет считать следующее:
Для контр1 — 2345 / Сумма(2345+1111+4343+32131) = сколько то процентов
Для контр2 — 1111 / Сумма(2345+1111+4343+32131) = сколько то процентов и т.д.

A: потребуется либо использовать измерение — период, либо включить условие в выражение фильтра.
Смотрите по справке — Анализ множеств.

Q: Есть формула:
Код:
=Sum( Aggr(
Count( DISTINCT {=$(=vStartDate)<=$(vEndDate)"}>} Product_id)/ Count( DISTINCT TOTAL {=$(=vStartDate)<=$(vEndDate)"}>} Product_id),
Order_id, category_name , Канал_привлечения(Общий) ) )
Как это упростить, чтобы не было 3-х уровней агрегации?

A: Да. Используйте подготовку данных на этапе загрузки

Q: Подскажите как посчитать для измерения коммутатор число контекстов в которых разные платы.
В приведенном примере таковых 2.

Коммутатор Контекст плата
MRC_09 2106136397 :8
MRC_09 2106136378 :9
MRC_09 2106136358 :10
MRC_09 2106136358 :11
MRC_09 2106136354 :9
MRC_09 2106136335 :10
MRC_09 2106136335 :10
MRC_09 2106136313 :10
MRC_09 2106136313 :11

A: Count(DISTINCT {<Контекст=,Контекст={"=Aggr(Count(Distinct плата), Контекст)>=2″}>} Контекст)

Q: Считаю число Call ID на определенном провайдере с определенного направления
count({<Провайдер={"MSK-1"}>} if(Направление=’Вход (усп)’, [Call ID]))
А как посчитать числоCall ID на всех провайдерах кроме 3-х определенных и только для 2-х направлений?

A: либо тот же Set Analysis, только:
{‘*’}-{‘Значение 1’}-{‘Значение 2’}-{‘Значение 3’}

Возможно с галочками где-то не так. Исключение из всего множества значений.

Q: строю график по выражению
=if(Count ([Call ID])>10,count(if(Направление=’Исх (усп)’, [Call ID]))*100/(count(if(Направление=’Исх (не усп)’, [Call ID]))+count(if(Направление=’Исх (усп)’, [Call ID]))))
измерение это счет.
Как построить график, в которым измерением бы было число счетов, а выражение тоже?

A: почитайте про использование функции aggr().

Q: Описание и логика
В заказах присутствую товары из разных категорий. Для определения кол-ва заказов (Orders) считаю веса:

Например, рассчитываем вес (кол-во заказов) для раздела «Home» : 1\2 + 1\3 + 1 = 1.83.
В таблице выражение вот такое:
Код:
Sum(Aggr(
Count( DISTINCT Product_id) / Count( DISTINCT TOTAL Product_id),
Order_id, category_name))

Тут все хорошо.

Проблема
Нужно определить кол-во новых клиентов за выбранный интервал.
Логика расчета должна быть аналогичная, т.е. через веса. Новый клиент — дата создания первого заказ в интервал если попадает.

Т.е. если интервал выбран 01.01.2015 — 02.01.2015 , то, как я понимаю, клиент с номером 1 уже не должен учитываться как-то в расчете. Как рассчитать этих новых клиентов и заполнить второй стоблик?
Скриншот прилагается. Буду очень благодарен за помощь!

Исходные данные такие:

Order:
User_id Order_id Date_insert
1 1 01.01.2015 12:33:12
1 4 01.01.2014 12:33:12
2 2 01.01.2015 11:23:11
3 3 02.01.2015 13:12:16

Basket:
Order_id Product_id
1 1
1 2
2 1
2 2
2 3
3 1
4 1

Category:
Product_id category_name
1 Home
2 Garden
3 Jewelry

A: Вроде бы сам разобрался. А вдруг кому пригодится, вот так можно:
Код:
Sum(Aggr(
Count( DISTINCT {}Date)>=vStartDate»}>} Product_id) /
Count( DISTINCT total {}Date)>=vStartDate»}>} Product_id) ,
Order_id, category_name))

Q: Строю диаграмму по выражению.
count(if(Направление=’Исх (усп)’, [Call ID]))*100/(count(if(Направление=’Исх (не усп)’, [Call ID]))+count(if(Направление=’Исх (усп)’, [Call ID]))).
Надо, чтобы при построении графика учитывались только данные, которые удовлетворяют условию Count ([Call ID])>1000. Как это сделать?

A: Можно использовать Set Analysis и в каждый Count добавить {<ИзмерениеАгрегации={"=Count ([Call ID])>1000″}>}. Будет что-то типа следующего выражения
Код:
count( {<Направление={"=Count ([Call ID])>1000″}>} if(Направление=’Исх (усп)’, [Call ID]))*100
/
(count( {<Направление={"=Count ([Call ID])>1000″}>} if(Направление=’Исх (не усп)’, [Call ID]))
+
count( {<Направление={"=Count ([Call ID])>1000″}>} if(Направление=’Исх (усп)’, [Call ID]))).
Тут мы оставляем только те Направления, по которым Count ([Call ID])>1000

Я бы ещё и конструкцию IF убрал, а вместо нее добавил вы условия в СА
Например:
Код:
count( {<Направление={'Исх (усп)'}*{"=Count ([Call ID])>1000″}>}[Call ID])*100
/
(count( {<Направление={'Исх (не усп)'}*{"=Count ([Call ID])>1000″}>} [Call ID])
+
count( {<Направление={'Исх (усп)'}*{"=Count ([Call ID])>1000″}>} [Call ID]))

Q: Подскажите, пожалуйста, ответ на следующий вопрос. Как в кликсенс построить диаграмму, в которой удельные веса будут считаться по временным периодам. В частности есть таблица с данными грузоперевозок, в ней есть маршруты машинами разной грузоподъёмности за разные периоды времени. Стоит задача вывести удельный вес в грузообороте машинами разной грузоподъёмности помесячно. У меня получается вывести только удельный вес по итогу за всё время следующим образом sum([Вес])/sum(total [Вес]), и вношу в диаграмму грузоподъёмность и месяц. Как преобразовать эту формулу на помесячный расчёт

A: Должно работать,
Код:
Sum([Sum-Вес])/Sum(total <Месяц> [Sum-Вес])
на вашем примере проверено — все ОК.

Q: Имеются такие данные:
Client, Product, Date, Sales
1, Apple, 01-01-2015, 750
1, Mango, 01-02-2015, 450
1, Limon, 01-02-2015, 350
2, Apple, 01-01-2015, 1750
2, Mango, 01-02-2015, 550
3, Limon, 01-01-2015, 250

(Выбираю Limon) Выражением
Код: [Выделить]
sum( {}) >} Sales)
я оставляю тех, кто покупал Limon. Это 1-ый и 3-ий клиент.

Вопрос: Как мне оставить тех, кто покупал только Limon и ничего кроме. Или, например, только тех, кто покупал Limon и Mango вместе ( среди покупок именно два товара вместе)?

P.S.: может есть другие варианты сделать так, чтобы выборка в списке «Product» работала не как»Или», а как «И» ? Возможно как-то переключать эти режимы?

A: Попробуйте через операции с модификаторами множества.
Код:
sum({ * }) >} Sales)

либо следующее выражение
Код:
sum({}) >} Sales)

Q: Нередко возникает вопрос о применении функции Qlikview AGGR(). В сети можно найти интересные примеры, но не понимая принципа работы AGGR() разобраться в них непросто.
Описание функции на сайте help.qlik.com

На простом примере начнем знакомство с этой функцией.

Возьмем абстрактный пример — факт чего-либо (# Сумма) по двум измерениям (Группа, Подгруппа)
(Извините, но вы не имеете доступа к галерее)
Загружаем данные в приложение Qlikview и создаем простую таблицу на три колонки:
(Извините, но вы не имеете доступа к галерее)
Мы получили данные о результатах работы групп по подгруппам с итогом.
Что еще мы можем получить из этого простого набора данных?

Отсортировав данные по сумме получаем минимальное и максимальное значение (13 237 и 96 040).
Включив опцию «Доля» для выражения суммы получим процент суммы для каждой строки в общей масссе. Того же результата можно добиться используя выражение —
Код:
Sum ([# Сделки])/Sum (TOTAL [# Сделки])
(Извините, но вы не имеете доступа к галерее)
Следующий вопрос — чьи результаты меньше 50% и более 80% от максимального показателя? Т.е. кто насколько отстает от лидера?
Т.е. требуется определить долю суммы каждого сочетания Группа-Подгруппа относительно максимального результата (отношение к 96 040).
Решается этот вопрос довольно просто с применением функции Aggr().
Код:
Sum([# Сумма]) / Max(TOTAL Aggr(Sum([# Сумма]), Группа, Подгруппа))
Почему не стоит использовать в знаменателе формулу max (TOTAL [# Сумма]) , показано на рисунке.
(Извините, но вы не имеете доступа к галерее)
Теперь следует разобраться, как работает эта функция. Согласно описанию, функция aggr() возвращает виртуальную таблицу из значений выражения рассчитанного по измерениям, указанным в качестве параметров. Аналогично выражению GROUP BY оператора SELECT SQL.
Т.е. запрос:
Код:
LOAD sum([# Сумма]) Resident SampleTable1 Group By Группа, Подгруппа
Дает тот же результат что и выражение:
Код:
Aggr(Sum([# Сумма]), Группа, Подгруппа)
Возвращаясь к ответу на поставленный вопрос, как определить группу лидеров и отстающих. Самое простое решение — использование визуальных подсказок для верхней и нижней границы, как показано на рисунке.
(Извините, но вы не имеете доступа к галерее)
Для отладки при составлении выражений можно использовать списки для просмотра результатов расчетов функции AGGR(). Здесь нет ничего сложного — используем выражение вместо поля при создании списка:
(Извините, но вы не имеете доступа к галерее)

Это самый простой случай использования функции AGGR(). На практике ее можно использовать и при создании измерений и для более сложных вычислений.
Если есть интерес, готов рассмотреть другие ситуации.

A: Использование AVG() без предварительного вычисления итогов внутри группы функцией AGGR(), может привести к ошибочным результатам.

И еще один пример с расчетом среднего:
(Извините, но вы не имеете доступа к галерее)
Как видим, среднее подсчитано в трех вариантах, и каждый может быть справедлив, в зависимости от ситуации и задачи.

Формулы для выражений:
Код:
Sum ([# Сумма])
Avg ([# Сумма])
avg(Aggr(Sum([# Сумма]), Группа, Подгруппа))
avg(Aggr(Sum([# Сумма])/Count(Подгруппа), Группа, Подгруппа))

Q: Дано:

Client, Product, Date, Sales
1, Apple, 01-01-2015, 750
1, Mango, 01-02-2015, 450
1, Limon, 01-02-2015, 350
2, Apple, 01-01-2015, 1750
2, Mango, 01-02-2015, 550
3, Limon, 01-01-2015, 250

Limon покупали все 3 клиента. А как мне найти тех клиентов, которые покупали и Limon и Mango ? Причем именно два товара вместе ( 2-ой и 3-ий клиент уже не подойдут).

A: Если в Дименшене оставить Client и прописать.

Код: [Выделить]
if(sum( {}) >} Sales)> 0,
if (sum( {}) >} Sales)>0,
sum(Sales),
0))

То суммы будут только у клиентов которые купили и то и то. Но правда если клиентов схлопнуть до других показателей, то данные могут разъехаться.

Найти решение у бизнес-партнера QlikTech (QlikView) в России.

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

FAQ по формулам, в т.ч. измерениям, в Qlik Sense/Qlik View часть 2

Q: Есть в одной таблице:
Дата, Выручка, Остаток
Не по всем дням есть остаток, т.е. был дефицит
Например из 30 дней в месяцев, остатков когда товара не было в наличие было 3 дня
Как рассчитать количество дней, когда остатков было = 0
?
A:Можно пойти от обратного.
Посчитать количество дней итого или вручную за период используя переменные и затем отнять количество дней когда товар был на остатках… примерно так:
count (Distinct Дата) — count (Distinct {< Остаток = {'>0′}>} Дата )
вместо count (Distinct Дата) можно использовать так: num(max(Дата)) — num(min(Дата))

Q:Количество случаев — Count(N_ZAP)
Сумма — Sum (Total [Количество случаев]) результат 0

A:Count(total <КСГ> N_ZAP)
http://help.qlik.com/ru-RU/qlikview/12.1/Subsystems/Client/Content/ChartFunctions/define-aggregation-scope.htm

Q:Есть 2 таблицы:

1. Дата, Артикул, Сумма продаж
2. Дата, Артикул, Сумма остатков

Если суммирую продажи на одном графике, то выводится сумма продаж за месяц.
Какой функцией на втором графике выводить не сумму остатков, а только остатки зна последний день данного месяца (или на первый)

?

A:Если у вас есть остатки на каждый день или на каждый последний день месяца, то их можно выводить вместе с данными по месяцам используя флаг рассчитанный на конец месяца, т.е. в календаре добавляем поле :
Код:
if(num(DateId)=num(floor(monthend(DateId))),1,0) as EOM_Flag,
а в графике или таблице где измерение = месяц в выражении пропишем:
Код:
sum({} СуммаПродаж)

Q:Что-то я не могу понять как работает Aggr. Точнее я знаю как эта функция работает, ведь не раз уже использовал, но в данной конкретной ситуации, что-то не могу разобраться.

Есть такая таблица. (Выбран весь апрель 2017)
Столбцы:
1) RowNo(Total) — мера, показыващая порядковый номер строки + так выводятся все строки на количество дней в выбранном периоде
2) Товар — тут всё понятно
3) ДатаКодОст — поле из календаря регистра для расчета остатков на лету.
4) Ост — остаток на дату
Код: [Выделить]
=Sum({<$(eClearPeriod), $(eDateOst)>}[КолДвиж]*[ТипДвиж])
5) ДниНалич — признак положительного остатка на дату
Код: [Выделить]
=If(Sum({<$(eClearPeriod), $(eDateOst)>}[КолДвиж]*[ТипДвиж])>0,1,0)

Переменные в set analisys, чтобы было более понятно
$(eClearPeriod) — убираем все выборки по периодам, чтобы они напрямую не влияли на набор данных
Код: [Выделить]
[Год]=,[ГодМесяц]=,[ГодКвартал]=,[ГодНеделя]=,[Месяц]=,[Квартал]=,[Неделя]=,[Дата]=,[День]=,[ДеньНедели]=

$(eDateOst) — применяем выборку из основного календаря на календарь остатков, т.к. они не связанны на прямую
Код: [Выделить]
[ДатаКодОст]=P({1<[ДатаКод]={">=$(=Min(Aggr(Min({<$(eClearRef)>} Total [ДатаКод]),[Товар])))<=$(=Max(Aggr(Max({<$(eClearRef)>} Total [ДатаКод]),[Товар])))»}>}[ДатаКод])

$(eClearRef)- убираем все выборки по справочникам, чтобы они напрямую не влияли на набор данных
Код: [Выделить]
[Товар]=,[Аптека]=,[Партия]=

Теперь я просто хочу свернуть эту таблицу и получить просуммированые остатки по каждым дням и количество дней наличия. Всё казалось очень просто — использовать Aggr().
1) Для остатка
Код: [Выделить]
Sum(Aggr(Sum({<$(eClearPeriod), $(eDateOst)>}[КолДвиж]*[ТипДвиж]),[Товар],[ДатаКодОст]))
2) Для дней наличия
Код: [Выделить]
Sum(Aggr(If(Sum({<$(eClearPeriod), $(eDateOst)>}[КолДвиж]*[ТипДвиж])>0,1,0),[Товар],[ДатаКодОст]))

Но не тут то было. В полученной таблице всё по 0:
http://i95.fastpic.ru/big/2017/0522/59/bed58e3c7ba84fcb49c6c4e123ab5a59.png
http://i92.fastpic.ru/big/2017/0522/5f/53a2ae5c36a81dc2a83b542c70f7075f.png
A:
В общем после упорнoго гугления выяснилось, что если во внутренней агрегации есть set analysis, то в большинстве случаем такой нужно указывать во внешней агрегации.

Т.е.
вместо
Код: [Выделить]
Sum(Aggr(If(Sum({<$(eClearPeriod), $(eDateOst)>}[КолДвиж]*[ТипДвиж])>0,1,0),[Товар],[ДатаКодОст]))
нужно было указать
Код: [Выделить]
Sum({<$(eClearPeriod), $(eDateOst)>} Aggr(If(Sum({<$(eClearPeriod), $(eDateOst)>}[КолДвиж]*[ТипДвиж])>0,1,0),[Товар],[ДатаКодОст])

Q:Я новичок в освоении qlik, завалился кучей информации и не много «поплыл».
Не могу разобраться, как мне кажется, с элементарным вопросом.
Извиняюсь, если данная тема была на форуме, я не нашел решения.

Как посчитать сумму продаж на определенную дату с начала года?
Насколько я понимаю, нужно использовать функцию InYearToDate.
Кажется, конструкция выглядит так : sum(if (InYearToDate (OrderDate, BaseDate, 0), TotalSales)), но я не совсем понял что вписать вместо BaseDate… какую дату? нужна ли переменная ?

A:Хорошо бы увидеть модель данных, — в частности интересует, как устроен календарь.
Полагаю, что в любом случае лучше будет использовать Set Analysis.
Рекомендую почитать статейку о том, как можно выстраивать и использовать время в модели. Вложил.

Также, подход к решению задачи будет зависеть от того, какой конкретный отчет требуется получить.
На вкладке «Выражения» свойств диаграмы есть опция рассчитывать выражение накопительно. В ряде случаев этого может быть вполне достаточно.

Q: Есть таблица: «Выручка за месяц», «Выручка за месяц», «Количество транзакций».
На лист устанавливаю объект «Текст и изображение», там пишу функцию Above([Выручка за месяц], 1). Отображается пустота, почему?
Пробовал так: {<Месяц={$(=Max(Месяц)-1)}>} [Выручка за месяц] тоже пустота.

Что я делаю не так?

A: Объект текст выводит результат выражения по всей выборке и не производит расчетов по измерениям.
Если цель выдать показатель именно таким образом, следует использовать Aggr().
Но для отладки рекомендую начать с таблицы, в объекте диаграмма.

Q: Сделал в таблице вывод «месяц, год»
month(CREATEDAT) & ‘ ‘ & year(CREATEDAT)

Почему то за сен, окт, ноя 2016 года оказались в низу списка, выше пошли июл 2011 и наст. времени.

в таблице с выводом полной даты все нормально. Что может быть?

A:
Все верно, сортировка текстом не даст ожидаемого результата.
Используйте функцию dual().
Например,
Код:
dual(month(DateId) & ‘-‘ & year(DateId),year(DateId) & num(month(DateId), ’00’)) as ‘Месяц-год’,

Q: Никак не могу справиться с такой задачей.
Есть сущность — контекст. В нем могут быть входящие и исходящие вызовы.
Т.е. имеем Контекст и в нем
Call ID,Направление.

Направления может иметь такие значения:
Вход (усп)
Исх (усп)
Исх (не усп)
Вход (не усп)

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

A: ОК, возможны два варианта.
Либо в скрипте подготовить массив для контекста с флагам по направлениям.
Либо написать выражение с вложенным анализом множеств.
Хелп по ссылке

Я бы сделал два варианта и сравнил бы их по производительности на больших массивах данных.

Q: Во вложении пример Диаграмма (Сводные таблицы). Одна и та же, но
1. В развернутом по Месяцу
2.В свернутом по Месяцу виде

Задача Посчитать количество сработок Клиента за месяц, т.е. при сворачивании по месяцу должно получиться 5 (как в верхней таблице), а не 1 как сейчас.

Пробовал воспользоваться Aggr, необходимого результата не получил

A: Продублируйте первую таблицу в Aggr() и возьмите сумму по полученной таблице(по полученным значениям):
Sum(Aggr(Count({$<[Сумма]={">0″}>} [Партнер_ID]), Партнер, Филиал, Месяц-Год,День))

(возможно ли что к названию партнера привязано несколько id?)

Q: У меня ситуация следующая. Есть отчет, если проще то группа, в ней энное количество товара. Далее за выбранный период отображаются в сводной таблице сколько продалось товара, и остаток только на товар где продаж больше нуля. Реализовано функцией IF() продажи больше чем ноль то остаток показываем, если меньше или равно нулю, то остаток показываем ноль. А в настройках стоит, что позиции с нулевым выражением скрываем. Проблема в том, что итоги показывают остаток больше, так как итог сначала суммирует общее количество продаж и только потом проверяется функция IF().
Можно как-то заставить итог по остаткам отображать правильную сумму?

A: Вместо If пользуйтесь анализом множеств ( на эту тему сегодня новая статья вышла)
Попробуйте
sum({<[#Сумма]={'>0′}>} [#Сумма остатка])

Q: Есть задача:
Массив данных: Группа товара, товар, Сумма, Кол-во.
Вывести в одной таблице товар который в сумме дает 50% от итога (наибольших) по сумме
и вторая половина 50% (наименьших) по сумме.

A: подробнее можно было бы написать с подробным примером.
Надо использовать выражение типа
Код:
If(RangeSum(Above(Sum(Sales),0,RowNo()))/Sum(TOTAL Sales) <= 0.8,Sum(Sales)) и читать https://community.qlik.com/blogs/qlikviewdesignblog/2014/09/15/abc-analysis https://community.qlik.com/message/1152541#1152541 Q: В Qlik Sense подгружены плановые показатели по дням за текущий месяц (за все дни текущего месяца). Если сегодня 9 число, то надо посчитать сумму по Плану за 9 дней, если 10 число, то за 10 дней и т.д. Подскажите, пожалуйста, как это сделать?

A: Вариантов на эту тему существует несколько.
Самый простой для начинающих, создать флаговое поле в скрипте на все даты от начала месяца до текущей даты, скажем MTD равный 1 для нужных дат и составить выражение:
Код:
sum( {} План)
или не создавая поля
Код:
sum({=$(=MonthStart(Today()))<=$(=Today())'}>}План)
Но в этом случае приложение будет зависить от дня просмотра, есть еще несколько вариантов и смысл у всех один — использование фильтра, т.н. «Set analysis and set expressions»

Q: столкнулся со следующей проблемой в применении aggr, по которой прошу вашего подсказа или ссылки на источник информации для решения.

1. Aggr(sum(выражение), Номенклатура).
2. Действует (и имеет значение) выборка месяца.
3. Выражение строится на сет анализе, «отменяющем» действие выборки, — для позиций номенклатуры вычисляются некие значения(продажи предыдущих — за пределом выборки — периодов).
4. Аггрегирую по номенклутуре для того, чтобы получить значения для склада.

Насколько я могу судить, aggr вычисляет Null для позиций, которые не продавались в текущем месяце и отрезаны, тем самым, выборкой по месяцу. Такое может быть? Или все же мне надо разбираться с выражением?

Написал максимально общо, поскольку предполагаю, что ответ все-таки на поверхности. Если не так — запощу модель.

A: Из последнего руководства по Qlik Sense
ALL qualifier

In QlikView, the ALL qualifier may occur before an expression. This is equivalent to using {1} TOTAL. In such a case the calculation will be made over all the values of the field in the document, disregarding the chart dimensions and current selections. The same value is always returned regardless of the logical state in the document. If the ALL qualifier is used, a set expression cannot be used, since the ALL qualifier defines a set by itself. For legacy reasons, the ALL qualifier will still work in this version of Qlik Sense, but may be removed in coming versions.

http://help.qlik.com/en-US/sense/3.1/Subsystems/Hub/Content/Scripting/functions-statements-not-recommended.htm

Q: Необходимо посчитатьCall ID только для тех у которых
— код завершения =503
— отношение числа Call ID к числу код завершения=503 >10

Вероятно криво делаю так
=if(Count ([Call ID])/Count ([код завершения]=503)>10 ,count(if([код завершения]=503, [Call ID])))
В итоге не получаю данных для отображения, хотя они должны быть.

A: Советую изучить такую чудесную вещь как Set Analysis

Поле «для тех у которых» заменим словом «Объект» =)

Не совсем понял условия но должно быть что-то вроде этого
Код:
Count( {$<[код завершения]={'503'}, [Объект]={"=Count ([Call ID])/Count({$<[код завершения]={'503'}>}[Call ID])>10″} >} [Call ID])

Получаем следующее:
1) [код завершения]={‘503’} — мы делаем выборку по коду завершения, соответственно в массив данных для обработки попадают только те объекты у которых в принципе есть вызовы с таком кодом завершения
2) [Объект]={«=Count ([Call ID])/Count({$<[код завершения]={'503'}>}[Call ID])>10″} — мы для каждого объекта считаем отношение общего количества Call ID к количеству Call ID с кодом завершения=503, и оставляем только те объекты у которых это отношение больше 10

ПС
Возможно я не очень правильно представил себе модель данных и условия. Но общий ход мыслей должен быть ясен.

Q: Создана родительско-дочерняя таблица с помощью функции Hierarchy.
Задача состоит в том, чтобы в сводной таблице иметь возможность раскрыть созданное дерево, при этом чтобы значения показателей на различных уровнях не суммировались (значения не аддитивные).
Пробовал через sum() и only(), не вышло.

Почему не в объекте «список» в виде дерева — множество атрибутов, цветовое кодирование, сортировка и т.д.

A: Решил с помощью dimansionality()
который фактически совпадает с длиной нода в дереве (NodeDepth)

Найти решение у бизнес-партнера QlikTech (QlikView) в России.

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

FAQ по формулам, в т.ч. измерениям, в Qlik Sense/Qlik View часть 1

Q: Коллеги, подскажите, может есть какое простое решение:
есть отчет, в отчете порядка 10-15 различных таблиц.
и в каждой таблице нужно сделать порядковую нумерацию строк.
Пример:
Такая таблица есть
Менеджер Значение
Иванов
152
Петров 325
Сидоров 856
Быков 789
Сусанин 548
Такая нужна:
Порядковый номер Менеджер Значение
1 Иванов 152
2 Петров 325
3 Сидоров 856
4 Быков 789
5 Сусанин 548

Может есть какая стандартная настройка таблиц? или пробовать через FieldNumber ?

A: Судя по представленным таблицам, порядковый номер — вопрос оформления таблиц, и никакой смысловой нагрузки не несет, кроме обозначения номера строки.

Если таблицы это чарт, то используйте выражение =1 с включенным аккумулятором. Для плоских таблиц это позволит сохранить возможность динамической сортировки по любому столбцу.

Q: Добрый день, что то я совсем заблудился со сводной и aggr
Мне необходимо рассчитать конверсию покупателей в группе товара по месяцам.
Модель диаграммы:
Измерения:
[TITLE1];[YEARMONTH]
Выражения:
уникальные чеки которые покупали продукцию из группы [TITLE1]
Код: [Выделить]
Count(Distinct IDCHECK)Все уникальные чеки за период [YEARMONTH]
Код: [Выделить]
aggr(Count(Distinct IDCHECK),YEARMONTH)конверсия будет равна отношению двух выражений
————————————-
К сожалению
Код: [Выделить]
aggr(Count(Distinct IDCHECK),YEARMONTH)Выводит общее к-во чеков за период только по одной произвольной группе ????
Что я делаю не так…..
https://community.qlik.com/servlet/JiveServlet/download/1285440-282591/%D0%9A%D0%BE%D0%BD%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F.qvw
A: победил ))
Count(Distinct Total IDCHECK)

Q: Всем привет.
QlikSense
Подскажите как можно выбрать например только 2 определенных значения из измерения, чтобы в отображение фильтра были только они, а другие были скрыты.
Сразу скажу запрос править нет возможности.

A: Воспользуйтесь функцией aggr()
Выражение примерно такое:
=aggr(only({<[Поле]={'Значение1','Значение2'}>}[Поле]),[Поле])

Q: Еще вопрос, а можно как то гвоздями прибить например определенные значения фильтра, чтобы они всегда были выбраны априори, а остальные уже можно выбирать.

A: Можно.
Используйте в формулах анализ множеств.
В зависимости от задачи и модели данных возможны варианты, например с флагами на значения постоянного фильтра и, опять же, анализ множеств.

Q: Помогите, пожалуйста, с объединением измерений!

Имеются данные по 2 разным типам транзакций (запасы и взаиморасчеты, пример сильно упрощенный):

1. ОсновнойМенеджер — КредиторскаяЗадолженность
Иванов 1000
Петров 2000
Сидоров 3000
2. Инженер-ОстатокНач
Иванов 10000
Петров 6000
Васильев 7000

Как создать диаграмму (сводную таблицу), которая объединила бы данные:

Менеджер/Инженер-КредиторскаяЗадолженность-ОстатокнаНачало
Иванов 1000 10000
Петров 2000 6000
Сидоров 3000 —
Васильев — 7000
?
https://community.qlik.com/servlet/JiveServlet/download/1269594-278703/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80.qvw

A: Методом проб и ошибок нашел решение.

В диаграмме Добавить вычисляемое измерение Инженер&ОсновнойМенеджер.
Но в реальном кейсе возникли некоторые проблемы с исчислением выражений, связанных с агрегированием.
Есть еще варианты решения?

Q: Исключение значений через расширения выражений (Set Analysis) Qlikview Qlik Sens

A: Для того, чтобы исключить одно или несколько значений через set analysis следует использовать следующий синтаксис:
Код: [Выделить]
Sum ( {} SumEntry )
Т.е. если использовать символ = (равно), то получим только совпадения, а используя -= (минус равно) получаем исключения, а именно — все записи кроме указанных в квадратных скобках {‘501′,’502′,’511’}.
Аналогичный результат будет при использовании:
Код: [Выделить]
Sum ( {} SumEntry )

Q: В диаграмме значения выражений ограничены следующими модификаторами в выражении множеств:
Sum({}SalesUAH)
Все ок, первый скриншот.

Кода же я добавляю еще одно выражение как константу или переменную (некое среднее значение, для сравнения с столбцами), то значения оси Х как бы скидываються и показываются все возможные варианты, которые были «отфильтрованы» модификаторами в выражении множеств. Второй скриншот.
Можно их как то не показывать?

A: Можно добавить то же условие выражение для фильтрации?
Или использовать опорные линии.
В Qlikview это «строка ссылки» (трудности перевода 🙂 )

Q: В диаграмме написал вот такое выражение множеств:
(Sum({}Sales).

Но хотелось бы, чтоб при выборе «St1» или «St2» или «St3» данные отфильтровывались, соответственно выбору. Как надо переписать запрос, чтобы данные ограничивались/фильтровались при выборе одного из значений «ТМ»?

A: Используйте операции с множествами. В данном случае знак * — пересечение множеств

Для примера
Код:
Sum({}Sales

ТМ={«St1», «St2», «St3»} — множестов с 3 предопределенными элементами ТМ
ТМ=P(ТМ) — все возможные элементы ТМ (влияют все текущие отборы в приложение)

Тогда если пользователь выберет кого-то из этих трех предопределенных элементов тогда в таблице останется только он один.
Но есть моменты. Если пользователь выберет, допустим, год 2016 и какого-то из 3 там нет, то его не будет в таблице.
Нужно играться с множествами пока не получите то что хотите

Q: Возник такой вопрос:

Есть таблица с полями:
«Клиент», «Период транзакции», «ПериодНачМес «, «ПериодКонМес».

Хочу посчитать сумму продаж за период между «ПериодНачМес » и «ПериодКонМес».
Добавляю меру и пишу такое выражение:

Sum({$<Период={">=ПериодНачМес<=ПериодКонМес"}>} [Стоимость])

ПериодНачМес = «Дата начала месяца последней транзакции».
ПериодКонМес = «Дата окончания месяца последней транзакции».

Не работает.

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

A: Не вполне понятно как выглядит ваша исходная таблица.
В частности, на первый взгляд должно срабатывать выражение sum(Стоимость) в случае, если вашими измерениями являются «ПериодНачМес» и «ПериодКонМес».

Q: Подскажите, можно как то использовать результат сводной таблицы как внутреннюю таблицу для другой сводной таблицы.

Например на одном листе есть сводная таблица
» Магазин, Группа товара, Товар, ДАТА, и рассчитанный результат если есть на остатках то 1 и если есть продажа то 1. все расчеты идут IF больше 0 то 1.

Соответственно если скрыть дату или товар, то сначала формула считает if полностью по свернутый показатель(по всем товарам/датам) а затем в ячейку вписывает 1.

Можно ли оставить эту сводною таблицу в развернутом виде и ссылаясь на нее использовать рассчитанные показатели в другой сводной таблицы для дальнейших расчетов. Например просуммировать 1 и получить количество дней продаж каждого товара.

Понимаю что можно подготовить данные в скрипте, но это не всегда можно сделать. И требования постоянно меняются, а отчеты растут.

A: Использовать массив данных одного объекта как источник данных для другого … сомнительная идея в принципе.
У клика хороший набор функций, может стоит посмотреть на решение задачи в этом ключе?
Например, количество дней продаж можно посчитать примерно так
Код:
count({<[Продажи Количество]={'>0′}>} distinct Дата)

Q: Есть такая таблица
Клиент , Товар , Цена
Клиент1, Мышка, 100
Клиент1, Монитор , 100
Клиент1, Клавиатура, 100
Клиент2, Клавиатура , 100
Клиент2, Монитор , 100
Клиент 3, Монитор , 100
Клиент 3, Клавиатура, 100

Как найти клиента не купившего не одной мышки ?

A: Оптимальный вариант использовать Set Analysis.

Например, выражение вида
Sum({<[Клиент]={"=SubStringCount(Concat([Товар]),'Мышка')=1"}>}[Цена])

выборка [Клиент]={«=SubStringCount(Concat([Товар]),’Мышка’)=1»} исключает всех клиентов, которые не покупали мышки.

Чтобы было понятнее как получилось такое выражение немного иллюстрации
http://i95.fastpic.ru/big/2017/0628/f2/e7cecb229fdf9b29319d23b0613c7ff2.png

Q: Нужно создать отчет с подсчетом прироста чеков. С учетом работы салонов.
Тк в прошлом году в мае месяце Салон 1 работал только 10 дней. То и сопоставить майские дни за 2017 г нужно с днями за 2016 г, когда салон был открыт.

Наименование салона | Кол-во чеков 2017 | Кол-во чеков 2016 | Прирост чеков
Салон 1 | 1000 | 400 | 150 %
Салон 2 | 1200 | 1300 | — 8%

Верный вариант
Наименование салона | Кол-во чеков 2017 | Кол-во чеков 2016 | Прирост чеков
Салон 1 | 500 | 400 | 25 %
Салон 2 | 1200 | 1300 | — 8%

A: С ходу выражение не составлю, но скорее всего нужно играться с Set Analysis.

Так же, если вы постоянно сравниваете временные отрезки, то стоит обратить внимание на такую штуку как Alt State.
Вкратце:
В приложении будет несколько изолированных «состояний». Выборки в одном состоянии не будут влиять на другие. Т.е. одна таблица строится в одном состоянии, вторая во втором. Либо в одной таблице можно применять выборки из разных состояний.
Тогда пользователь уже сам выбирает какие периоды он хочет сравнивать и делает соответствующие выборки в каждом из состояний. Для облегчения выборок можно настроить ему стандартные кнопочки DateToDate, MonthToMonth, YearToDate и т.п.

Q: подскажите пож. как можно в Qlik осуществить следующее.

1) как сравнить среднее значение(цена) по подгруппе со значениями(цены) в группе, для выявления кто купил по большей цене чем средняя(Avg(Total)) или меньшей.

я написал такую формулу:

if ([цена без ПДВ]>=Aggr (Avg(TOTAL ([цена без ПДВ]),[ID Access]), ‘выше среднего’, ‘ниже среднего’))

но Qlik по ходу не берет в расчет Total, а сравнивает все значения в группе.

A: Не совсем понятно зачем Вы используете Aggr() в данном выражении. Более того, зачем его использовать снаружи Avg(). Таким образом, Вы можете получить более 1го среднего значения цены для каждого допустимого ID Access значения.
И похоже что у Вас неправильный синтаксис: Avg(TOTAL ([цена без ПДВ]) — лишняя круглая скобка перед словом «цена».
Рекомендую либо поменять местами Avg и Aggr — если все же нужно учитывать ID Access значения.
Либо убрать Aggr вовсе.
Также формулу Avg можно прописать следующим образом:
Avg(TOTAL <[ID Access]> [цена без ПДВ]) — это выражение будет Вам возвращать среднюю цену внутри каждого значения [ID Access], при условии что ID Access используется как Измерение в диаграмме/таблице.

Q: Что то я совсем заблудился со сводной и aggr
Мне необходимо рассчитать конверсию покупателей в группе товара по месяцам.
Модель диаграммы:
Измерения:
[TITLE1];[YEARMONTH]
Выражения:
уникальные чеки которые покупали продукцию из группы [TITLE1]
Код:
Count(Distinct IDCHECK)
Все уникальные чеки за период [YEARMONTH]
Код:
aggr(Count(Distinct IDCHECK),YEARMONTH)
конверсия будет равна отношению двух выражений
————————————-
К сожалению
Код:
aggr(Count(Distinct IDCHECK),YEARMONTH)
Выводит общее к-во чеков за период только по одной произвольной группе ????
Что я делаю не так…..

A: Аггр возвращает список, и в таблице он подставит то значение, по которому формируется строка.
С Total не экспериментировали?
Count(Distinct Total IDCHECK)

Найти решение у бизнес-партнера QlikTech (QlikView) в России.

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

FAQ по техническим вопросам о Qlik Sense/Qlik View часть 2

Q: прошу помощи,
у меня нет опыта, поэтому мои вопросы могут показаться неадекватными.
Сценарий -1:
1. есть данные которые нужно визулизировать анализировать и все такое, допустим объем данных 3 гигабайта
2. допустим что для обработки данных объемом 3 гигабайта в оперативной памяти, нужно 8 гигабайт оперативки
3. Потом вдруг понадобилось обработать объем данных 5 гигабайт
Вопрос, как поведет себя qlik sense? он не сможет обрабатывать 5 гигабайт? сможет обрабатывать но начнут притормаживания? qlik sense будет использовать что-то типа файла подкачки на диске?
Сценарий-2:
1. Есть БД под управлением Oracle, в этой БД содержится сотни милионов записей фактов, каждая запись имеет дату.
2. пользователь который не имеет технической квалификации по работе с системой, должен выбирать в протсом интерфейсе период данных за которое он хочет анализировать данные
вопрос — в qlik sense есть возможность натсроить интерфейс/права так чтобы учитывалась период данных при загрузке данных из БД в Qlik

A:З гигабайта в источнике в процессе создания приложения на QLIK-продуктах чудесным образом превращаются в существенно меньший объем. 🙂
Приложения Qlik Sense и Qlikview работают в оперативной памяти, отсюда и требования к ее объему, чтобы все работало 🙂
По доступам, на официальном форуме эта тема довольно долго обсуждалась. Решения есть.

Q: Просмотр профиля

Планируем переход на продукты Qlik. Есть несколько вопросов
« : Ноябрь 01, 2015, 12:02:23 am »
Добрый день
Наша Компании рассматривает варианты перехода на решения от Qlik. Хочу уточнить несколько технических вопросов, важных для нашей инфраструктуры:
1) Существует продукт для трансляции дашбордов в интернет с наших локальных серверов (https)?
Если существует, то по принципу облачных вычислений на серверах Qlik, или на локальных серверах клиента?
2) Каким образом производится администрирование учетных записей пользователей и уровень доступа к данным?
3) Продукты от Qlik работают с источником кубом табличной модели MS SQL Analysis Services (SSAS)?
Буду очень благодарен за помощь и советы

A: Таким продуктом могут быть системы Qlik (как QlikView, так и Qlik Sense).
Для трансляции дэшбордов в интернет с локальных серверов (https) достаточно стандартного функционала QlikView, при этом нет необходимости дополнительных настроек и разработок, поскольку система работает в стандарте HTML5.
Дополнительно к этому существует возможность размещения и в облаке (для Qlik Sense).
Администрирование удаленных учетных записей производится через Qlik Management Console, где определяется уровень доступа к приложениям и элементам самого документа (визуализациям: диаграммам и графикам).
Дополнительно можно использовать Section Access через скрипт в QlikView, который позволяет разграничить права доступа к данным для пользователя или группы пользователей.
Продукты Qlik напрямую не работают с MS SQL Analysis Services, но могут брать данные из модели, на основе которых генерируется табулярная модель.

Q: А это означает, что вы можете начать свое лето за увлекательным изучением Qlik Sense Desktop и его 4 новых функций, включая следующие.
1. Интеллектуальная загрузка данных. Подключение источников данных на основе предложенных вариантов имен поля и значений данных.
2. Интеллектуальное сжатие данных. Миллион или даже миллиард точек данных? Нет проблем с обновленными точечными данными.
3. Печать и экспорт. Простая печать объектов и листов как PDF или изображения.
Но это всего 3 функции? Нет, есть еще одна!

Теперь вы можете обогатить содержимое и аналитику с помощью Qlik DataMarket. Это предложение «данных как услуги» (DaaS) обеспечивает доступ к готовым к использованию внешним источникам данных, таких как данные о погоде и курсе валют, и доступно бесплатно непосредственно в Qlik Sense Desktop.

A: Работа с источниками данных стала проще, не пойму роль диспетчера данных. Измерения и меры все равно прописываются из просмотра.
В целом — отлично!
Data Market куцая в бесплатном варианте, но может и пригодится. Погодных данных по России нет.

Q: Подскажите пожалуйста касательно опции os events log path (рисунок ниже) , запускали макросы и форматировали как по инструкции,какие-то данные загружало,но не совсем понятно как меняется картина в общем.,т.е. какие уникальные данные можно получить от журнала событий ОС .Дает ли это возможность использовать анализ не только для клика .

A: Вопрос не в приложении. Оно лишь загружает данные и отображает их своими объектами.
То же самое можно делать в различных системах. С разным уровнем сложности и своими особенностями.
Анализ событий (логи) в системах сделан более менее похоже. Как правило, в каждом случае есть возможность либо формировать логи в удобный для Qlikview формат либо они уже в текстовом формате.
А если какие-то данные уже из приложений надо выгружать для других систем.
Ну для начала попробуйте самый простой способ:
store * from … into file.csv (txt);
Можно параллельно с сохранением QVD файла делать и текстовую копию, удобно для отладки в работе с небольшими данными.

Q: Добрый день все!Вопрос следующего характера: возможно ли ивенты windows поместить в отчеты от Клика?Если да,то примерно каков ход действий?

A: https://community.qlik.com/docs/DOC-4307#comment-19886
Задача больше не по клике а к сисадмину. Требуется настроить логирование в удобном виде.
Либо конвертация evtx в csv, либо в MSSQL, а дальше «как по маслу» 😉

Q: Имеется очень легкий вопрос, на который, пока не нахожу ответа.

Как вывести в txt-файл лог загрузки «Script Execution Progress»

A: флажок в настройках документа «Создание файла журнала» решит проблему.
Если требуется отдельный лог на каждый запуск, то ставим «галочку» в опции — «Отметка времени в имени файла журнала».
Файлы будут в той же папке, что и приложение.

Q: Коллеги, задался вопросом. А возможно созданное приложение встроить на сайт?
Как я понимаю что бы встроить Qlik View на сайт, необходимо обладать серверной лицензией и собственно сервером. А вот как дела обстоят с Qlik Sense? Вроде где-то читал, что он специально сделан, что бы облегчить функции интеграции с web?

A: Когда запускаешь Qlik Sense, даже не локалке, уже запускается веб сервер.
Проверьте http://localhost:4848/hub

Q: Добрый день коллеги:
1. Создал приложение.
2. Загрузил его в cloud
3. А вот просмотреть его как пользователь не могу, постоянно пишет http://prntscr.com/7gzjin

Вопрос: что делать?
Пробовал со всеми последними версиями браузеров, не работает.

A: Облако еще только-только начинает работать.
Обращайтесь в облачную поддержку.

Q:
Не подскажете как можно подключиться в клике по sftp?

A:
Но каталоги с FTP можно подключить как сетевые диски и, теоретически, использовать как обычно.
Но с учетом того, что быстродействие таких соединений не всегда радует, я бы рекомендовал синхронизацию папок сервера с локальными папками, например через WinSCP.

P.S. Полезные ссылки
http://ramzes.ws/blog/synchronize-ftp
http://lpf.maxsite.com.ua/use-winscp
http://winscp.net/eng/docs/lang:ru

Q: Подскажите, какой аналог DateDiff есть в клике?

A: Есть такой вариант,
DateDiff в составе библиотеки функций для Qlikiview и Qlik Sense
Базовый набор функций даты и времени в документации

Q: В таком случае — синхронизация папок.

Это что такое?)

A: Кстати, встречался с использованием Яндекс-диска для синхронизации между удаленными станциями.
Вот уж чего не следует делать, так использовать такие сервисы в работе.

Q: Добрый вечер. Не подскажите ли возможно в qlikview прослеживать изменения данных, используемых в программе, разными пользователями. В случае, например, если первоначальный файл, используемый в qlikview, корректируют одновременно 2 работника?

A: Можно информацию поподробнее:
— состав QlikView (локальная, сервер, Publisher).

Q: Доброго всем времени суток. достался в наследство qlikview. первоначально машина была в рабгруппе, после того как завели в домен, не работают отчеты у пользователей. Подскажите как победить проблему. http://img.flashtux.org/img13350c011ff4x89482e3e.png

A: Скорей всего, машинка с бесплатным вариантом Qlikview.
Сменили учетную запись, программа решила что ее поставили заново и включила ограничения использования. Почитайте в документации нюансы по поводу использования бесплатной версии.
И судя по всему, вы или до вас уже использовали 3 попытки. Осталась одна попытка и риск вообще не открыть приложения.
В этой ситуации следует либо решить вопрос с лицензиями (т.е. купить), либо создать приложения заново.
Перенос приложений много времени не займет, главное чтобы старое открывалось.
Скрипт копируется через текстовый файл, объекты создаются заново. Если, конечно же, не очень много хитрой графики и дизайна.

Q: Инструменты разработчика Qlikview/Qlik Sense — Notepad++

A: Со временем, даже у начинающего разработчика накапливается набор различных скриптов обработки и подготовки данных. Работать с ними в Qlikview не очень удобно, порой приходится держать открытыми несколько сценариев, компонуя новое приложение.
Можно использовать обычный текстовый редактор и выгрузку в qvs-файлы, но без расцветки работать уже непривычно.
Отличным решением проблемы служит бесплатный редактор Notepad++ и библиотека синтаксиса Qlikview.

Найти решение у бизнес-партнера QlikTech (QlikView) в России.

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

FAQ по техническим вопросам о Qlik Sense/Qlik View часть 1

Q: Вам нужна постоянная авторизация при запуске Qlik Sense?

A: Qlikview и Qlik Sense имеют одинаковое ядро, и должны одинаково выполнять скрипты.
Если Qlik Sense и Qlikview одинаково будут выпадать в ошибку при выполнении скрипта — ошибка в алгоритме, и новая версия Qlik Sense вам не поможет. Если же в QV все отработает без ошибок — проблема в Qlik Sense.

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

Q: Помогите пожалуйста!!!
После обновления Qlik Sense Desktop пытаюсь создать сводную таблицу, через какое-то время после работы вылетает ошибка «Внутренняя ошибка подсистемы».
Сводная таблица переходит в режим обновления с кнопкой «Отменить», и на этом всё. Никакие дальнейшие манипуляции с приложением не дают работать, хоть удаляй и настраивай заново. Сначала это было на старых приложениях (которые настраивал до обновления), настроил новое, тоже самое.

A: У меня подобная ошибка была из-за линейного графика. В свойствах линейного графика, в разделе Дополнения-Обработка данных я снял галку Включить нулевые значения и ошибка пропала.

Скорее всего эта ошибка из-за нулевых, минусовых, пустых значений.

Q: Помогите решить следующий вопрос:
При открытии файла программа выдает сообщение:

Данный файл был опознан как Ваш собственный. Однако необходимо обновить ключ в документе, чтобы отразить изменения в вашей копии Personal Edition с момента создания этого документа.

Документ будет обновлен и загружен без данных. После окончания операции, пожалуйста, СОХРАНИТЕ документ и выполните загрузку данных.

И теперь файл ничего не отображает. Как все вернуть обратно?

A: Если у вас выходит такое сообщение, то это значит, что на этом компьютере уже открывали файл с того компьютера и использовали как минимум одну попытку восстановления.
Т.о. все приложения с того компьютера должны открываться на вашем после сохранения и обновления данных.

Если обновление данных не произошло, но скрипт доступен — проверяйте процесс загрузки данных.
В случае, когда уже нет попыток восстановления а скрипт надо открыть — используйте Qlik Sense.
В последней версии есть и конвертер приложений Qlikview, который преобразует измерения, объекты и выражения в основные объекты нового приложения Qlik Sense.

Q: Порекомендуйте, пожалуйста, как лучшего всего обновить QVS
Сейчас стоит 12.00, планирую накатить 12.10

Вопрос в том, каким образом оставить возможность «откатить» все назад, в случае каких- либо проблем.
QVS развернут на виртуальном Windows сервере.
Бэкапить всю виртуалку или можно ограничиться C:\Program Files\QlikView ?

Может у кого-то был опыт — ключи лицензий нормально наследуются при обновлении?

A: Я обычно такие операцию «репетирую» на копии. А в случае с промышленным решением, которое находится в работе, считаю, это просто обязательным этапом.
Разверните сервер локально и протестируйте обновление на нем.
И проблем не будет.
Насчет отката с версии 12.10 на 12.00 — не уверен.

Q: Возник такой вопрос. Можно ли перенести на сервер, приложение с Personal Edition, созданное на локальной машине, так чтобы все данные сохранились. Если можно, то каким образом?

A: Если у вас сервер с лицензией, то да. А вот в обратную сторону (открыть не своё приложение, если 4 попытки закончились), не получится.

Q: Есть файл qlik который загружает все необходимые параметры из базы конфигурации, формирует скрипт загрузки, загружает данные из различных источников, пишет лог загрузки, и выгружает все таблицы в .qvd.
Так как таких физических мест формирования данных довольно много (>20) то ставить полный qlik особо не хочется и принято решение компилировать .exe и дальше с ним работать. Все было нормально пока не понадобилось контролировать лог загрузки. Дописал функцию экспорта лога в формате .xml в скрипте загрузки в параметрах разрешил чтение и запись в БД. Ну и соответственно в qvw все работает на ура. формируется, пишется и логируется. После компиляции в exe и запуска приложения, в момент начала загрузки появляется сообщение «qmem:///ИмяФайла.qvw contains an incorrect path.» и после нажатия «Ок» предлагается сохранить данный файл в qvw. и уже не важно сохранишь или отменишь сохранение дальше пойдет нормальная загрузка.
————
Может кто подскажет как побороть данное сообщение аля Application.DisplayAlerts = False

A: Привет, а если не exe-шник а просто десктопную версию ставить?

Q: Можно ли в планировщике настроить следующий таск:

Перед обновлений данных приложения сохранить бэкап необновленного приложения в определенное место на диске.

A: Можно написать powershell/bat/vbscript/jscript скрипт, который копирует текущую версию приложения в backup. Затем создать задачу в планировщике Windows на ежедневный запуск данного скрипта.

Q: Помогите решить задачу:
Есть дерево папок в которые систематически добавляются файлы и после обработки удаляются
Пример папок:
..\Регион 1
..\Регион 2
..\Регион 3
и тд.
Но так как не всегда все папки содержат файлы скрипт соответственно выдает ошибку о том что файл для обработки не найден
Как обрабатывать только папки содержащие файлы исключая пустые папки из загрузки?

A: Если у вас Desktop, то меняем параметр на StandardReload=0 в файлике Settings.ini. Находится он C:\Users\<...>\Documents\Qlik\Sense

Если сервер, то QMC-Engines, там заходим в настройки нашего «engine», там Advanced, убираем галочку Standard Mode, перезапускаем службу.

Q: Мы недавно обновили QlikView сервер с 10 версии на 11 и все отчеты стали заметно дольше выгружаться, очень заметно тормозить. Отчеты не переписывались. Может кто сталкивался и знает в чем может быть дело. Или есть какие то общие рекомендации по оптимизации кода. Переписать какие то функции, которые справлялись в 10 версии, но в новой тормозят.

A: посмотри в англоязычном сообществе. Может и обсуждалось.
У меня с переходом на десктопе с 10 на 11 был один глюк. Перестали работать некоторые скрипты на целероне.

Q: Предлагаю обсудить вопрос использования продуктов Qlik.

Мой вариант ответа под номером 5.
Все-таки Qlikview удобнее для написания скрипта и отладки моделей. Вот только не пойму — быстрее от того что привычнее лично мне или действительно скорость разработки в Qlik Sense ниже чем на Qlikview?

A: Интересное мнение. Если 1С-ка файловая- возможно и соглашусь с тем что данные вытянуть быстрее средствами 1С, но в случае с SQL-базами все как раз наоборот. Средствами 1С сделать аналитику уровня QLIK Невозможно!!!

Q: подскажите пожалуйста как можно ускорить работу приложение qlikview. У меня в приложение много записей, тормозит сильно сводная таблица и некоторые диаграммы. Долго перевыбирает данные.

A: На эту тему уже много обсуждений есть в инете.
Суть такая — сводные сами по себе сложные объекты. А если в них еще и выражение с непростым синтаксисом (набором процедур), то при любом обновлении состояния окружения происходит перерасчет всех выражений.
Начинайте оптимизацию с выражений. И для начала сводную просто уберите, «поиграйтесь» на простой таблице. Если возможно, уберите расчеты на уровен скрипта, оставив в приложени простые агрегатные выражения и т.д.
Здесь все индивидуально, может просто планку памяти вставить и все решится?

Q: Есть приложение, в планировщики поставил, чтобы оно обновлялось каждые 15 минут. Мне нужно(если такое возможно), чтобы планировщик не обновлял данные ночью, т.е. например надо, чтобы он загружал данные с 8:00 до 20:00 каждые 15 минут, а остальное время не обновлял данные. Если так можно сделать, подскажите пожалуйста как. Заранее спасибо.

A: Если организовано через планировщик винды то так:
ставите расписание с повтором каждые 15 минут и запуском vbs скрипта, в котором проверяете текущее время. Если оно в нужном промежутке, то запускаете Ваше приложение на выполнение.

Q: Возможно ли из QlikView и QlikSense экспортировать таблицы,переменные,диаграммы в Word с помощью/без помощи Н-принтинга?

A: Доводилось тестировать NPrinting в cвязке с QlikView, можно выгружать и таблицы и диаграммы в Word, причем все интуитивно понятно (набросать шаблон, запланировать обновление, при необходимости задать адресатов. и в нужное время будут у вас отчеты заданного формата с актуальными данными). Без NPrinting сам не пробовал, но думаю макросы помогут, если есть умельцы такой макрос написать, по крайней мере когда-то натыкался на выгрузку в Power Point, а выгрузка в Excel точно освящена на community.
Касательно Qlik Sense утверждать не берусь, c NPrinting думаю все будет без проблем, а вот насчет выгрузки без него ничего утверждать не стану, пока не доводилось сталкиваться с такими задачами.

Q: При обновлении документа в QlikView через таск менеджер, при сохранении документ сваливается с ошибкой, если в этот момент документ открывается, считывается пользователем. Приходится по новой запускать обновление, а это занимает много времени. Может кто знает как это исправить?

A: Сделайте отдельный документ для обновления qvd-файлов.
А обновление приложения с визуализацией доверьте пользователю.

Q: Подскажите, пожалуйста, в чем может быть причина, что не освобождается память, если даже закрыты все документы QlikView и никаких расчетов не происходит. Вижу, что занято 80 % памяти, при этом все держит QlikView.

A: Замечал, что exe-файл после закрытия QlikView может продолжать существовать на сервере или на компьютере в фоновом режиме. Как вариант, можно убить процесс, через диспетчер задач. Но с этим нужно быть внимательным! 🙂

Q: помогите пожалуйста,
как расчитать объем оперативной памяти который нужен для Qlik Sense.
если известен количество строк модели, количество столбцов, и объем одной записи.
к примеру 20 столбцов
40 млн записей
и одна запись весит 2кб

A: Самый лучший способ — эксперимент.
Сгенерируйте тестовую таблицу, увеличивая число записей фиксируйте объем занятой памяти.
Но учтите, что еще будет визуализация, которой тоже надо где-то «крутиться».

Q: Коллеги не могу войти в qlikcloud.com, может кто вкурсе

A: проверь почту.
Была рассылка по поводу изменения процедуры входа в Qlik Sense Cloud.

Q: Подскажите,пожалуйста, есть ли возможность обрезать модель в клик сенсе по текущим выборкам и как это сделать? Нужно оставить данные только за один год

A: Я так понял, вас интересует наличие функции как в Qlikview — «Сокращение данных»?
На таком же уровне, увы — нет.
Но динамическое сокращение данных на основе секции доступа работает и в Qlik SENSE.

Q: Поделитесь опытом, может быть кто-то сталкивался с подобными задачами.
Хотим интегрировать QlikSense и базу данных Oracle, с прикрученной к ней системой полнотекстового поиска Sphinx.
В идеале сценарий следующий:
1. Прямо в веб-приложение Qlik добавляется поисковая панель (поисковая строка и некоторые настраиваемые параметры поиска)
2. Формируем в этой панели поисковый запрос, нажимаем «найти»
3. Sphinx проводит поиск в БД и возвращает IDшники из таблицы фактов обратно в Qlik.
4. Дальше работаем с этой «выборкой» стандартными способами (накладываем фильтры, выбираем периоды и пр.)
Подскажите, есть ли какие-то ограничения со стороны Qlik и его API для такого сценария
Может еще какие-то подводные камни?

A: Вроде бы схема возможна в реализации.
Но я бы все-таки начал со стандартных механизмов фильтрации в Qlikview и Qlik Sense.

Найти решение у бизнес-партнера QlikTech (QlikView) в России.

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

FAQ по справочным материалам Qlik Sense/Qlik View

Q: Часто возникают вопросы, где скачать учебники, документацию и т.п. по Qlikview.

A: Все просто:
1. Читаем руководство «Создание приложений QlikView» на сайте http://solutions.atkcg.ru/manuals
2. Смотрим видео «Qlikview за 8 шагов» на хостинге ютуб.
3. Изучаем help.qlik.com и скачиваем набор документации в pdf-формате.
4. С сайта qlik.com скачиваем дистрибутив (включая учебник с примерами).
5. Устанавливаем и выполняем уроки по учебнику.
Ищем ответы на вопросы в документации, сообществах и если ответ не найден, тогда задаем вопросы.
Хороший набор видеороликов на канале Practical-qlikview от Mark O’Donovan, автора ряда обучающих книг по Qlikview и Qlik Sense
http://www.youtube.com/user/practicalqlik
Рекомендую всем
Сайт автора — http://www.techstuffy.com
Книга «Discovering Qlikview» Tom Meers
Книга «Qlikview 11 Developer’s Guide» B. Harmsen
Книга «Qlikview Scripting» Matt Floyd

Q: Каким образом рассчитать оборачиваемость и показатель GMROI в QV?
Может есть ссылка на справочник по работе с функциями?

A: Описание функций, как обычно, в документации.
Специальных функций под эти цели в Qlikview и Sense нет.
Можете подготовить пример для обсуждения?

В целом, по теме — ничего сложного нет.
Если хромаем в теории, пользуемся поисковиком. Лично мне нравится этот сайт
А дальше уже переводим в формулы, согласно сформированной модели и сверяемся с контрольным примером, заранее и достоверно рассчитанным.

Q: Подскажите, пожалуйста, где можно купить книгу QlikView 11 for Developers ?
И какие еще книги можете посоветовать?

A: Плюс официальный сайт со справочными материалами.
http://help.qlik.com

Q: Кто-то проходил аттестацию по QlikView? Она проходит только на английском языке? Может есть у кого-то примерные вопросы?

A: На qlik-daily на эту тему:
http://blog.atkcg.ru/kak-projti-sertifikaciyu-qlikview-11-developer-sovety-byvalogo/
http://blog.atkcg.ru/sertificiruemsya-na-administratora-qlik-sovety-byvalogo-chast-2/

Q: Давно заметила за собой такой недостаток, что очень некрасиво пишу формулы и непонятно остальным оформляю скрипт загрузки. Сейчас стала стараться писать его правильно, но все равно не до конца понятно и красиво. Есть ли установленный правила оформления скрипта и больших выражений?Где их можно почитать?

A: Под сетами понимаются выражения задающие условия отбора?
Код:
{<[Календарь ПериодNum]={$(=max([Календарь ПериодNum]))}>}
В оформлении никакого криминала не вижу.
Но есть пара замечаний, личных, не базирующихся на каких-либо стандартах.
1. Именование полей, смешанные названия типа [Календарь ПериодNum]. Легче работь с моделью где все поля именуются по одному принципу и желательно на одном языке. Смешанные названия отнимают время на понимание и ввод с клавиатуры.
2. Расчеты в выражениях. Следует помнить, что при каждом изменении выборки происходит перерасчет всех выражений в приложении. Я бы рекомендовал избавиться от выражения:
Код:
((P_RATE)/100)*P_OUT_PORTF_VAL)/1000
переместив эту задачку в скрипт подготовки данных.

Найти решение у бизнес-партнера QlikTech (QlikView) в России.

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

FAQ по скрипту Qlik Sense/Qlik View часть 7

Q: Вот уже 3й день борюсь с QlikView и пытаюсь придумать максимально эффективный метод формирования таблицы.
Итак, изначально есть QVD таблица, имеющая чуть более 600к записей, следующего типа:

triggerid time value
46397 2015-02-20 11:23:21 0
46397 2015-02-20 11:11:22 1
46397 2015-02-12 10:35:21 0
47654 2015-02-20 11:23:48 0
47654 2015-02-20 11:10:48 1
47654 2015-02-15 12:15:48 0

Нужно для каждого значения time, принадлежащего определенному triggerid, найти время следующего события, т.е. минимальное время из больших данного для данного triggerid.

Нужно получить следующую таблицу:

triggerid time value nexttime
46397 2015-02-20 11:23:21 0 null
46397 2015-02-20 11:11:22 1 2015-02-20 11:23:21
46397 2015-02-12 10:35:21 0 2015-02-20 11:11:22
47654 2015-02-20 11:23:48 0 null
47654 2015-02-20 11:10:48 1 2015-02-20 11:23:48
47654 2015-02-15 12:15:48 0 2015-02-20 11:10:48

Такие задачи обычно решаются через join, что я, собственно, и сделал.
Работает отлично, если я в запросе укажу небольшое кол-во triggerid. Однако при большом кол-ве, ОЗУ достаточно быстро забивается до отказа.

Реализовал загрузку следующим образом:
Код:
tmp:
LOAD
triggerid,
time as DownTime
FROM Table_events.qvd (qvd);

Left Join
LOAD
triggerid,
time as UpTime
FROM Table_events.qvd (qvd);

STORE tmp into Temp.qvd (qvd);
DROP Table tmp;

tmp:
LOAD
triggerid,
DownTime,
min(UpTime) as UpTime
from Temp.qvd (qvd)
Where DownTimeA: А если просто отсортировать список по тригерам и времени, и формировать новое поле с условием и peek()
Ведь отсортированный список подразумевает что следующее значение поля time для одного и того же тригера будет ближайшим минимальным из всего ряда значений времени для этого тригера.

Q: Добрый День! Подскажите как преобразовать числовое значение даты в секундах ( linux время) в нормальный формат, есть ли такая функция?

A: Дата — целое число, время — значение десятичной дроби, следовательно. имея метку времени, т.е. число с дробью для получения корректного значения даты требуется округлить в меньшую сторону.
Функция Floor()
Как вариант, можно использовать daystart()

Q: Возникла следующая задачка, не пойму как ее реализовать. Подкиньте, пожалуйста идейку.
У меня есть следующие поля:
— наименование акции
— даты проведения
— продажи в каждую дату
Пример тут https://yadi.sk/i/UKxngxf4ed6Ga

Что бы хотелось:
1. Подсчитать сколько дней длиться каждая акция. Например, 3 или 4 дня.
2. Для каждой акции проставить номер дня акции — 1й день, 2й день, 3й день и т.д. (может быть до 15 дней)
3. И в завершении сделать табличку вида:

Наименование акции 1й день 2й день 3й день и т.д.
Prior 68% 16% 14%
MM-dadak 75% 16% 8%
Лесная сказка 65% 19% 15%

A: Самое простое решение — формирование поля для хранения порядкового номера дня акции в скрипте.
Например:
Код:
tmp1:
LOAD * INLINE [
Акция,Дата,Продажи
Prior,01.02.2014,3000
Prior,02.02.2014,2500
Prior,03.02.2014,1000
MM-dadak,15.04.2014,5000
MM-dadak,16.04.2014,4000
MM-dadak,17.04.2014,2000
MM-dadak,18.04.2014,500
Лесная сказка,20.05.2014,3000
Лесная сказка,21.05.2014,1000
Лесная сказка,22.05.2014,300
];

NoConcatenate
LOAD *,
if(Акция<>Previous(Акция),1,Peek(ДеньАкции)+1) as ДеньАкции
Resident tmp1
Order by Акция, Дата;
DROP Table tmp1;

Смысл в том, что мы упорядочиваем таблицу по акциям и датам и сравнивая текущее и предыдущее значение поля Акции определяем запись для новой акции и группы дат. Проставляя 1 как начало счетчика, далее подсчитываем записи по каждой акции.
Но, если есть разрывы в датах, скажем за 15.04 сразу 17.04 это решение придется модифицировать в зависимости от постановки задачи.

Q: Подскажите, пожалуйста, как сделать следующий расчет в скрипте? Во второй таблице рассчитываю сумму возврата, используя [Цена продажи,руб.] из первой таблицы. Или так нельзя?
Сейчас выдает ошибку при загрузке скрипта. Пример:

Заказы:
LOAD [№ заказа],
[ID товара],
[Кол-во товара в заказе,шт.],
[Цена продажи,руб.],
[Кол-во товара в заказе,шт.]* [Цена продажи,руб.] as [Сумма продажи,руб.]
FROM
[C:\Users\volodina.i\Desktop\QV Mamsy v.1 (янв-фев)\Заказ-товар.xlsx]
(ooxml, embedded labels, table is [Заказ-товар]);

Возвраты:
LOAD [Дата возврата],
[Кол-во возврата,шт.],
[№ заказа],
[Кол-во возврата,шт.]*[Цена продажи,руб.] as [Cумма возврата,руб.]
FROM
[C:\Users\volodina.i\Desktop\QV Mamsy v.1 (янв-фев)\Возвраты.xlsx]
(ooxml, embedded labels, table is Лист1);

A: Скорей всего, в заказах у вас комбинация уникальная [№ заказа], [ID товара].
В возвратах таких комбинаций может быть несколько.
Следовательно, по примеру piton грузим сначала таблицу возвратов, к ней присоединяем таблицу заказов. В итоге получим для каждой строки возврата сведения из строки заказов.

Без обработки в скрипте возможно получить сведения и выражениями, но только если построенная модель данных это позволит сделать.

Q: Есть задача.
Имеем таблицу календарь, и таблицу с данными:
Магазин,
Товар,
цена,
Начало цены,
Конец цены,
Далее надо сделать сводную таблицу(Chart) где строки будут магазин, товар. Столбцы будут дата из календаря(Аналитик хочет видеть цену на каждый день). В пересечении на каждую дату требуется вывести цену где, «Начало цены» больше или равно «Даты» и «Конец цены» меньше или равно «Даты».

Я вижу только решение объединить две таблицы вместе через left join. И при повторной обработки убрать записи через Where. Но таблица получается очень тяжелая. Есть ли другой способ не объединяя таблицы?

A: День добрый, посмотрите в документации описание и примеры по функции intervalmatch().

Q: Только начал использовать продукт, поэтому извините за возможно очевидный вопрос.
Загружаю данные из SQL Server через OLE DB. В одной из таблиц имеется поле с датой.
Эта дата никак не хочется распознаваться, как дата(
Встроенные функции, типа date(), нельзя применять в OLEDB запросе.
Пересохранить данные в файл, забрать оттуда и сконвертировать функцией — мне не нравиться это решение.
Подскажите пожалуйста верное решение.

A: Привет, а предварительную загрузку Load используете?
к примеру:
load date(datefield) as [Дата], …;
select sql from oledb;

Q: Возникла задача, для упрощения создал ограниченный пример. Есть мероприятия, у каждого мероприятия есть дата начала и дата окончания. Есть календарь. В календаре выбирается дата. Вопрос — как отфильтровать в таблице те мероприятия, у которых дата начала меньше выбранной даты, а дата окончания мероприятия больше выбранной даты. Во вложении картинка. Код приложения:

SET ThousandSep=’ ‘;
SET DecimalSep=’,’;
SET MoneyThousandSep=’ ‘;
SET MoneyDecimalSep=’,’;
SET MoneyFormat=’# ##0,00р.;-# ##0,00р.’;
SET TimeFormat=’h:mm:ss’;
SET DateFormat=’DD.MM.YYYY’;
SET TimestampFormat=’DD.MM.YYYY h:mm:ss[.fff]’;
SET MonthNames=’янв;фев;мар;апр;май;июн;июл;авг;сен;окт;ноя;дек’;
SET DayNames=’Пн;Вт;Ср;Чт;Пт;Сб;Вс’;

Календарь:
load * Inline
[Дата, Квартал, Месяц, Год, День, Неделя, День недели];

Let ТекущаяДата = Num(Today(1));
Let ПрошедшийПериод = -10;
Let БудущийПериод = 0;

For i = $(ПрошедшийПериод) to $(БудущийПериод)
Concatenate(Календарь)
Load
Date ($(ТекущаяДата) + $(i)) as Дата,
‘Q’ & Ceil(Month($(ТекущаяДата) + $(i))/3) as Квартал,
Month (Date($(ТекущаяДата) + $(i))) as Месяц,
Year (Date($(ТекущаяДата) + $(i))) as Год,
Day (Date($(ТекущаяДата) + $(i))) as День,
week($(ТекущаяДата) + $(i)) as [Неделя],
weekday($(ТекущаяДата) + $(i)) as [День недели]
AutoGenerate 1
;
Next i;

Мероприятие:
Load * inline [
Дата старта мероприятия, Дата окончания мероприятия, Наименование мероприятия
01.01.2015, 05.01.2015, Мероприятие 1
01.01.2015, 03.01.2015, Мероприятие 2
02.01.2015, 06.01.2015, Мероприятие 3
02.01.2015, 04.01.2015, Мероприятие 4
03.01.2015, 03.01.2015, Мероприятие 5
03.01.2015, 05.01.2015, Мероприятие 6
04.01.2015, 05.01.2015, Мероприятие 7
05.01.2015, 10.01.2015, Мероприятие 8
06.01.2015, 11.01.2015, Мероприятие 9
];

A: Т.е. при выделении даты требуется отобрать записи мероприятий которые действуют на эту дату?
Обратите внимание на функцию IntervalMatch()
возьмите лет десять и сравните создание календарей на этот период в двух вариантах по времени и задействованным ресурсам.

Q: Привет, такой вопрос:

У меня есть поле в excel с таким содержанием:
Код:
http://www.сайт.ru/promo.html?utm_source=YD&utm_medium=cpc&utm_content=prodvizhenie&utm_campaign=obshhie_poisk_spb&yclid=5807162979809803946

Можно ли написать какой нить фильтр который выводил бы значения переменных из ссылки к примеру из utm_source=YD брал значение YD, и так далее по всем переменным в cсылке.

A: Конечно, как ни странно, но это тоже структурированная информация.
? — начало строки параметров
& — разделитель параметров
= — разделитель параметр/значение.
Думаю, для скрипта понадобится написание макроса.

Q: Доброго времени суток. Я только начинаю работать с qlikview и столкнулся с такой задачей которую не получается решить. Не подскажите как можно объединить повторяющиеся фразы в одну строку и сложить по ним расходы? (скриншот ниже).

A: Создайте объект диаграмма с измерением — Фраза и выражением для подсчета сумм
sum([Расход])
Тип диаграммы выбирается на вкладке «Общая» свойств диаграммы.
Выбираем иконку таблицы (нижний ряд, крайняя правая) Прямая таблица.

Q: Как обеспечить загрузку уникальных записей — аналог первичного ключа?

A: Если речь идет о загрузке уникальных значений поля из таблицы то следует использовать DISTINCT, например, код:
Код:
LOAD Distinct %ID INLINE [
%ID, A
0, 0
1, А
1, Б
1, В
2, Г
2, А
2, Б
3, В
3, Г
3, А
4, Б
4, В
4, Г
5, Д
5, Е
6, А
];
создаст таблицу :
%ID
1
2
3
4
5
6

Если идет речь о создании ключевого поля из комбинации полей, то в простых случаях можно использовать обычное сцепление текстовых значений, т.е. конструкция:
Код:
LOAD Distinct %ID&A as [%Key] INLINE

вернет уникальные записи типа 1А,1Б и т.д..

Также можно использовать одну из хэш-функций Qlikview: Hash128, Hash160, Hash256.
В этом случае мы также получим уникальный ключ для комбинации значений записи.
Код:
LOAD Distinct %ID&A as [%Key], Hash128(%ID,A) as %Key128, Hash160(%ID,A) as %Key160,Hash256(%ID,A) as %Key256 INLINE
Дает нам таблицу:
(Извините, но вы не имеете доступа к галерее)

Все вышесказанное справедливо и для Qlik SENSE,
ссылка на описание функций

Q: Хочу связать две таблицы. При этом хочу, чтобы из таблицы Клиенты (CUSTTABLE) выводились бы все значения вне зависимости от наличия для клиента плана (CUSTPLANCUSTOMERS). Пытаюсь сделать соединение, но лезут ошибки. Что делаю не так? Спасибо!

Код: [Выделить]
SQL SELECT КОД_КЛИЕНТА
FROM «MD_DynAXNewArc».dbo.CUSTTABLE;

SQL SELECT КОД_КЛИЕНТА,
AMOUNT as ‘СУММА ПЛАНА’,
TRANSDATE as ‘ДАТА’
FROM «MD_DynAXNewArc».dbo.CUSTPLANCUSTOMERS LEFT JOIN «MD_DynAXNewArc».dbo.CUSTTABLE ON «MD_DynAXNewArc».dbo.CUSTPLANCUSTOMERS.КОД_КЛИЕНТА= «MD_DynAXNewArc».dbo.CUSTTABLE.КОД_КЛИЕНТА;

A: Сталкивался как-то с тем, что отлаженный sql-запрос не работал через ODBC в Qlikview.
Но там было много условий и distinct.
В итоге просто взял нужные таблицы и обработал их уже средствами Клики.
Для начала, я бы проверил SQL — запрос не в Клике.

Q: Для дашборда нужно создать таблицу выбора месяцев.
При загрузке данных с access используется функция month([date]), все работает, только при таком решении месяца отображаются в числовом формате («6″,»7» и т.д)
Хотелось бы отображать в удобном текстовом («янв», «фев» и т.д.)
Когда на вкладке «Номер» выбираю «Дата» и MMM (вложение 114), в списке не происходит группировка и отображается множество записей «июнь»

Каким образом можно решить проблему?

A: Здесь есть пример по формированию календаря.
Если календарь не используется то придется календарные измерения формировать в таблице фактов.
На скриншоте показан скрипт загрузки данных из Access. Сразу бросается в глаза отсутствие операторов предварительной загрузки, load перед select.
В руководстве почитайте главы по загрузке данных.

Q: Помогите пожалуйста решить проблему:
В загружаемом из Excel столбце текст(точнее, цифры) разделены двоеточием. Необходимо, чтоб в модели этого разделителя-двоеточия не было. («11111:222» -> «11111222»). В исходном экселевском файле ничего менять нельзя. Как это сделать?

A: KeepChar(s1 , s2)
Возвращает строку s1 кроме символов, не содержащихся в строке s2.


Найти решение у бизнес-партнера QlikTech (QlikView) в России.

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

FAQ по скрипту Qlik Sense/Qlik View часть 6

Q: Всем доброго времени суток!

Имеется следующая таблица событий:
где ID -идентификатор оборудования, EventId — id события, FromDate — дата начала события, ToDate — дата окончания события, EventValue — состояние оборудования в данный промежуток времени (0 — OK, 1 — Problem).
Таблица отсортирована по ID, EventId (чем больше FromDate, тем больше EventId).

Задача состоит в том, чтобы удалить лишние записи: если несколько событий подряд идут с одним и тем же EventValue, то оставляем минимальный EventId и FromDate, а к нему добавляем максимальный ToDate. В итоге не должно быть одинаковых подряд идущих EventValue.
Фактически, верхние 3 записи из данной таблицы говорят о том, что оборудование находилось в состоянии 0 (ОК) с 07.06.2015 13:58:00 по 07.06.2015 18:09:00.

Например, из таблицы выше нужно получить следующую:
Все это нужно сделать в скрипте загрузок.

П.С. Скорее всего, записи надо как-то грамотно сгруппировать.

A:Надо добавить флаг на смену состояния.
Например, сменилось состояние сенсора — ставим уникальный номер либо EventId.
Затем по нему и группируем.
Код:
temp1:
LOAD * INLINE [
ID, EventID, FromDate, ToDate, EventValue, Flag
80542, 1317759, 07.06.2015 12:25:00, 07.06.2015 12:26:00, 0, 1317759
80542, 1317765, 07.06.2015 12:26:00, 07.06.2015 12:39:00, 0, 1317759
80542, 1317829, 07.06.2015 12:39:00, 07.06.2015 12:40:00, 1, 1317829
80542, 1317841, 07.06.2015 12:40:00, 07.06.2015 12:41:00, 0, 1317841
80542, 1317846, 07.06.2015 12:41:00, 07.06.2015 13:12:00, 0, 1317841
];

temp2:
NoConcatenate load ID,
min(EventID) as EventID,
min(FromDate) as FromDate,
max(ToDate) as ToDate,
Only(EventValue) as EventValue
Resident temp1

Q:Подскажите, каким образом вытащить текущую дату в Qlikview?

A: Можно вот так:
Код:
now()

или:
Код:
today()

Q: Есть следующая задачка:
необходимо контролировать сроки выполнения задач, при этом для более гибкого контроля в систему должен быть заложен сдвиг на 3 рабочих дня относительно планового срока.
Как посчитать разницы между датами в рабочих днях в справке описано, по своей задачке пока ничего не нашёл.

A: Возможно так подойдет: LastWorkDate (Data, 3).

Q: Подскажите как можно организовать загрузку обновленных данных. А именно имеется около 300 000 xml файлов число которых увеличивается ежедневно примерно на три пять тысяч. в каждом файле также примерно около 50 строк, перезагружать данные соответственно занимает очень много времени… привожу пример кода для удобства.
Код:
SET ThousandSep=’ ‘;
SET DecimalSep=’,’;
SET MoneyThousandSep=’ ‘;
SET MoneyDecimalSep=’,’;
SET MoneyFormat=’# ##0,00 ₽;-# ##0,00 ₽’;
SET TimeFormat=’h:mm:ss’;
SET DateFormat=’DD.MM.YYYY’;
SET TimestampFormat=’DD.MM.YYYY h:mm:ss[.fff]’;
SET MonthNames=’январь;февраль;март;апрель;май;июнь;июль;август;сентябрь;октябрь;ноябрь;декабрь’;
SET DayNames=’Пн;Вт;Ср;Чт;Пт;Сб;Вс’;

export:
Load
FileName() as [Имя файла],
[fcsNotificationEF/id] as id,
[fcsNotificationEF/purchaseNumber] as [№ закупки],
mid([fcsNotificationEF/docPublishDate],9,2) as [День публикации закупки],
Month(mid([fcsNotificationEF/docPublishDate],1,10)) as [Месяц публикации закупки],
mid([fcsNotificationEF/docPublishDate],1,4) as [Год публикации закупки],
mid([fcsNotificationEF/docPublishDate],9,2)& ‘ ‘ & Month (mid([fcsNotificationEF/docPublishDate],1,10))& ‘ ‘ &mid([fcsNotificationEF/docPublishDate],1,4) as [Дата публикации закупки],
ceil(Month(mid([fcsNotificationEF/docPublishDate],1,10))/3)&’ квартал’ as Квартал,
[fcsNotificationEF/href] as [Ссылка на ООС],
[fcsNotificationEF/purchaseObjectInfo] as [Предмет закупки],
[fcsNotificationEF/lot/maxPrice] as [НМЦК],
[fcsNotificationEF/lot/financeSource] as [Источник финансирования],
[fcsNotificationEF/lot/customerRequirements/customerRequirement/deliveryTerm] as [Сроки поставки товара],
[fcsNotificationEF/lot/customerRequirements/customerRequirement/applicationGuarantee/amount] as [Обеспечение заявки],
[fcsNotificationEF/lot/customerRequirements/customerRequirement/contractGuarantee/amount] as [Обеспечение контракта],
[fcsNotificationEF/lot/customerRequirements/customerRequirement/contractGuarantee/part] as [Процент на обеспечение исполнения контракта],
[fcsNotificationEF/lot/customerRequirements/customerRequirement/applicationGuarantee/part] as [Процент на обеспечение заявки],
[fcsNotificationEF/lot/customerRequirements/customerRequirement/kladrPlaces/kladrPlace/kladr/fullName]&’ ‘&[fcsNotificationEF/lot/customerRequirements/customerRequirement/kladrPlaces/kladrPlace/deliveryPlace] as [Место доставки товара, выполнения работ],
mid([fcsNotificationEF/procedureInfo/bidding/date],9,2)& ‘ ‘ & Month (mid([fcsNotificationEF/procedureInfo/bidding/date],1,10))& ‘ ‘ &mid([fcsNotificationEF/procedureInfo/bidding/date],1,4) as [Дата Аукциона/Определения победителя],
mid([fcsNotificationEF/procedureInfo/collecting/startDate],9,2)& ‘ ‘ & Month (mid([fcsNotificationEF/procedureInfo/collecting/startDate],1,10))& ‘ ‘ &mid([fcsNotificationEF/procedureInfo/collecting/startDate],1,4) as [Дата начала подачи документов],
[fcsNotificationEF/procedureInfo/collecting/place]&’ ‘&[fcsNotificationEF/ETP/name]&’ по адресу ‘&[fcsNotificationEF/ETP/url] as [Место подачи заявки],
[fcsNotificationEF/procedureInfo/collecting/order] as [Порядок подачи заявок],
mid([fcsNotificationEF/procedureInfo/collecting/endDate],9,2)& ‘ ‘ & Month (mid([fcsNotificationEF/procedureInfo/collecting/endDate],1,10))& ‘ ‘ &mid([fcsNotificationEF/procedureInfo/collecting/endDate],1,4) as [Дата окончания подачи документов],
[fcsNotificationEF/ETP/name] as [Площадка],
[fcsNotificationEF/ETP/url] as [Адрес площадки],
[fcsNotificationEF/placingWay/name] as [Тип закупки],
Replace([fcsNotificationEF/lot/purchaseObjects/purchaseObject/OKPD/code],’.’,’_’) as [ОКПД],
[fcsNotificationEF/lot/purchaseObjects/purchaseObject/OKPD/name] as [Наименование ОКПД],
[fcsNotificationEF/purchaseResponsible/responsibleInfo/contactEMail] as [EMail заказчика],
[fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPhone] as [Телефон заказчика],
[fcsNotificationEF/purchaseResponsible/responsibleInfo/contactFax] as [Факс заказчика],
[fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPerson/lastName] as [Фамилия ОЛ],
[fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPerson/firstName] as [Имя ОЛ],
[fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPerson/middleName] as [Отчество ЛО],
[fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPerson/lastName]&’ ‘&[fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPerson/firstName]&’ ‘&[fcsNotificationEF/purchaseResponsible/responsibleInfo/contactPerson/middleName] as [ФИО ответственного лица заказчика],
[fcsNotificationEF/purchaseResponsible/responsibleOrg/fullName] as [Заказчик],
[fcsNotificationEF/purchaseResponsible/responsibleOrg/postAddress] as [Почтовый адрес],
[fcsNotificationEF/purchaseResponsible/responsibleOrg/factAddress] as [Фактический адрес],
trim(subfield([fcsNotificationEF/purchaseResponsible/responsibleOrg/factAddress],’,’,3)) as [Область],
trim(subfield([fcsNotificationEF/purchaseResponsible/responsibleOrg/factAddress],’,’,4)) as [Город],
[fcsNotificationEF/purchaseResponsible/responsibleOrg/INN] as [ИНН заказчика],
[fcsNotificationEF/purchaseResponsible/responsibleOrg/KPP] as [КПП заказчика],
%Key_export_2C54E0F74D336CCA // Key for this table: export
FROM [C:\Users\padij_000\Desktop\123\fcsNotificationEA44*.xml] (XmlSimple, Table is [export]);
// End of [аукцион.xml] LOAD statements

Так и не понял как это сделать с помощью Инкрементальной загрузки.

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

A: для начала, ответ на второй вопрос.
Дополнительное поле формируется в операторе Load.
Например
Код:
temp1:
LOAD F1, F2, F1+F2 as F3 INLINE [
F1, F2
1, 2
4, 3
5, 6
3, 7
];
В исходной таблице только два поля F1 и F2, третье поле формируется в операторе load, в данном случае сумме двух полей F1,F2 назначено новое имя F3.

Q: Подскажите как можно в qlikview взять определенный текст из строки?
Нужно из адресов типа » Российская Федерация, 630007, Новосибирская обл, Новосибирск г, Колыванская, 104, — » взять только область в данном случае это «Новосибирская обл»

A: Как и в любом другом языке программирования в Qlikview & Sense присутствует целый набор функций для работы с текстовыми значениями.

Во вложении приведен вариант решения задачи (формула в нижней строке).
Описания функций можно найти по ссылке выше.
Если же адреса в этом поле имеют разные форматы, т.е. не последовательность «Страна, Индекс, Область, ..» а например — «Индекс, область,..», то придется проанализировать все варианты и прописывать условия на определение формата в котором записан адрес и соответствующее выражения для каждого случая.
В данном варианте мы:
вырезаем функций MID() из строки Adr,
начиная с позиции после второй запятой Index(Adr,’,’,2)+1,
подстроку между 2 и 3 запятыми Index(Adr,’,’,3)-Index(Adr,’,’,2)-1,
и результат дополнительно очищаем от крайних пробелов функцией TRIM()
Код:
trim(
mid(Adr,
Index(Adr,’,’,2)+1,
Index(Adr,’,’,3)-Index(Adr,’,’,2)-1
))

Q: Изначально имеется таблица событий: начало события, конец события …(№ оборудования — ключ, дата (дд.мм.гггг) — ключ).

К ней, с помощью left join сначала прицепляю одну таблицу по одному ключу, потом прицепляю еще 2 таблицы по двум другим (один появился только после предыдущей операции): по № и по дате (дд.мм.гггг).
Проблема в том, что если в изначальной таблице было несколько событий за Date для данного номера, то прицепляет он только одну запись:
Так то оно понятно, что так и должно быть. Но как можно эту проблему обойти?

На всякий случай код приложил.
Код:
Events:
LOAD hostid,
<...>,
Date(curtime) as Date
FROM [D:\QlickView\Data\Event.qvd] (qvd);

Left Join
LOAD hostid,
ATM,
<...>
FROM [D:\QlickView\Data\ATM_info.qvd] (qvd);

Left Join
LOAD
ATM,
Date,
TT_Created,
TT_Closed
Resident TT;
DROP Table TT;

Left Join
LOAD ATM,
Timestamp(NotEnabledFrom) as NotEnabledFrom,
Timestamp(NotEnabledTo) as NotEnabledTo,
Date(NotEnabledFrom) as Date
FROM [D:\QlickView\Data\NotEnabled.qvd] (qvd);
http://i024.radikal.ru/1504/64/40d2eddca2be.png
http://s017.radikal.ru/i437/1504/35/bb715dc4b652.png
A:
Не совсем уверен, что правильно понял проблему.
Вроде бы если в ТТ есть записи для ATM и Date , то TT_Created и TT_Closed должны быть заполнены значениями для одинаковых ATM и Date.
В качестве совета, попробуйте после каждого объединения выводить в промежуточный QVD, в целях отладки.
И дальнейшие связи делать уже с промежуточной таблицей,
т.е. примерно в такой последовательности.
1:
load
let join load
store into qvd
drop table 1;
load
left join
ну, и так далее.
Посмотрите результаты на каждом этапе, может что обнаружится неожиданное.

Q: Есть список где показывается 0 и 1, как их переименовать в списке, что бы показывалось. Да и Нет.

A: В списке есть возможность выбрать <выражение> вместо поля в самом низу.
И там уже написать что-то вроде : if(pole=1, ‘Да’, ‘Нет’)

Или, возможно, с точки зрения «красивости» и всякого прочего дизайна выгоднее создать 2 текстовых объекта «Да» / «Нет» и юзать всё многообразие настроек.
в них выбрать действие/выбор в поле/…

Q: Подскажите пожалуйста, почему не работает Order by?

Код:
// Загружаем данные
Товарные_запасы:
LOAD Товар,
Дата,
[Прогноз продаж],
[Товарные запасы]
FROM
[C:\Товарные_запасы.xlsx]
(ooxml, embedded labels, table is Лист3)
Order by Дата;

В таком же примере. где используется resident ____Таблица_____ Order by работает.
В чем может быть причина.

A: order by работает только с load resident.
Сначала грузим с файла, затем в памяти
noconcatenate
load
tra lalal

resident …
order by

Q: Уважаемы, подскажите пожалуйста, а как удалить Вкладки внутри скрипта?

A: В верхней панели:
Вкладка/удалить

Q: Как сделать перебор строк в таблице?

A: Перебор строк возможен, но не всегда это правильное решение, т.к. исполнение циклов занимает намного больше времени, чем SQL-запросы. Но встречаются ситуации, когда перебор является единственным разумным решением, например в теме про формирование переменных из таблицы
Код:
Variables:
LOAD * FROM
$(QVD_Path)Variables.qvd (qvd);

FOR i=0 to noofrows(‘Variables’)-1
LET var_name= peek(‘Variable_name’,i,’Variables’);
LET $(var_name) = peek(‘Variable_value’,i,’Variables’);
NEXT i
Использование переменных необходимо, т.к. мы не можем в Qlikview в рамках скрипта встать на какую-либо запись в загруженную таблицу,но мы можем обращаться к записям, по номеру строки и сохранять данные в переменные для дальнейшего использования.

Q: Доброго времени суток!

Похожую задачу я уже как-то озвучивал на форуме. Сейчас условие немного другое.
Имеется таблица событий следующего типа
time — начало события,
nexttime — конец события
diff — интервал в формате hh:mm:ss
start_dw -первый день недели рабочего времени
end_dw — последний день рабочего времни
start_time — начало раб.времени
end_time — конец раб. времени

Нужно посчитать разницу между time и nexttime в рабочее время.
Когда time и nexttime — один день, это легко, а вот если это разные дни? У меня даже идей нет…

A: Только сейчас кстати заметил, что раб день не нормирован.
Тогда меняем
networkdays(Time,NextTime)/3
на
networkdays(Time,NextTime)* (end_time-start_time)

Q: Каким образом загружать в скрипте только новую таблицу?

A: Модель данных формируется в процессе выполнения скрипта, связи строятся на последнем этапе после загрузки всех таблиц и добавить новую таблицу в уже существующую модель без повторного запуска скрипта невозможно.
Или вопрос касается загрузки измененных данных из источника, без повторной загрузки всех записей?

Q: Добрый день, ни как не могу стандартными средствами решить следующую задачку.
В сводную таблицу выводятся следующие данные, других просто нет. Получающийся результат на скриншоте ниже.

А мне нужно, чтобы получалось так.

Т.е. даты с 01.01.2015 по 11.01.2015 ставятся автоматически(так как между ними нет даты со значением),а вот значение во всех датах ставятся из даты 01.01.2015.

Копаю в сторону intervalmatch() но пока ни как не могу применить, что бы получился такой же результат.

Бужу благодарен любому совету, так как уже голову сломал.

A:Интервал тут не при чем.
Вам необходимо сформировать записи на даты между имеющимися значениями.
Смотрите по аналогии применение peek() в формировании записей на выходные дни для курсов валют


Найти решение у бизнес-партнера QlikTech (QlikView) в России.

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

73 queries in 0,319 seconds