Страницы: 1
RSS
PQ. Применение фнкции Table.AddColumn к списку имён добавляемых полей
 
Уважаемые форумчане, добрый день!

Прошу помощи. Есть список полей для добавления к исходной таблице. В процессе добавления образуемые столбцы необходимо заполнить.
Во вложенном файле Таблица1 - исходная, её нужно дополнить полями из таблицы2, строки заполнить значениями, выдаваемыми функцией.

Пример схематичный, вопрос в том, как организовать множественное применение табличной функции (в данном случае Table.AddColumn) к списку полей.
Возможно ли это?

Спасибо.
Изменено: quasarrr - 14.04.2020 12:12:54
 
Доброе время суток.
А с дублями 4 вы что предлагаете делать в Таблица2? Фактически Pivot по этим полям не получиться. Можно конечно индексное имя создать, а в выводе просто скрыть заголовки - вы этого хотите?
Изменено: Андрей VG - 14.04.2020 12:01:15
 
Андрей VG,
С дублями я, конечно, погорячился... Убрал.

И ещё пояснюсь. Хочется понять принцип "массового" применения к списку полей таблицы функции, которая не предусматривает передачу ей такого списка, а предусматривает передачу текстовым полем по одиночке. Что-то вроде цикла..
Если это возможно.
Изменено: quasarrr - 14.04.2020 12:21:49
 
Тогда такой вариант
 
Андрей VG,  спасибо.

Ещё вопрос, a AddColumn здесь применить проблематично? Я к тому, что данное решение всё-таки частное, и если потребуется функция посложнее, чем умножение, то его уже не применить.

А хотелось бы более-менее универсального алгоритма, если можно.  
 
Цитата
quasarrr написал:
потребуется функция посложнее, чем умножение,
Думаю, тогда стоит привести пример. В любом же случае остаётся вопрос, как вы будете ассоциировать некоторую функцию с парой значения первой таблицы и значения второй? Вот вариант с последовательным добавлением столбцов, делающий ровно тоже (и скорее всего медленнее).
Код
let
    table1 = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    consts = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content][Список полей],
    fn = (const, item) => const * item,
    accItems = List.Transform(consts, each [value =_, function = fn]),
    result = List.Accumulate(accItems, table1, (acc, next) =>
    let
        nextName = Text.From(next[value])
    in
        Table.AddColumn(acc, nextName, each next[function](_[Поле1], next[value]))
    )
in
    result
Изменено: Андрей VG - 14.04.2020 14:26:18
 
Еще вариант
Код
// Таблица2
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    Custom1 = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Add = Table.AddColumn(Custom1, "a", each [a=Source[Список полей],b=[Поле1],c={b}&List.Transform(a, each _ * b)][c])[a],
    Custom2 = Table.FromRows(Add,List.Transform({"Поле1"}&Source[Список полей],Text.From))
in
    Custom2
 
Вот вам AddColumn, в конце прописываете свою функцию:
Код
= List.Accumulate(#"Список полей"[Список полей], Source, (s,c)=>Table.AddColumn(s, Text.From(c), each [Поле1] * c))

Второй вариант:

Если нужны какие-то другие принципы вычисления, вы их хоть наметьте, угадывать сложно
F1 творит чудеса
 
Андрей VG, Михаил Л, Максим Зеленский,

Большое спасибо!
Мастера, чё сказать   ;)  
 
Что-то пропустил темку.
Еще накину вариант:
Код
let
    list = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content][Список полей],
    table = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    AddCol = Table.AddColumn( table, "cols", each _ & Record.FromList( List.Transform( list, (x)=> x * [Поле1] ), List.Transform( list, Text.From ) ) )
in
    Table.FromRecords( AddCol[cols] )
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
пропустил темку
Я так понял что эта тема послужила поводом для этой темы)
 
del
Изменено: PooHkrd - 17.04.2020 16:34:00
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх