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!

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

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

66 queries in 0,364 seconds