Группировка измерений

Автор suboral, 24 декабря 2019, 10:03:23

« назад - далее »

suboral

Уже который раз сталкиваюсь с этой проблемой и не могу найти ей решение. Хотелось бы получить ответ или обсудить. Наверно я не один, у кого возникают проблемы с формированием данных из 1с для загрузки в Qlik. 1с любит формировать отчеты с группировками, из-за чего их невозможно загрузить в Qlik без предварительно обработки(или возможно?). Формирование стандартных плоских/линейных отчетов иногда бывает кривое, и приходятся выдумывать различные фокусы, чтобы получить, то что надо. Итак, без прелюдий:
Задача:
Хотим посчитать кол-во товаров в чеке в линейной диаграмме. Делить будем на 3 категории: от 1 до 3, от 4 до 10 и больше 10.
Такого значения как кол-во товаров в заказе у нас нет, поэтому выгружаем отчет, в котором есть номер заказа, номенклатура из этого заказа и код строки(это должен был быть порядковый номер номенклатуры в заказе, но почему-то счетчик сбился и это не корректный номер строки в заказе, однако его можно использовать для подсчета кол-ва товара в заказе, т.к. нумерация уникальна) Count distinct [Код строки]. Получаем простыню из овер тысячи заказов с кол-вом товара в них.

И вот та проблема, с которой я несколько раз уже сталкивался, как в измерение указать группировки от 1 до 3, от 4 до 10 и больше 10? Или как по другому лучше Вы бы решили эту задачу?

Uunit

#1
на этапе скрипта, пробовали подсчитывать количество количество товара в каждом заказе?
1) Исходную таблицу называем temp
2) Создаём промежуточный расчёт, то есть использовать count([Код строки]) as КолвЗаказов и Group By [Заказ клиента].
3) Полученную таблицу используя left join добавить в исходную.
4) Обращаемся к таблице temp, используем: IF(КолвЗаказов>10,'Больше 10' IF(КолвЗаказов>3, 'от 4 до 10', IF(КолвЗаказов>0,'от 1 до 3', КолвЗаказов))) as Тип
Возможно есть более робастное решение, но в рамках описанного ТЗ, удовлетворяет всем условиям)

suboral

Цитата: Uunit от 24 декабря  2019, 10:37:46  на этапе скрипта, пробовали подсчитывать количество количество товара в каждом заказе?
1) Исходную таблицу называем temp
2) Создаём промежуточный расчёт, то есть использовать count([Код строки]) as КолвЗаказов и Group By Заказ клиента.
3) Полученную таблицу используя left join добавить в исходную.
4) Обращаемся к таблице temp, используем: IF(КолвЗаказов>10,'Больше 10' IF(КолвЗаказов>3, 'от 4 до 10', IF(КолвЗаказов>0,'от 1 до 3', КолвЗаказов))) as Тип
Возможно есть более робастное решение, но в рамках описанного ТЗ, удовлетворяет всем условиям)
Спасибо! Да, интересный вариант. Это скажем там единичная задача, которую можно было и в excel раскидать, мне просто интересно, кто как справляется с подобным, почерпнуть опыт)

Uunit

#3
Чуть чуть потестил, можно и в самой диаграмме.
В диаграмме можно добавить вычисляемое измерение.
т.е. использовать:
IF(Aggr(Count( distinct [Код строки]),[Заказ клиента])>10,'Больше 10','10 и менее')Думаю логику вы поняли, но не могу сказать, насколько сильно это будет нагружать вашу систему, так как не знаю объёмов данных.

Итог:
1) Пример описанный через скрипт, и не будет нагружать систему, но данные будут статичны.
Это и плюс и минус. Так как если выбрать конкретную позицию, например "Молоко", из-за статичности данных, данный график не изменится, но оставит только товары в котором было "молоко".
2) Пример описанный через диаграмму, будет считать то же самое, но, все фильтры на него будут влиять.
т.е. выбрав товар "молоко" график изменится. Все заказы попадут в одну группу, так товар всего один.

Всё зависит от ваших целей.

admin

Добрый день.
Загрузка данных, сформированных отчетом 1с - не самое удачное решение.
Если отчет позволяет, я рекомендую сформировать настройку без группировок.
Если нет - привлеките к этой задаче специалиста 1С. Пусть он сделает выгрузку данных из отчета в удобном формате.
Это и время сэкономит и будет намного проще.
Если специалист 1с не обладает такими навыками, пусть хотя бы в консоле запросов сформирует необходимый набор запросов из нужных отчетов.
Это опять же будет быстрее и проще.
Ну и крайний вариант - разобраться в отчете самому или с помощью, опять же сообществ, в том числе нашего )

Всех, кто празднует - с Рождеством!

Яндекс.Метрика