05.08.2011 13:22
Всем доброго времени суток. Помогите с построением отчета в бизнес-анализе. Есть стандартный отчет "Сочетаемость товаров", но он выдает только группы, а мне необходимы сочетания артикулов. Я пока не могу понять саму математику данного расчета. Так же есть возможность прямого обращения через запрос к серверу, но опять же не могу понять как прописывать этот запрос. Версия СМ 1.027.4 SP2
05.08.2011 13:25
А для начала объясните нам, что вы понимаете под сочетаемостью...
05.08.2011 13:32
Что с чем чаще покупают , допустим: чай нури - масло крестьянское 1000 совпадений , сыр голандский - ветчина особая 980 раз, в фильтре задаются группы или все группы, период и место хранение.
10.08.2011 10:56
Просчитать сочетаемость каждый с каждым на основании продаж за определенный период и выбрать топовые значения для создания наборов или более тонкой настройки системы лояльности в УКМ4.
Штатно в бизнес - анализе такое построить вряд ли получится, в запросе должен рассматриваться каждый чек в отдельности. Лучше выполнить запросом по базе УКМ4 с помощью программистов.
Насколько могу судить, автор - аналитик.
10.08.2011 11:56
Писала я когда-то очень давно подобный отчет.
Увы, по товарам, в отличие от групп нельзя проследить взаимосвязи.
Т.е. из того, что вместе с пивом покупают рыбу или пельмени, нельзя сделать вывод, что люди, пьющие балтику 7 будут закусывать её бычками в томате.

Поэтому, используйте сочетаемость по группам. А какой товар из группы-побратима вы поставите - зависит от того, какой товар вы продвинуть в продажах хотите.
10.08.2011 12:35
А почему нельзя??
например есть чек (чеки) с товарами
001 пиво
002 чипсы
003 колбаса

приводим каждый чек к виду
001 - 002
001 - 003
002 - 003

группируем и считаем количество одинаковых строк
сортируем по количесву совпадений
(скорее всего на первом этапе выкидываем артикулы пакетов и т.п.)
10.08.2011 12:35
Просто стандартный отчет который сопоставляет группы, чаще выдает группу "Прочее", где в основном это пакеты.
22.08.2011 14:35
Цитата:
konst А почему нельзя??
...
можно. нашел, чутка подправил. рисовалось когда-то на коленке, по принципу: чего-то посчитал - и ладно. как есть сейчас, у меня неделю по сети считает почти шесть минут (~200тыс.чеков, ~миллиона позиций).
ну и все пары вылезают по два раза: огурцы-помидоры, следом помидоры-огурцы. даже думать лениво, чего с этим делать
кому надо красиво и быстро - делайте сами. :)
Код:
select a1, a2, count(*), c1.shortname as n1, c2.shortname as n2
from smcard c1, smcard c2,
(select i1.article as a1, i2.article as a2
from smcashcheckitems i1, smcashcheckitems i2, smcashz z
where i1.locid=i2.locid
  and i1.desknum=i2.desknum
  and i1.znum=i2.znum
  and i1.checknum=i2.checknum
  and NOT i1.item=i2.item
  and NOT i1.article=i2.article
  and NOT i1.article in (select article from smcard c where c.idclass=(select ID from svcardtreesplit a where a.name like 'Проч%' and a.Item2 is null))
  and NOT i2.article in (select article from smcard c where c.idclass=(select ID from svcardtreesplit a where a.name like 'Проч%' and a.Item2 is null))
  and i1.locid=z.locid
  and i1.desknum=z.desknum
  and i1.znum=z.znum
  and z.closedate>=to_date('08.08.2011','DD.MM.YYYY')
  and z.closedate<=to_date('14.08.2011','DD.MM.YYYY')) p
where c1.article=a1 and c2.article=a2  
group by a1, a2, c1.shortname, c2.shortname
having count(*)>700
order by count(*) desc
две строки вида
and NOT i1.article in (select article from smcard c where c.idclass=(select ID from svcardtreesplit a where a.name like 'Ïðî÷%' and a.Item2 is null))
это исключение группы пакетов и прочего мусора.

строка
and NOT i1.article=i2.article
убирает повторения товаров внутри чеков.
с этим ограничением у меня на первом месте огурцы+помидоры с огромным отрывом. без него: сахар+сахар, окорочек+окорочек...
22.08.2011 16:44
с подачи аналитика: почти то же самое, но выбираем только сочетания товаров из одной группы с товарами из другой группы.
в данном случае фрукты с сыром. хотелось, правда, алкоголь с сыром, но у нас они по разным МХ бегают, увы.
в таком виде работает, конечно же, заметно быстрее: около минуты на нашей базе
Код:
select a1, a2, count(*), c1.shortname as n1, c2.shortname as n2
from smcard c1, smcard c2,
(select i1.article as a1, i2.article as a2
from smcashcheckitems i1, smcashcheckitems i2, smcashz z
where i1.locid=i2.locid
  and i1.desknum=i2.desknum
  and i1.znum=i2.znum
  and i1.checknum=i2.checknum
  and i1.article in(select article from smcard c where c.idclass in(select ID from svcardtreesplit a where a.name1 like 'Фру%'))
  and i2.article in(select article from smcard c where c.idclass in(select ID from svcardtreesplit a where a.name1 like 'Сыр%'))
  and i1.locid=z.locid
  and i1.desknum=z.desknum
  and i1.znum=z.znum
  and z.closedate>=to_date('09.08.2011','DD.MM.YYYY')
  and z.closedate<=to_date('15.08.2011','DD.MM.YYYY')) p
where c1.article=a1 and c2.article=a2  
group by a1, a2, c1.shortname, c2.shortname
having count(*)>10
order by count(*) desc
Часовой пояс GMT +3, время: 23:26.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.