Страницы: 1
RSS
Расчет глубины задолженности (с помощью PQ)
 

Коллеги, доброго дня!

Не уверен что эта задача для PQ, но тем не менее хочется попробовать, буду признателен за помощь.

Сама задача: Продавец в конце каждого месяца знает общую сумму задолженности по каждому Покупателю.

Так же Продавец имеет историю отгрузок по каждому Покупателю.

Для каждого Покупателя в каждом месяце нужно посчитать глубину задолженности в днях.

Глубина задолженности - период в днях, за который сформировалась сумма задолженности.
Т.е. например на конец января задолженность 100 руб.
Отгрузки с конца января и в прошлое были такие:

датаотгрузки, руб
08.11.2023          11
16.11.2023           8
24.11.2023           9
02.12.2023          11
10.12.2023          10
18.12.2023            9
26.12.2023          11
03.01.2024          10
11.01.2024           9
19.01.2024          11
27.01.2024          10


С конца января в прошлое суммируем все отгрузки до тех пор, пока их сумма максимально не приблизится к сумме задолженности (но не превышая ее).
Искомая сумма (98 руб.) набирается в интервале с 27.01.24 по 16.11.23.
Смотрим дату самой ранней отгрузки из этой суммы и находим разницу в днях между 31.01.24 и 16.11.23. Получается 76 дней.

Изменено: Vasya Ivanoff - 04.09.2024 11:13:51
 
СТАРЫЙ ВОПРОС!
Здравствуйте.
Пример кода Power Query:
Код
let
    Источник = Table.NestedJoin(ЗадолженностьИсходник, {"Контрагент"}, ОтгрузкиИсходник, {"Контрагент"}, "ОтгрузкиИсходник", JoinKind.LeftOuter),
    #"Добавлен пользовательский объект" = Table.AddColumn(Источник, "ОтфлтрТблц", each let dt = [#"Период (конец месяца)"] in Table.Sort(Table.SelectRows([ОтгрузкиИсходник], each [Дата]<=dt), {"Дата",Order.Descending})),
    #"Добавлен пользовательский объект1" = Table.AddColumn(#"Добавлен пользовательский объект", "TabNarastItog", each let tab = Table.AddIndexColumn([ОтфлтрТблц],"Index",0), lst = tab[#"Отгрузка, руб."] in Table.AddColumn(tab,"NarastItog",each List.Sum(List.FirstN(lst, [Index]+1)))),
    #"Добавлен пользовательский объект2" = Table.AddColumn(#"Добавлен пользовательский объект1", "КолвоДнейЗадолж", each let zdlzh = [#"Текущая задолженность, руб."] in Duration.TotalDays([#"Период (конец месяца)"]-List.Last(Table.SelectRows([TabNarastItog], each [NarastItog]<=zdlzh)[Дата]))),
    #"Другие удаленные столбцы" = Table.SelectColumns(#"Добавлен пользовательский объект2",{"Период (конец месяца)", "Контрагент", "КолвоДнейЗадолж"})
in
    #"Другие удаленные столбцы"
Файл прилагаю.
 
 
Цитата
turbidgirl написал:
СТАРЫЙ ВОПРОС!
скорее, старый кросс
Пришелец-прораб.
 
turbidgirl, Спасибо большое, работает!  :)  
 
Цитата
написал:
скорее,  старый кросс
это плохо? осуждаете? почему?
 
Цитата
Vasya Ivanoff написал:
это плохо? осуждаете? почему?
за меня ответит вот этот пункт Правил
Цитата
4. Не рекомендуется
  4.1. Создавать одинаковые темы или сообщения в разных форумах (cross-posting). Публикуя один и тот же вопрос в разных форумах и на дружественных сайтах вы заставляете сразу нескольких людей параллельно думать над вашей задачей и обесцениваете усилия тех, кто даст ответ вторым-третьим и т.д.
В приличном обществе о кросс-постинге предупреждают сразу... А как к этому явлению относиться - личное дело каждого.
Пришелец-прораб.
 
Цитата
написал:
за меня ответит вот этот пункт Правил
Не знал, спасибо что указали на этот пункт.

Но честно говоря не понимаю почему считается что усилия людей обесцениваются. Для меня оба решения полезны и интересны, я их разбираю в любом случае. В данном случае это (второе) решение для меня даже проще и понятнее. Первое было для меня более сложным.
К тому же не всегда удается получить ответ в приемлемые сроки, как например в этом примере - 2 недели прошло.

В любом случае Ваше замечание принял, буду его учитывать в будущем.
Изменено: Vasya Ivanoff - 18.09.2024 14:26:51
 
Цитата
Vasya Ivanoff написал:
Но честно говоря не понимаю почему считается что усилия людей обесцениваются
А если бы дали то же самое решение, что и в кроссе?
 
Цитата
написал:
А если бы дали то же самое решение, что и в кроссе?
вы имеет ввиду что второе решение независимо от первого делал бы другой человек, но решение получилось то же самое? мне кажется это очень маловероятно, но если бы это произошло, то тогда согласен, это было бы не продуктивно
 
Не выходит каменный цветок.
Добавилось еще одно поле "Организация", я добавил в первом шаге это поле для корректного присоединения таблиц.
Вроде на тесте все отработало корректно.
А потом запустил на реальных данных и комп "ушел в себя". Под запросом пишет что уже 3,5 гига загрузил... 8-0
В таблице отгрузок всего 4,7 тыс. строк. В таблице задолженностей 350 строк.



В чем может быть проблема?
Изменено: Vasya Ivanoff - 11.10.2024 16:34:11
 
Vasya Ivanoff, вот так попробуйте
aging
Пришелец-прораб.
Страницы: 1
Наверх