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

Q: Очередной тупик (видимо и меня можно так назвать 🙂 )

В таблице след.поля: PERIOD,[Country channel],[Company name / Имя компании],[SHOP CHANGES], Universe

Есть выражение в диаграмме (измерения : [Country channel],[PERIOD],[Company name/ Имя компании]):

=IF(concat(distinct{<[Company name / Имя компании]>}[SHOP CHANGES])=’NEW’,IF(sum(Universe)<>‘0’, count(distinct [Company name / Имя компании]),0),0) + IF(concat(distinct{<[Company name / Имя компании]>}[SHOP CHANGES])=’CLOSEDNEW’,IF((sum(Universe)<>‘0’), count(distinct [Company name / Имя компании]),0),0)
Как итог выдает след.график — см.вложение.
Хочу получить график где значения каждого месяца будут идти с нарастающим итогом (т.е. 201501 -2, 201502 -6, 201503- 9.
Предполагаю, что решение связано с Rangesum(Above(… , но как ни стараюсь его применить — результат далек от правильного 🙁
В очередной раз буду признателен за любое содействие.

A:ну не так просто разобраться в работе модели данных и выражении, даже если оно будет написано так:
Код:
=IF( concat(distinct{<[Company name / Имя компании]>}[SHOP CHANGES])=’NEW’,
IF(sum(Universe)<>‘0’,
count(distinct [Company name / Имя компании]),
0),
0)+
IF(concat(distinct{<[Company name / Имя компании]>}[SHOP CHANGES])=’CLOSEDNEW’,
IF((sum(Universe)<>‘0’),
count(distinct [Company name / Имя компании]),
0),
0)
BIbis правильно отметил, что вариант не будет оптимальным.
Думаю, надо смотреть в сторону работу с анализом множеств и расширенного агрегирования функцией aggr().

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

A: Как вариант, эту одну таблицу «не связывать» с другими таблицами — назвать поля таблицы по другому.
А, фильтры связать через триггер «Select in Field».

Q: Делаю АВС-анализ по категориям по примеру http://biadvice.ru/analiz-prodazh/primenenie-abc-analiza-na-praktike-abc-analiz-v-qlikview.html.
Подсчитала в таблице долю каждой категории, затем долю накопительным итогом (через полное накопление как написано). Теперь хочу, чтобы у меня в отдельном столбце проставлялась группа А, В или С в зависимости от накопленной доли.

Выражение «if([Доля (накопит.)]<=0.8, 'А', if([Доля (накопит.)]<=0.95,'В','С'))" не работает, в столбце везде выдается группа "С". Помогите, пожалуйста, с реализацией задумки. A: Проверьте какое значение в поле, что сравнивается с 0.8 и т.д.
Используйте другую схему вычисления накопительных значений, функциями а не установкой флажка.
Например :
Код:
Rangesum([% от итога],
above([% Накопит.]))

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

A: Можно посмотреть в справке
«Разрешить условный» , как и «Условный» для выражений предназначено для управления отображением измерения/выражения, в зависимости от значений переменной.
Например как в демопримере на вкладке reports.

Q: В Qlikview загружаются данные вида:

Дата продажи ФИО НомерЧека СуммаЧека
01.01.2015 Петров 123456 1000
01.01.2015 Сидоров 123457 9999
02.01.2015 Иванов 123458 8888
02.01.2015 Петров 123459 1500
02.01.2015 Сидоров 123460 450

По этим данным строится Прямая таблица вида:
ФИО Кол-во чеков Общая сумма
Иванов 1 8888
Петров 2 2500
Сидоров 2 10449

Тут ФИО — Измерение, Кол-во чеков — Count(НомерЧека), Общая сумма — sum(СуммаЧека)

Есть отбор по периоду, допустим сейчас выбран период с 01.01.2015 по 03.01.2015.
Теперь нужно на эту таблицу наложить фильтр, который оставит в таблице только тех людей у которых общая сумма покупок больше допустим 10000 т.р. В нашем примере должен остаться Сидоров.

A: 1. Например, при загрузке данных наложить фильтр: WHERE [Общая сумма] > 10000
2. Или сделать переменную «MoreTop» и выводить данные, которые больше этой переменной:
=if ([Общая сумма] > $(MoreTop), [Общая сумма])

Q: Помогите пожалуйста со следующим вопросом.

1. Есть магазины с товарами. В некоторых магазинах есть излишек некоторых товаров.
То есть, в магазин 127254 можно переместить такие товары со следующих магазинов — вложение 01.png.
2. Если выбрать конкретные магазины, то будет показано перемещение между этими магазинами, таких-то товаров (товаром будет меньше чем в первом примере) — вложение 02.png.
Вопрос в следующем, если выбрано перемещение между конкретными магазинами, как сделать чтобы показать весь перечень товаров, как первом примере. И было бы видно, что с других магазинов переместить другой товар, который нужен выбранным магазинам, нет возможности — вложение 03.png

A:Попробуйте в выражении анализа множеств исключить влияние фильтра по необходимым полям.
Например, sum({<Магазин=>}Количество)
Модель данных помогла бы сориентироваться лучше.

Q: Вопрос наверное мегапростой, но пока не нашел решения.
Как после применения фильтра в одном из полей добиться того, чтобы на всех остальных зависимых полях отфильтрованные значения исчезали, а список значений поля автоматически изменялся в размерах (как это происходит для таблиц)?
Нашел как просто скрывать отфильтрованные элементы, но это смотрится не очень профессионально, да и полоса прокрутки не отображает реальный объем значений

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

Q: Возник такой вопрос: как применить функцию AGGR для всех записей измерения?
Есть поле АТМ и EventDiff. Но не для всех АТМ есть EventDiff.
Вот мне нужно выбрать те, для которых его нет (тоже самое, что сумма равна 0, т.к. нулевых значений нет)

Следующий код результатов не выдает, т.к. не находит таких результатов. Можно ли как-нибудь aggr применить для всех записей? Или как-то по-другому решить задачу.

Код:
if(aggr((sum({=$(vFromDate)<$(vToDate)'}>} EventDiff)),ATM)=0,ATM)
Так тоже не получается…
Код:
=if(IsNull(EventDiff),ATM)

A: Не совсем понятно, в каком виде вы хотите увидеть результат и с каких данных.
Для простого примера:
Код:
LOAD * INLINE [
ATM, diff
00002, 0:01:20
00003, 1:00:00
00004,
00005, 0
00006, 0:02:10
00007, 0:03:11
00008
00009, 0
];
Простое выражение в списке
Код:
=if(diff=0 or diff=»,ATM)
даст «нулевые» АТМ.

Q: Есть задачка определить кол-во изделий на гарантии по состоянию на сегодня («сегодня» каждый день, естественно, изменяется).
Для этого есть таблица с номерами изделий, датой ввода в эксплуатацию и датой снятия с гарантии.

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

Q: Ни где не могу найти, но говорят, что есть такая штука, которая считает количество операций, к примеру:
X=Какая-тоШтука(vA-vB-vB-vB), тут возможно продолжение в виде условия.
X=3 (так как три раза вычли)

Могу очень, сильно ошибаться… или не точно изъясняться…

A:
len(
KeepChar( ваша строка, ‘+-/*&’)
)

Q: Как в получившемся значении убрать округление до целых.
К примеру в выражении получилось, 5,2 а в таблице показывает как 5?
Пробую использовать num(), но как-то не помогает, чувствую что-то делаю не так…

Если возможно, можно пример.

A: Num используем когда нам надо гарантировать числовое представление.
А ваша задача — округление. Обычно это функция round.
В Qlikview и Sense это функция из трех параметров
Round(x[, step[, offset]])

round(3,45,’0.01′) на выходе дает требуемое

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

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

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

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

58 queries in 0,221 seconds