Страницы: 1
RSS
Сведение данных по трем условиям, Не удается свести данные по трем условиям
 
Добрый день, коллеги! Прошу помощи.
Не могу свести данные из двух таблиц в одну таблицу.

Таблица на первом листе (олап) отражает продажи по дням по трем sku и цену продажи

Таблица на втором листе (свод) содержит сеть, где продавалась позиция, его цену; дату начала и окончания промо и само наименанование sku

нужно к первой таблице олап прикрепить следующие столбцы из второй таблицы: price и дата начала и дата окончания промо по параметрам:
1) дата на первом листе попадает в промежуток дат на втором листе (дата начала и окончания промо)
2) сеть совпадает с сетью на втором листе
3) sku new мэтчатся между собой

Пробовал через query через создание таблицы дат и пробовал через ВПР создавая много условий, ничего не вышло. Прошу подсказать, если кто сталкивался.
Заранее благодарю!
 
Как вариант нагенерить таблицу связи (или копию) из свода - наплодить копий строк на каждую дату из от и до, и прилинковать по трём полям.
Если делать макросом - можно в словарь ключу NET|new sku|дата положить индекс нужной строки, и затем в цикле по олап подтянуть данные этих строк
Изменено: Hugo - 18.06.2024 18:52:12
 
сделал таблицу связи но под вечер уже не соображаю как по трем условиям сделать  
Изменено: guynix - 18.06.2024 19:03:20
 
Макросом всё сделал, выгрузил чуть правее чтоб таблицу не портить, подправить можно в коде в последней строке.
Там с датами ещё косяк в олапе...
 
Цитата
guynix написал:
сделал таблицу связи
я предполагал другую - копию строки на каждую дату промо.
Ну или так для экономии ресурсов - нагенерить таблицу строк с датами (из от/до) и индексом или любым другим ключём для связи с сводом.
Далее через эту таблицу по дате получаете кучу строк свода, из которых уже отбираете нужную по NET и new sku.
Или если макрос - из свода создаём словарь словарей - на каждую дату имеем словарь NET|sku  с ценой, или наборот для каждого ключа NET|sku создаём словарь дат промо с ценой и датами в массиве или строке, далее цикл по олап и по ключам получаем данные, если они есть в словаре.
Изменено: Hugo - 18.06.2024 20:09:30
 
понял, спасибо огромное!
очень круто вышло, я в шоке
стоит все-таки сесть и разбираться с макросами, но все руки не доходят
 
Да и в PQ уверен можно сделать, но не работал.
В последнем столбце для информации пишу номер строки свода откуда данные берутся, для проверки, можно убрать.
P.S. вообще там олап левый какой-то, повторы данных в
Сеть UNI new sku Дата
с разной Ф Цена продажи с НДС, руб/шт
Явно ещё что-то в ключ нужно добавлять.
Изменено: Hugo - 18.06.2024 19:32:37
 
Можно и формулой - индекс(поискпоз()) сработает, но загнётся на объёме ((
Пробую ПОИСКПОЗ() - с умными не работает, на диапазоне полетело, обнаружил что и в своде дубли есть - мой код выводил номера последней подходящей строки, а формула выводит первую.
Ну и конечно сперва вручную с датами разобрался.

Т.е. просто куча вариантов как сделать работу...
Изменено: Hugo - 18.06.2024 21:27:07
 
Цитата
Можно и формулой - индекс(поискпоз()) сработает, но загнётся на объёме
Если делать через поиск, то у меня получается примерно так (для цены):
Код
=ПРОСМОТР(1; 1/(
(Таблица4[NET]=Таблица36[@[Сеть UNI]])*(Таблица4[new sku]=Таблица36[@[new sku]])*
(Таблица4[ДАТА НАЧАЛА ПРОМО]<=--Таблица36[@Дата])*(Таблица4[ДАТА ОКОНЧАНИЯ ПРОМО]>=--Таблица36[@Дата])); 
Таблица4[price])
Жутко тормозит, естественно (уже на первых 100 строках).

Можно ещё формулами сделать так (см. файл), например для цены:
Код
=СРЗНАЧЕСЛИМН(Таблица4[price];
Таблица4[NET];Таблица36[@[Сеть UNI]];Таблица4[new sku];Таблица36[@[new sku]];
Таблица4[ДАТА НАЧАЛА ПРОМО];"<="&Таблица36[@Дата];Таблица4[ДАТА ОКОНЧАНИЯ ПРОМО];">="&Таблица36[@Дата])
Но в Своде полно дублей, и если у них разная цена - то будет усреднённая.
 
Коллеги, доброе утро!
Ночью выяснил что данные в олап некорректны и им нужно придавать признак и делить по sku. Сейчас редактируем запрос  
 
Почистили куб
Теперь по идее, не должно быть повторяющихся
удалось разобраться с VBA чуть-чуть сам перенес код)
Изменено: guynix - 19.06.2024 16:08:30
Страницы: 1
Наверх