Помогите написать выражение для построения графика в Qlikview

Автор Дмитрий, 26 февраля 2015, 02:36:47

« назад - далее »

Дмитрий

Бомба...Правда пока не совсем понятен синтаксис и принцип работы некоторых функций, но буду учить мат.часть :)


admin

Спрашивайте. Поэтапно разберем, заодно может кто другое решение предложит.

Дмитрий

Благодарю.

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

set vB=RangeSum(Above(count(DISTINCT {<PERIODNum={'201401'},STATUS={"NEW"},STATUS_ALL={'1'}>} COMPANY),0,RowNo()))

Как я понимаю:

count посчитала уникальные значения компаний, удовлетворяющих условиям:
     - значение PERIODNum = 201401
     - значение STATUS = NEW
     - значение STATUS_ALL=1 (т.к. у компании есть только один вид статуса - "NEW")

А вот дальше наступает либо непонимание, либо недопонимание :)

- Above, согласно теории, возвращает значения над n-1 строками (так как считаем от текущей строки и далее RowNo, который возвращает номер строки). Т.е. таким образом мы проверяем все возможные статусы одной компании?
- А Rangesum получается сложил все уникальные диапазоны(компании), которые отвечали вышеперечисленным условиям?

И еще один момент, который не очень понял из пособия, что именно означает знак $ (например перед переменной)?

admin

Формулы написаны для таблицы.
Таблица строится по измерениям, и каждое выражение строится по этим измерениям.
Т.к. в фильтре уже указан период, то это выражение для других строк не будет давать результата.
Для того, чтобы заполнить поле по всем строкам используем связку RangeSum(Above(),0,Rowno())
Создайте таблицу с Type , Period и создайте три выражения:
RangeSum(Above(count(DISTINCT {<PERIODNum={'201401'},STATUS={"NEW"},STATUS_ALL={'1'}>} COMPANY),0,RowNo()))
Above(count(DISTINCT {<PERIODNum={'201401'},STATUS={"NEW"},STATUS_ALL={'1'}>} COMPANY),0,RowNo())
count(DISTINCT {<PERIODNum={'201401'},STATUS={"NEW"},STATUS_ALL={'1'}>} COMPANY)

admin

#19
По поводу знака доллара $
Проще говоря - так надо :). Хочешь использовать переменную - ставь $(ИмяПеременной). Работает везде, в скрипте и в выражениях.( в Qlikview и Qlik Sense)

Chernov

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

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

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

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

значение C - рассчитать на основе данных из таблиц E и D.

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

Дмитрий

Ого...С моим знанием написания скрипта - буду анализировать неделю :) Спасибо за участие!



Дмитрий

Всем здравствовать.

Спасибо за помощь - задача решена.

Но возникла очередная задача на основе все той же таблицы. Причем,добавился  еще один столбец (назовем его "Universe"), где проставлен числовой показатель (варьируется от 0 до n, может повторятся ).

Теперь необходимо подсчитать количество уникальных компаний ТОЛЬКО со статусом "CLOSED" и ТОЛЬКО если хотя бы один показатель "Universe" ,у этой компании, не равен нулю.

В очередной раз зашел в тупик :) Как посчитать все компании со статусом "CLOSED"  понимаю, а вот как сформировать условие еще  и с хотя бы одним ненулевым "Universe''  - увы...

Надеюсь на помощь знатоков.

Заранее благодарен.

admin

#23
Интересная у Вас работа, :) люблю головоломки.
Но с решением чуть попозже, ОК.
Может кто-то из читателей форума подключится?

bibis

#24
Я видимо что-то не понимаю, но в чем проблема использовать
if (Sum(Univers)>0, ...... )  ?

Т.е. если там неотрицательные числа, то логично, что 0 будет только если там одни нули.
Если  числа могут быть отрицательными, то:
if (Sum(fabs(Univers))>0, ...... )

Дмитрий

#25
Знатоки, извините, но я снова к вам за помощью...

Никак не могу разобраться в следующей проблеме :

Есть таблица (пример прилагаю). Соответственно мне необходимо посчитать сколько в месяце и канале сбыта существует компаний, у которых:
1) Только статус "CLOSED" и хотя бы один из показателей Universe больше ноля.
2) Одновременно есть как статус "CLOSED" так и "DUMMY"(произвольное количество и соотношение) и хотя бы у одного "CLOSED" Universe больше ноля.

Соответственно в моем примере должно получиться 3 компании в каждый из месяцев (компании 1,3 и 5).

Возможно ли это решить каким либо выражением при построении диаграммы по измерениям [Country Chanel] и [Period] ?

Как обычно  - буду признателен, если научите уму-разуму.

P.S. Прошу прощения, если не совсем внятно описал задачу...

admin

День добрый.
Какие варианты решений рассматривали?

Дмитрий

Изначально ввел переменную vX = count(DISTINCT {<[Company Name ]>} [Shop Changes]), чтобы подсчитать количество уникальных статусов у компании.

Затем построил диаграмму, по измерениям [Company Name] и Period, с выражением:

IF ($(vX)=1,count(distinct{<[Shop Changes]={'CLOSED'},Universe-={'0'}>} [Company Name]),0)

Естественно , что посчитались только компании где все статусы "CLOSED" и хотя бы один из них с Universe больше 0.

А вот как просчитать варианты, где среди "CLOSED" попадаются еще и "DUMMY", я понять не могу :(

Плюс также вопрос, когда к "CLOSED"  и "DUMMY" добавляются другие статусы( "ACTIVE" например)...

bibis

Цитата: Дмитрий от 21 мая  2015, 09:55:15  

А вот как просчитать варианты, где среди "CLOSED" попадаются еще и "DUMMY", я понять не могу :(

Плюс также вопрос, когда к "CLOSED"  и "DUMMY" добавляются другие статусы( "ACTIVE" например)...

Думается функции      substringcount( concat( [distinct] ....
вас спасет, но уверен, что этот подход не оптимален.

Дмитрий

Цитата: bibis от 21 мая  2015, 10:44:45  
Цитата: Дмитрий от 21 мая  2015, 09:55:15  

А вот как просчитать варианты, где среди "CLOSED" попадаются еще и "DUMMY", я понять не могу :(

Плюс также вопрос, когда к "CLOSED"  и "DUMMY" добавляются другие статусы( "ACTIVE" например)...

Думается функции      substringcount( concat( [distinct] ....
вас спасет, но уверен, что этот подход не оптимален.


Супер, с помощью  concat удалось решить проблему, по крайней мере частично. Буду дальше экспериментировать.

Спасибо!

Яндекс.Метрика