Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Здравствуйте!
(я дилетант-одиночка - сразу говорю)
Решаю задачу - подсчитать общее количество чеков в точках продаж, в которых были хоть раз (в определенный период месяц) продажи определенных некоторых блюд.
есть рабочая формула:
=(Count (DISTINCT{<EXTCODE= {'=sum({<DISH_RU= {$(vнаборблюд)}>} QUANTITY )>0'}>} GLOBALIDENT))
где $(vнаборблюд) - переменная в которой перечислен набор нужных блюд.
GLOBALIDENT - уникальный номер чека
EXTCODE - уникальный номер точки продаж
DISH_RU - понятно, блюдо
Эта формула корректно работает когда выделяю период - один месяц. (У нас разбивка по месяцам)
Но если выделяю два и более месяцев - количество чеков считает не корректно, оно увеличивается сильно, т.е. видимо EXTCODE берется не в пределах месяца а за весь выделенный период! И в итоге критерий фильтрации нужных блюд не работает.
ничего не смог придумать..
так кстати - тоже не считает! Если Aggr убираю - то считает.
Мне кажется у вас проблема со структурой данных.
У вас QV или QS ? Выложите скрином структуру.
Попробуйте такую формулу, что получится :
=(Count (DISTINCT{< QUANTITY = {'>0'} }>} GLOBALIDENT))
У нас QV..
структура - да, туда лучше не смотреть))
а формула (Count (DISTINCT{< QUANTITY = {'>0'} >} GLOBALIDENT) - работает корректно!
Собственно я так и думал, у вас синтетические ключи созданы QlikView автоматически - они вам всю картину портят.
Вам необходимо от них избавится и сделать уникальные связи между таблицами, иначе вам не видать счастья в этом приложении.
И раз это QlikView - вы можете добавить альтернативное состояние, в котором будете выбирать нужный вам товар (который будет использоваться для фильтрации и расчетов) - но при этом у вас картинка в основном состоянии не изменится.
Резюмирую:
Избавляйтесь от $syn ключей, и у вас должна сработать формула, ваша.
$syn - Огонь!))))
Альтернативные состояния так же не работают..
я слышал про синтетические ключи, и конечно их у меня много, но не представляю даже теоретически как от них можно избавиться..
"Вам необходимо от них избавится и сделать уникальные связи между таблицами, иначе вам не видать счастья в этом приложении."
Или иначе говоря - как делать уникальные связи между таблицами? У меня проблемы с терминологией..
Смотрите, есть две таблицы А и Б, которые имею такие поля:
А:
Дата
Количество
Товар
Магазин
Б:
Дата
Остаток
Товар
Магазин
Если вы их загрузите то получите $Syn по полям: Дата, Товар и Магазин.
Чтобы этого избежать, нужно сделать из этих полей единые "ключи", например так:
А:
Дата & '-' & Товар & '-' & Магазин as %Ключ1
Количество
Б:
Дата & '-' & Товар & '-' & Магазин as %Ключ1
Остаток
Всё, от синтетики избавились.
Спасибо за человеческое разъяснение! Буду экспериментировать.
А можно еще вопросик??
По такому принципу удалось ликвидировать один синтетический ключ. Но на этом примере получилось что у меня пропали поля Дата, Товар и Магазин, т.к. они слились в одно новое поле (системное)
Что тогда делать если мне нужны данные например Дата? А их нет, получилось типа Дата-Товар-магазин.
Получается невозможно избавиться от этих syn ключей?
В продолжении примера выше,
создает таблицу с ключами из одной таблицы, загружаем значения в другую таблицу из второй таблицы, объединяем - чтобы не было дублей.
Таким образом, мы создаем таблицу, в которой есть ключи и все значения этих ключей. И у нас таблицы А и Б связаны через эту таблицу.
NoConcatenate
table_key:
load
Дата
Товар
Магазин
, Дата & '-' & Товар & '-' & Магазин as %Ключ1
resident А
NoConcatenate
tableC:
load
Дата
Товар
Магазин
, Дата & '-' & Товар & '-' & Магазин as %Ключ1
resident Б
Concatenate(table_key)
load *
resident tableC
where not exists (%Ключ1);
drop table tableC;