Страницы: 1
RSS
Создать в Power Query список, в котором каждое следующее значение равно предыдущему значению, задействованному в арифметических действиях
 
Привет всем. Как в PQ сделать список значений, в котором каждое следующее значение равно предыдущему значению, к которому прибавлено два, затем разделено на полтора и прибавлено опять предыдущее значение. Причем в списке должно быть столько значений, сколько в столбце "количество" плюс исходное значение. В примере сделано формулой.
{7, 13, 23, 39.6666666666667, 67.4444444444445, 113.740740740741, 190.901234567901}
Только можно с пояснениями чтобы мы смогли потом понять что к чему)
Заранее спасибо
 
Как-то так:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    #"Added Custom" = Table.AddColumn(Source, "список", each 
    let 
//сохраняем в перменных значения полей строки, для передачи в List.Generate
        value = [значение], 
        q = [количество],
//генерация списка в цикле
        calc = List.Generate(
//создаем запись с итератором, для получения условия выхода из цикла и
//первого элемента в будущем списке 
            ()=> [i = 0, a = value],
//проверка условия выхода из цикла 
            each [i] <= q,
//увеличиваем итератор на 1 и генерируем следующий элмент списка по вашей формуле
            each [i = [i] + 1, a = ( 5 * [a] + 4 ) / 3],
//показываем что именно выводить в будущий список
            each [a]
        )
    in
        calc
    ),
    список = Table.Transpose( Table.FromColumns( #"Added Custom"[список] ) )
in
    список

Здесь подробнейшее описание функции и её механики.
Изменено: PooHkrd - 19.02.2020 13:34:20
Вот горшок пустой, он предмет простой...
 
PooHkrd, спасибо Вам большое!
Долго не могли понять почему нужно умножить на 5 :D
Еще бы развернуть в строки. Функция Table.FromColumns разворачивает в колонки, а Table.FromRows у меня бракованная какая то, не справляется с таблицей.
Хотя Table.Transpose и Table.FromColumns сделали дело
 
Цитата
Михаил Л написал:
почему нужно умножить на 5
Упростил выражение, это алгебра 5 класс.
Цитата
Михаил Л написал:
Table.FromRows у меня бракованная
Она не бракованная, просто в ней зашито, что все строки должны быть одинаковой длины, т.е. ей нужно выдавать списки-строки с одинковым количеством элементов. Т.е. можно рассчитать максимальное количество столбцов в итоговой таблице, потом все списки дополнить null'ями и потом уже создавать таблицу.
А вот Table.FromColumns не такая капризная, она сама добивает столбцы пустотами и формирует таблицу, поэтому такое сочетание самое простое и динамичное.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Упростил выражение, это алгебра 5 класс
У нас от школы одни воспоминания :)  Помним что алгебра была, а с какого класса и тем более программы классов - не помним.
А Вы вот упростили выражение, а потом еще и провели соответствие к программе какого класса алгебры относятся упрощения подобных выражений. Надо же :excl:  8)  
 
PooHkrd, спс
Жаль, что тема появилась только сейчас (+ решение с комментариями)
Была задача, где можно было это решение использовать
Возможно будет еще возможность
 
Mirdv, да ладно, это просто вы плохо искали. Тут вопросы про расчеты с накоплением появляются с завидной регулярностью, Можете поискать посты от Андрей VG, Максим Зеленский, Андрей Лящук решения на базе List.Generate предлагались постоянно, т.к. эта функция реализует их лучше всего по быстродействию. Это просто я сам функцию освоил более-менее только с полгода-год назад и тоже начал предлагать по-маленьку.
Вот горшок пустой, он предмет простой...
 
PooHkrd, спорить не буду
Трудно уследить за всеми участниками форума, кто выкладывает решения, да и в большинстве случаев при поиске название темы не отражает содержания
Я учусь PQ на чужих решениях, сейчас уже ощущаю прогресс, а в начале было совсем тяжело
"Миллион" закладок на разные решения, большинство разобрать не получалось от слова - "совсем", решения скапливались, но не разбирались
Сейчас лучше, но еще учиться и учиться
Благодарен всем, кто помогает!
Страницы: 1
Наверх