Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
PQ расчет сортировки товаров
 
Всем привет
У меня есть расчет индекса сортировки товаров на сайте - десятки факторов, который помогают сформировать ЧИСЛО, по которому идет сортировка.

На основе которой, мы получаем Расчетную позицию.
Но есть категорийные менеджеры, которые некоторым товарам задают конкретную позицию в листинге.


Соответственно вопрос, как с учетом Расчетного Места и Зарезервированных мест получить итоговый список сортировки, чтобы первым делом распределились Зарезервированные места, а потом по РАсчетному месту по сдвигами(если заняты зарезервированные места), чтобы получилось вот так


Благодарю, фаил примера приложил. Все делаю в Power Query
Изменено: Vsevolod - 21 Авг 2019 09:14:01
 
Доброе время суток.
Vsevolod, вам нужно каждый раз напоминать, что нужно отписываться в своих темах? Или вы форум рассматриваете как своего рода магазин?
 
Андрей VG, отписался. извините.
 
Любопытная задача на комбинаторику ) мне пока мозгов/времени не хватило
F1 творит чудеса
 
Максим Зеленский, да ладна, нету тут никакой комбинаторики.
Вот по быстрому на коленке сляпал:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    TabDif = Table.AddIndexColumn( Table.FromList( List.Difference( Source[Расчетное место], Source[Зарезервированное] ), Splitter.SplitByNothing(), {"ИтогРасчет"} ), "Индекс", 0, 1 ),
    UnReserved = Table.SelectRows(Source, each ([Зарезервированное] = null)),
    AddedIndex = Table.Join( Table.AddIndexColumn(UnReserved, "Индекс", 0, 1), {"Индекс"}, TabDif, "Индекс" ),
    Reserved = Table.SelectRows(Source, each ([Зарезервированное] <> null)),
    Out = Table.AddColumn(Reserved, "ИтогРасчет", each [Зарезервированное]) & Table.RemoveColumns( AddedIndex, {"Индекс"} )
in
    Out

Теперь ТС через месяцок-другой зайдет как обычно и порадуется.  :D
В принципе можно по наводке от Imke F прицеплять полученный массив незарезервированных номеров без использования индексов и джойнов, но сейчас заморачиваться не хотел, хотя на большом массиве так будет быстрее работать.
Изменено: PooHkrd - 21 Авг 2019 13:33:09
Вот горшок пустой, он предмет простой...
 
PooHkrd, спасибо изучу сегодня. Половина функций которыми не разу не пользовался:(
 
PooHkrd, отлично. Вот что значит перемудрить - я пошел по более сложному варианту. Но начальную сортировку по расчетному месту я бы добавил :)
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
Но начальную сортировку по расчетному месту я бы добавил
Разрешите поинтересоваться? А с какой целью? Вроде бы List.Difference и Table.SelectRows на порядок элементов не влияют. Или это опять best practice? У кого про такое прочитать?
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
А с какой целью?
Алексей, возможно Максим всё же увидел несколько другой алгоритм решения, например такой
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    basePos = Table.Sort(Source,{{"Зарезервированное", Order.Descending}, {"Расчетное место", Order.Ascending}}),
    existings = List.RemoveNulls(basePos[Зарезервированное]),
    nonExistings = List.RemoveItems(Source[Расчетное место], existings),
    newItemEnums = {existings & nonExistings},
    baseCols = Table.ToColumns(Table.RemoveColumns(basePos, {"Зарезервированное"})),
    result = Table.FromColumns(baseCols & newItemEnums, Table.ColumnNames(basePos)),
    #"Sorted Rows" = Table.Sort(result,{{"Расчетное место", Order.Ascending}})
in
    #"Sorted Rows"

Хотя не думаю, что двойная сортировка даст выигрыш по времени. Исходно решение (не предполагавшее использование столбца "Расчётное место") у меня было таким же как и у вас (ну, почти) :)
Скрытый текст
 
Спасибо Огромное! Разобрался, внедрил.
Страницы: 1
Читают тему (гостей: 1)
Наверх