Доброго дня, коллеги! У меня есть выгрузки из 1С с еженедельными остатками по товарам. Кто тесно работает с 1С, знает, что есть отчеты, которые не будут выводить результат, если не было движения за выбранный период. Т.е. формируя отчет за 10 недель я ожидаю получить 10 строк данных с остатками, но если не было движения, то будет только первая, последняя неделя + те недели, по которым были изменения остатков. Ну вот, проблему описал. Я пытаюсь восполнить недостающие недели с помощью PQ. Я попробовал реализовать следующий план: 1. объединил справочник номенклатуры и справочник недель декартовым произведением. 2. полученный результат "заджойнил" с таблицей фактов и вытащил остатки. Вроде бы успех, но на боевой модели все это крашится, потому что таблица фактов = 2 млн. строк, а созданная справочная таблица декартовым произведением вышла под 5 млн. Вообщем план не удался, а других у меня нет. Может кто знает как решить подобную задачу? Во вложении образец исходных данных и конечного результата.
PQ: сопоставление и дополнение строк одной таблицы из другой таблицы-справочника
25.06.2021 15:08:27
|
|
|
|
25.06.2021 15:46:17
Добрый день!
Я делаю подобные отчеты в 1с, только с интервалом в месяц. В 1с я решаю эту проблему путем добавления в поля периода. Либо выгружаю данные за каждый месяц отдельно. |
|
|
|
25.06.2021 16:45:39
Пока могу предложить такой вариант. Но он дублирует значения по кол-ву. Если нужно чтобы не дублировал, то можете использовать
Вот горшок пустой, он предмет простой...
|
|||
|
|
25.06.2021 17:18:05
Осталось изменить под необходимое. Ненужное удалить |
|||
|
|
29.06.2021 08:03:16
Отвечаю с задержкой: пока удалось наложить на боевую модель в PBI код Михаил Л, (он показался проще, с него и начал). В результате исходная таблица в 2 млн. строк преобразовалась в 4 млн. На таком объеме данных запрос отработал за 40 мин. со 100% загрузкой ЦП и оперативки, ну и диск так же под 100% ушел (в это время ничего не мог более делать). Проц у меня: Itel Core i5-7500 3,40 Ghz, оперативки - 16 гб. Продолжаю тестирование (мне еще нужно будет добавить Filldown с учетом кода номенклатуры)
|
|
|
|
29.06.2021 08:38:43
Vladimir Chebykin,
Добрый день. А что такое КОД в таблице? каков смысл этого столбика? Чем отличается код 1 неделя 2 от код 2 неделя 2 Код генерируется таблицей фактов изначально? Это заданное значение? |
|
|
|
29.06.2021 08:53:42
код1 и код2 - это два разных товара. Расчеты нужно вести по каждой отдельной номенклатурной позиции. Используется как ключ для связи с номенклатурным справочником.
|
|
|
|
29.06.2021 08:55:41
Vladimir Chebykin,
Код генерирует 1с в рамках каких-то правил, или он может быть сегодня 000000123 а завтра ПБ000001224? Вам это все нужно в рамках PBi или экселя? Почему сводными таблицами не пользуетесь? У меня схожие бывают дела. Я создал несколько справочников: Справочник ТМЦ, Справочник ДАТ (календарь, в том числе недели) И дальше разрулил мерами. Делать из 2х млн строк, 4млн строк - глупо, если помните мои старые посты, я тоже этим увлекался. Однако с радостью обнаружил что DAX с мерами в десятки раз быстрее PQ с его тормозами. Но если ограничения есть, на формат вывода данных, тогда конечно понимаю Вас.
Изменено: |
|
|
|
29.06.2021 09:17:54
lostandleft, не пугайте военных войной, а кота сосиской. Уж в чем Владимир шарит, так это в PBI, связях и мерах, вот с PQ у него пробел имеется, это да.
Вот горшок пустой, он предмет простой...
|
|
|
|
29.06.2021 09:38:38
1-ый сценарий: один раз сделать расчет в PQ, и высчитать фактические остатки на каждый день/неделю и потом по ним считать оборачиваемость мерами? 2-ой сценарий: гоним данные из 1С как есть, т.е. те самые 2 млн. строк, потом создаем мерами виртуальные таблицы, с теми самыми 4 млн. трок и уже их загоням в расчет оборачиваемости? Попробуйте самостоятельно посчитать плюсы и минусы каждого подхода.
|
|||||||||
|
|
29.06.2021 09:53:33
Vladimir Chebykin, а если сделать ход конем? Отдельный справочник номенклатур имеется? Что если просто каждую недельную выгрузку обогащать недостающими кодами прикручивая их снизу и удаляя дубликаты, а потом уже собирать данные из каждого файла в общий, так по идее быстрее должно получиться. Но тогда в файл добавятся номенклатуры, по которым вообще движения не было за исследуемый период. Это приемлемо?
Вот горшок пустой, он предмет простой...
|
|
|
|
29.06.2021 10:19:24
PooHkrd, не, немного не так. Если бы я делал выгрузку каждой недели отдельно, то данного топика вообще бы не было, потому что остатки без движения (приход и расход) в таком случае отображаются, я же делаю скопом по 6-8 недель, и тогда возникает проблема данного поста. Т.е. представим, что за 8 недель не было ни одной продажи и остатки не менялись, в таком случае выгрузка за 8 недель покажет остатки на 1 и 8 неделю (как начало и конец выбранного периода), а с 2-7 данных не будет вообще, т.е. данные строки отсутствуют и вместо 8 строк отчет 1С отобразит только 2 строки.
Вот и получается, что обогатить нужно именно недостающие периоды по каждому коду номенклатуры.
Изменено: |
|
|
|
29.06.2021 10:39:46
Vladimir Chebykin, тогда обогащать нужно на этапе до сборки файлов, это будет значительно быстрее.
Вот горшок пустой, он предмет простой...
|
|
|
|
29.06.2021 11:11:47
Тот вариант что предложил в решении Андрей для выведения оборачиваемости - летает. Тема моей задачи была один в один - Ваша. Я генерировал даты, и считал средний остаток, и среднюю оборачиваемость.
Участвовать дальше, в обсуждении желание пропало. |
|||||||
|
|
29.06.2021 11:32:39
|
|||
|
|
29.06.2021 11:57:38
Vladimir Chebykin, когда делаете запрос к папке и разворачиваете структуру бинарников вот таким образом:
То автоматически генерится вот такая структура из запросов: где 123 - это собственно запрос к папке с названием "123" Запрос "Пример файла" - это запрос, который по заданному в нем алгоритму выбирает тот единственный файл, из папки по образцу которого будет формироваться шаблонный запрос обработки и функция на его основе. Запарос "Параметр1" - это собственно параметр, значением которого является бинарное содержимое файла из запроса "Пример файла" Запрос "Преобразовать пример файла" - это шаблонный запрос, в который в качестве параметра передается бинарник из предыдущего шага и в нем же формируется алгоритм обработки единичного файла из папки перед сборкой в единый массив Функция "Преобразовать файл" - это функция, которая связана с запросом "Преобразовать пример файла", Что это значит? Это значит что код функции берется напрямую из этого запроса, т.е. если изменить запрос-шаблон, то автоматически изменится и функция. Эта самая функция как раз и вызывается для обработки бинарников в запросе "123". Что из вышеизложенного следует? Лезем в этот самый запрос-шаблон (он же "Преобразовать пример файла") и в нем производим обогащение по выбранному вами алгоритму, а далее, когда вы будете разворачивать содержимое файлов в единый массив, там уже будут все нужные вам строки. Такая обработка всегда работает гораздо быстрее. Еще позволю себе наглость рекомендовать выгрузку отчетов из 1С в csv, это также заметно ускорит обработку.
Вот горшок пустой, он предмет простой...
|
|
|
|
29.06.2021 12:23:51
PooHkrd, большое спасибо - я въехал в методу. Буду пробовать.
|
||||
|
|
|||