Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
antonrus
Contributor III
Contributor III

Сет аналитикс мать его

Здравствуйте!

(я дилетант-одиночка - сразу говорю)

Решаю задачу - подсчитать общее количество чеков в точках продаж, в которых были хоть раз (в определенный период месяц) продажи определенных некоторых блюд.

есть рабочая формула:

=(Count (DISTINCT{<EXTCODE= {'=sum({<DISH_RU= {$(vнаборблюд)}>} QUANTITY )>0'}>}  GLOBALIDENT))

где $(vнаборблюд) - переменная в которой перечислен набор нужных блюд.

GLOBALIDENT - уникальный номер чека

EXTCODE - уникальный номер точки продаж

DISH_RU - понятно, блюдо


Эта формула корректно работает когда выделяю период - один месяц. (У нас разбивка по месяцам)

Но если выделяю два и более месяцев - количество чеков считает не корректно, оно увеличивается сильно, т.е. видимо EXTCODE берется не в пределах месяца а за весь выделенный период! И в итоге критерий фильтрации нужных блюд не работает.

ничего не смог придумать..




25 Replies
antonrus
Contributor III
Contributor III
Author

так кстати - тоже не считает! Если Aggr убираю - то считает.

Chernov
Creator
Creator

Мне кажется у вас проблема со структурой данных.

У вас QV или QS ? Выложите скрином структуру.

Попробуйте такую формулу, что получится :

=(Count (DISTINCT{< QUANTITY = {'>0'} }>}  GLOBALIDENT))

antonrus
Contributor III
Contributor III
Author

У нас QV..

структура - да, туда лучше не смотреть))

а формула (Count (DISTINCT{< QUANTITY = {'>0'} >}  GLOBALIDENT) - работает корректно!

Снимок.JPG

Chernov
Creator
Creator

Собственно я так и думал, у вас синтетические ключи созданы QlikView автоматически - они вам всю картину портят.

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

И раз это QlikView - вы можете добавить альтернативное состояние, в котором будете выбирать нужный вам товар (который будет использоваться для фильтрации и расчетов) - но при этом у вас картинка в основном состоянии не изменится.

Резюмирую:

Избавляйтесь от $syn ключей, и у вас должна сработать формула, ваша.

Clipboard01.jpg

vkozlov
Partner - Creator
Partner - Creator

$syn - Огонь!))))

antonrus
Contributor III
Contributor III
Author

Альтернативные состояния так же не работают..

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

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

Или иначе говоря - как делать уникальные связи между таблицами? У меня проблемы с терминологией..

Chernov
Creator
Creator

Смотрите, есть две таблицы А и Б, которые имею такие поля:

А:

Дата

Количество

Товар

Магазин

Б:

Дата

Остаток

Товар

Магазин

Если вы их загрузите то получите $Syn по полям: Дата, Товар и Магазин.

Чтобы этого избежать, нужно сделать из этих полей единые "ключи", например так:

А:

Дата & '-' & Товар & '-' & Магазин as %Ключ1

Количество

Б:

Дата & '-' & Товар & '-' & Магазин as %Ключ1

Остаток

Всё, от синтетики избавились.

antonrus
Contributor III
Contributor III
Author

Спасибо за человеческое разъяснение! Буду экспериментировать.

antonrus
Contributor III
Contributor III
Author

А можно еще вопросик??

По такому принципу удалось ликвидировать один синтетический ключ. Но на этом примере получилось что у меня пропали поля Дата, Товар и Магазин, т.к. они слились в одно новое поле (системное)

Что тогда делать если мне нужны данные например Дата? А их нет, получилось типа Дата-Товар-магазин.

Получается невозможно избавиться от этих syn ключей?

Chernov
Creator
Creator

В продолжении примера выше,

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

Таким образом, мы создаем таблицу, в которой есть ключи и все значения этих ключей. И у нас таблицы А и Б связаны через эту таблицу.

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;