Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Февраль 24, 2018, 12:55:17 am

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

Оффлайн Евгений

  • Новичок
  • *
  • Сообщений: 25
  • Рейтинг: +2/-0
    • Просмотр профиля
Здравствуйте, есть выражение такого типа:

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

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1031
  • Страна: ru
  • Рейтинг: +107/-0
    • Просмотр профиля
Добрый день.
Конечно, можно считать "макс тотал".
Небольшой фрагмент данных для опытов по задаче был бы весьма кстати.

Оффлайн Евгений

  • Новичок
  • *
  • Сообщений: 25
  • Рейтинг: +2/-0
    • Просмотр профиля
Вот такой макет данных (см. вложение).
Как есть:
В результате у меня получилась таблица(tab_03), где у каждого владельца -  свое количество чеков.
max(Count_DistD_ID) = 4.

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

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

Неофициальный форум пользователей QlikView & Qlik Sense


Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1031
  • Страна: ru
  • Рейтинг: +107/-0
    • Просмотр профиля
ОК,
Исходные данные:
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

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1031
  • Страна: ru
  • Рейтинг: +107/-0
    • Просмотр профиля
Выражение для отображения максимального значения (текстовый объект)
=max(Aggr(count(DISTINCT D_ID),DC_Number))

Оффлайн Евгений

  • Новичок
  • *
  • Сообщений: 25
  • Рейтинг: +2/-0
    • Просмотр профиля
Добрый день!
Как , для начало, на основе полученной таблицы (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

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1031
  • Страна: ru
  • Рейтинг: +107/-0
    • Просмотр профиля
Зачем в скрипте то?

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

Неофициальный форум пользователей QlikView & Qlik Sense


Оффлайн Евгений

  • Новичок
  • *
  • Сообщений: 25
  • Рейтинг: +2/-0
    • Просмотр профиля
Все вычисления мне нужно в скрипте, чтобы получилось вот акая идея:

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

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1031
  • Страна: ru
  • Рейтинг: +107/-0
    • Просмотр профиля
Т.е. вы хотите получить количество плохих (менее 40% от максимума по чекам) и хороших (более 60% от максимума по чекам) держателей карт?

Оффлайн Евгений

  • Новичок
  • *
  • Сообщений: 25
  • Рейтинг: +2/-0
    • Просмотр профиля
Т.е. вы хотите получить количество плохих (менее 40% от максимума по чекам) и хороших (более 60% от максимума по чекам) держателей карт?


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

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1031
  • Страна: ru
  • Рейтинг: +107/-0
    • Просмотр профиля
Честно скажу, не могу понять зачем в скрипте это делать.
Но если такая задача есть, ее можно сделать и в скрипте.
Сделайте отдельные таблицы с подсчетом чеков на каждое измерение.
Но надо продумать ключ.

Оффлайн Евгений

  • Новичок
  • *
  • Сообщений: 25
  • Рейтинг: +2/-0
    • Просмотр профиля
Спасибо Вам огромное за внимание! Я решил отказаться от данной затеи- переноса в скрипт.  Думал, так будет быстрее вычислять... Подсчет чеков для каждого измерения все так усложняет) Выражениями, полагаю, обойдусь! Спасибо еще раз!