Страницы: 1
RSS
PQ. Перемножить коэф по лестнице внутри групп
 
Друзья, добрый день!
Кратко, что я подразумеваю под "перемножить по лестнице", дано 3 числа - 4,6,8. Первое значение = 4*6*8, Второе значение = 6*8, Третье = 8.

Прошу помощи, дана таблица с коэффициентами, каждая позиция может состоять от 1-ого до N кол-ва сырья, Мне нужно просчитать для каждой составляющей такую лестницу до сырья. (Подробно я все расписал в файле примера).

Пока сам додумался, только как посчитать, перемноженные коэф для самой 1 позиции (Основное наименование позиции), сгруппировав все по группам, а вот как это разложить дальше пока не знаю. Скорее всего это как-то делается по индексу внутри группы.

Буду очень признателен за помощь.
 
Подниму вверх тему, пока совсем не скрылась)
 
OblivionR, не уверен что поможет. Я не возьмусь из-за непонятного примера.
Зачем там позиции, которые не нужны?
Почему если их удалить то в итоге на 2 строки больше чем в исходнике?
Одни вопросы и из-за этого никакого интереса к задаче.
Сделайте задачку интересной, а главное понятной. Тогда бодрее пойдет.  ;)
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Почему если их удалить то в итоге на 2 строки больше чем в исходнике?
Добрый день!
В блоке "Позиции 2" мы видим 3 сырья, т.е. эту позицию можно получить по 3 дорожкам, От сюда и лишние 2 строки, т.к. добавляются 2 лестницы.
Нужно перемножить не все строки по очереди в блоке позиции, а только до сырья, сырья 3 значит у позиции будет 3 общих коэф. Не знаю как еще объяснить :-)
Мне хотя бы любой пример, как можно значения так перемножать по нарастающей)
 
Поищите в поиске форума функцию List.Generate. Там будут темы с накопительными суммами, и подобными вашей задачами.
Вот горшок пустой, он предмет простой...
 
PooHkrd, хорошо, сейчас буду искать решение.

Во вложении упрощенный, не буду оставлять надежду на помощь)
Изменено: OblivionR - 17.09.2020 13:53:12
 
Цитата
OblivionR написал:
Во вложении упрощенный,
а можно хоть в двух словах логику этого "упрощенного" примера? Почему итог 1 равен 6 а потом 4; почему по итогу 2 две нижние строчки одинаковые?
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
buchlotnik написал:
6 а потом 4; почему по итогу 2
Потому что я косякнул(

Добрый день! Вложение исправил, там одинаковые цифры.
 
Если правильно понял идею, то так, наверное - группируем по позиции и типу сырья, затем внутри группировки делаем чики-пуки:
F1 творит чудеса
 
Максим Зеленский, Вы мой спаситель! То что нужно, спасибо!!!
Одно радует меня в моем незнании, что логику вычислений брал такую же как у вас., да вот знаний не хватило довести до ума, все после шага (ну и сам шаг) fnAddStairway нужно разбирать сидеть.
Как бы всему этому научится самому(
 
Цитата
OblivionR написал:
(ну и сам шаг) fnAddStairway
это не шаг, это функция, которую применяем к группируемым строкам.
Если нужно, могу расписать по шагам, что она делает
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
Если нужно, могу расписать по шагам, что она делает
Буду крайне признателен
 
Как-то так:
Код
    fnAddStairway = (grouped as table) as table =>
        let
            tab = Table.Buffer(Table.Sort(grouped, "Индекс")),
            //Помещаем таблицу в оп. память, предварительно ее отсортировав по индексу
            start = List.Min(tab[Индекс])-1, 
            //вычисляем минимальное значение в столбце Индекс и вычитаем единицу
            coeff = List.Buffer(tab[Коэф]), 
            //помещаем в оп. память столбец с коэффициентами, который будем перемножать
            multiplied = Table.AddColumn(tab, "Перемноженные коэф", each if [Вид]="Сырье" then [Коэф] else List.Product(List.Skip(coeff, [Индекс]-start))),
            //Здесь самое интересное, создаем столбец с накопительным произведением: для строк с видом Сырье ничего не делаем, а для остальных расчитываем произведение списка coeff (который в памяти лежит)
            //т.к. для каждой строки индекс увеличивается на единицу, и из него вычитается start, то получаем тот самый накопительный эффект
            FirstRow = [Наименование 2 = List.First(tab[Наименование 1]), Наименование 1 = List.First(tab[Наименование 1]), Индекс = start, Перемноженные коэф = List.Product(coeff), Сырье = List.First(tab[Сырье]), Вид = "Продукция"],
            //Создаем новую первую строку для таблицы
            AddedFirstRow = Table.FromRecords({FirstRow}) & multiplied,
            //Объединяем певрую строку с таблицей где перемножили коэффициенты
            Reordered = Table.SelectColumns(AddedFirstRow,{"Наименование 1", "Наименование 2", "Сырье", "Перемноженные коэф", "Индекс"})
            //Поменяли порядок столбцов
        in
            Reordered
Скрытый текст
Изменено: PooHkrd - 18.09.2020 15:03:42
Вот горшок пустой, он предмет простой...
 
Благодарю PooHkrd, буду изучать
Страницы: 1
Наверх