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!

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

64 queries in 0,512 seconds