Страницы: 1
RSS
Товар Без Движения рассчитать в Power Query
 
Всем привет. Подскажите пжл можно ли реализовать логику подсчёта товара без движения в PQ.Во вложении шаблон и рядом что хотел бы получить на выходе, на складе нет WMS системы , и приходится такое изобретать((. Логика должна строится по текущей дате и отсчитывать сколько данный товар(такое кол-во) стояло на складе в днях без движения, даты и кол-во всё есть.
Спасибо за овтет.
 
Как-то так:
Код
let
    Source = Table.TransformColumnTypes( Excel.CurrentWorkbook(){[Name="Массив"]}[Content],{{"SKU", type text}, {"Дата", type date}, {"Кол-во", Number.Type}}),
    Grouped = Table.Group(Source, {"SKU"}, {{"Дней без движения", 
        (x)=> Number.From( 
                Date.From( DateTime.LocalNow()) - 
                List.Max({
                    List.Min(x[Дата]) - #duration(1,0,0,0), 
                    List.Last( Table.RemoveLastN(x, each [#"Кол-во"] = Table.Max( x, "Дата" )[#"Кол-во"] )[Дата] )}
                )
            ), type number},
            {"Кол-во", (x)=> Table.Max( x, "Дата" )[#"Кол-во"], type number}})
in
    Grouped
Изменено: PooHkrd - 30.07.2020 11:53:23 (Добавил количество в коде)
Вот горшок пустой, он предмет простой...
 
Код
let
    from = Excel.CurrentWorkbook(){[Name="Массив"]}[Content],
    f=(t)=>Table.Last(Table.Group(t,"Кол-во",{"Без движения", each Table.RowCount(_)})),
    group = Table.Group(from, "SKU", {"tmp", each f(_)}),
    to = Table.ExpandRecordColumn(group, "tmp", {"Кол-во", "Без движения"})
in
    to
Соблюдение правил форума не освобождает от модераторского произвола
 
Благодарю. А если добавлю столбец стоимости , ткните меня куда добавить данный столбец в аргумент из группировки?
 
Я конечно её смогу потом подтянуть, сумму эту без проблем по текущему дню.
Изменено: Александр L - 30.07.2020 12:09:58 (вложил файл)
 
buchlotnik, коллега, доброго дня.
А в свете вот этого вот поста Максима, про сохранение порядка строк, не будет ли коварным это сочетание Table.Last(Table.Group())? Я сначала тоже так хотел, но потом решил все таки опираться на даты.
Вот горшок пустой, он предмет простой...
 
Код
let
    from = Excel.CurrentWorkbook(){[Name="Массив"]}[Content],
    f=(t)=>Table.Last(Table.Group(t,"Кол-во",{"tmp", each [#"Без движения" = Table.RowCount(_)]&Table.Last(_)}))[tmp],
    group = Table.Group(from, "SKU", {"tmp", each f(_)}),
    to = Table.ExpandRecordColumn(group, "tmp", {"Кол-во", "Стоимость", "Без движения"})
in
    to

UPD:
PooHkrd, коллега, согласен, тогда можно попробовать так (докостылил предыдущий код):
Код
 let
    from = Excel.CurrentWorkbook(){[Name="Массив"]}[Content],
    f=(t)=>List.Max(Table.Group(t,"Кол-во",{"tmp", each [#"Без движения" = Table.RowCount(_)]&Table.Max(_,"Дата")})[tmp],null,each _[Дата]),
    group = Table.Group(from, "SKU", {"tmp", each f(_)}),
    to = Table.ExpandRecordColumn(group, "tmp", {"Кол-во", "Стоимость", "Без движения"})
in
    to
Изменено: buchlotnik - 30.07.2020 12:40:26
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
buchlotnik написал:
докостылил предыдущий код
Всё, вопрос снимается. Интересный подход, ваш вариант, думаю, пошустрее будет.
Вот горшок пустой, он предмет простой...
 
Спасибо большое за ответ. сейчас попробую на пару млн строк как отработает.
 
Коллеги всем привет. подскажите пжл., где ошибка, при группировке показывает что товар без движения 14 дней, но это не правильно он всего три дня. в файле я выделил жёлтым исходник что он должен считать.
Изменено: Александр L - 04.08.2020 17:41:43 (Вложил файл)
 
файла не вижу
Соблюдение правил форума не освобождает от модераторского произвола
 
да что то не затянул файл. поправил сообщение.
 
ну это... какой пример, такой и ответ  :)
количества могут повторяться, в первоначальном файле это не было.
Лечение:
Код
let
    from = Excel.CurrentWorkbook(){[Name="Массив"]}[Content],
    f=(t)=>List.Max(Table.Group(t,"Кол-во",{"tmp", each [#"Без движения" = Table.RowCount(_)]&Table.Max(_,"Дата")},GroupKind.Local)[tmp],null,each _[Дата]),
    group = Table.Group(from, "SKU", {"tmp", each f(_)}),
    to = Table.ExpandRecordColumn(group, "tmp", {"Кол-во", "Стоимость", "Без движения"})
in
    to
Изменено: buchlotnik - 04.08.2020 17:51:26
Соблюдение правил форума не освобождает от модераторского произвола
 
Да вот парочку таких частных случаев вылезло, я не подозревал такое, увидел случайно смотрю сумма не бьётся. Благодарю сейчас под свой год поправлю.
 
Нашёл ещё у себя один недочёт, подскажите как поступить лучше. К примеру товар стоял просто неделю, и вчера его отгрузили, в остатках на сегодня его соответсвенно нет всё прекрасно, подскажите пжл как мне лучше поступить, сделать две табл. в первой вести остатки на сегодня а во второй как раз по динамики дней вести движение этих остатков, и потом из одной джойник  в другую данные сколько дней без движения, кол-во и стоимость, или можно сделать всё в одной?  
 
Александр L, не до конца ясна задача, можете пример показать что нужно?
Соблюдение правил форума не освобождает от модераторского произвола
 
Здравствуйте, сори вчера не смог ответить. Во вложении файл, выделил снизу даты, в финальную табл должны попадать товары только присутствующие на сегодняшний день.Товар 1 вчера допустим отгрузился и в остатках на сегодня его нет всё на складе 0, но он попал.
Изменено: Александр L - 05.08.2020 10:10:52
 
дык фильтраните данные и всё
когда ещё не проснулся
или так
проснулся
Изменено: buchlotnik - 05.08.2020 10:36:13
Соблюдение правил форума не освобождает от модераторского произвола
 
АА ок, а я хотел накручивать вторую табл, и потом по ней плясать.))Просто в Группу я добавляю столбцов 8 ещё, думаю ничего не повредит)).
Спасибо за ответ.
Страницы: 1
Наверх