Перенос выражения в загрузочный скрипт (qlikview)

Автор Евгений, 06 июля 2015, 05:47:23

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

Евгений

Здравствуйте, есть выражение такого типа:

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 соответственно... ну и теперь возможно найти макс. среди всех, но... это будет константа.
Вопрос-проблема: возможно ли вообще получить такие  "макс. тотал", чтобы оно(и) реагировали на выборку?!

admin

Добрый день.
Конечно, можно считать "макс тотал".
Небольшой фрагмент данных для опытов по задаче был бы весьма кстати.

Евгений

Вот такой макет данных (см. вложение).
Как есть:
В результате у меня получилась таблица(tab_03), где у каждого владельца -  свое количество чеков.
max(Count_DistD_ID) = 4.

Проблема-хотелка:
А если выбрать только один магазин( например, Dprt_ID = 9), то тогда
max(Count_DistD_ID) должно стать = 3.
т.е. как получать такое макс., реагирующее на срезы.

p.s. Спасибо большое за внимание к моему вопросу!

admin

#3
ОК,
Исходные данные:

test:
LOAD * INLINE [
    D_ID, DC_Number, Prod_ID, Dprt_ID, Summa
    177, 555, 1, 9, 100
    122, 555, 2, 9, 200
    133, 555, 3, 9, 110
    134, 777, 1, 9, 100
    125, 777, 2, 9, 110
    107, 888, 3, 3, 200
    123, 888, 1, 3, 100
    321, 888, 2, 3, 200
    543, 888, 3, 3, 100
];


Строим таблицу,
Измерение - DC_Number,
Выражение - Count (Distinct D_ID)

Что мы хотим видеть дальше?

admin

Выражение для отображения максимального значения (текстовый объект)

=max(Aggr(count(DISTINCT D_ID),DC_Number))

Евгений

#5
Добрый день!
Как , для начало, на основе полученной таблицы (test) рассчитать  в скрипте Выражение - count(DISTINCT D_ID),DC_Number)

что-то вроде этого:
left join(test)
load
DC_NUMBER,
count(distinct D_ID) as d_count
Resident test
Group by  DC_NUMBER;


Получается d_count = 9
Но так я получаю кол-во только по DC_NUMBER ... т.е. по одному измерению, а как учесть остальные?! Т.е. если выборку не ограничивать - 9 есть хорошо, но если выбрать,например, один из двух Dprt_ID, то как отразить это в d_count ?!

admin

Зачем в скрипте то?

Что и в каком виде мы хотим отобразить?
Если построим таблицу:
Измерение - DC_Number,
Выражение - Count (Distinct D_ID)
То получим таблицу как на вашем снимке таблицы.
Что мы хотим отобразить дальше?
Текстом написать кто в топах, или просто вывести максимальное значение?

Евгений

Все вычисления мне нужно в скрипте, чтобы получилось вот акая идея:

if( count(DISTINCT D_ID) > 0.6* max ( total Aggr(count(DISTINCT D_ID), Владелец) ) , 'nice','bad' ) as Result

P.S. (До этого я в прямой таблице на основе выражения и условий так и рассчитывал : в результате получился столбик с различными nice и bad в соответствии владельцам. Посчитать же их нельзя отдельно в текст. объекте, что-то вроде nice - 5шт., а bad - 17 шт.)  вот и решил перенести вычисления в скрипт, ну и тем более что они громоздкие.

Так вот, в идеале : нужно получать максимальное кол-во по каждому измерению, Prod_ID, Dprt_ID - тоже измерения.

Для начало, как просто рассчитать кол-во чеков (D_ID) по каждому измерению в скрипте.



admin

Т.е. вы хотите получить количество плохих (менее 40% от максимума по чекам) и хороших (более 60% от максимума по чекам) держателей карт?

Евгений

Цитата: admin от 08 июля  2015, 06:02:13  
Т.е. вы хотите получить количество плохих (менее 40% от максимума по чекам) и хороших (более 60% от максимума по чекам) держателей карт?


Ну, в ообщем, да!  И хочу сделать этот расчет в скрипте!

admin

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

Евгений

#11
Спасибо Вам огромное за внимание! Я решил отказаться от данной затеи- переноса в скрипт.  Думал, так будет быстрее вычислять... Подсчет чеков для каждого измерения все так усложняет) Выражениями, полагаю, обойдусь! Спасибо еще раз!

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