Страницы: 1
RSS
PQ: добавление столбца во вложеные таблицы
 
Привет!


Споткнулся вот о такой момент: условно, есть таблица из двух столбцов. В первом столбце (А) текстовые строки, во втором столбце (Б) - вложеные таблицы. Надо: добавить в каждую вложеную таблицу в столбце (Б) ещё один столбец, который бы содержал значение соответствующей текстовой строки из столбца (А)
 
А где вопрос?
 
Пробовал через transform.column и через table.addcolumn, но они работают в контексте вложеной таблицы и не хотят видеть данные из контекста 'внешней' таблицы. Возможно, вечер, и я жёстко туплю, но не получается)) да, можно столбец с таблицами раскрыть стрелками, но мне так не надо.
 
maca,
Код
let
    Source = #table({"text","tab"},{{"t", #table({"a","b"},{{1,2}})}}),
    Added = Table.AddColumn(Source, "tab2", each let x=[text] in Table.AddColumn([tab], "tab2", each x))
in
    Added
Вот горшок пустой, он предмет простой...
 
PooHkrd, спасибо огромное! Всегда приятно читать Ваши ответы, даже не на свои вопросы.Такой приём и с Transform.Column сработает?
 
maca, А какая разница?
Вот горшок пустой, он предмет простой...
 
Цитата
написал:
maca, А какая разница?
да вроде и никакой, но вот код ошибку выдаёт

let
   Source = #table({"text","tab"},{{"t", #table({"a","b"},{{1,2}})}}),
   Added = Table.TransformColumns(Source, { {"tab", each let x=[text] in Table.AddColumn([tab], "tab2", each x), type table} })
in
   Added
 
maca, в TransformColumns вы не сможете обратиться к значениям другого столбца. Можно использовать Table.ReplaceValue, но Table.TransformRows пошустрее:
Код
let
  Source = #table ( { "text", "tab" }, { { "t", #table ( { "a", "b" }, { { 1, 2 } } ) } } ),
  Added = Table.FromRecords (
    Table.TransformRows (
      Source,
      ( r ) =>
        Record.TransformFields (
          r,
          { { "tab", ( t ) => Table.AddColumn ( t, "tab2", each r[text] ) } }
        )
    ),
    Value.Type ( Source )
  )
in
  Added
Изменено: surkenny - 21.05.2022 07:36:30
 
Цитата
написал:
maca, в TransformColumns вы не сможете обратиться к значениям другого столбца. Можно использовать Table.ReplaceValue, но Table.TransformRows пошустрее:
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15      let        Source = #table ( {   "text"  ,   "tab"   }, { {   "t"  , #table ( {   "a"  ,   "b"   }, { { 1, 2 } } ) } } ),        Added = Table.FromRecords (          Table.TransformRows (            Source,            ( r ) =>              Record.TransformFields (                r,                { {   "tab"  , ( t ) => Table.AddColumn ( t,   "tab2"  , each r[text] ) } }              )          ),          Value.Type ( Source )        )    in        Added   
 
Спасибо! Как раз к похожему решению с stackoverwlow примеривался, как к крайнему варианту. Но хотелось, блин, элегантно через transform сделать, жаль никак. Этот вариант, когда въедешь, красивый, потенциал мощный, особенно на >1 обрабатываемом столбце, но несколько громоздкий ))
Изменено: maca - 21.05.2022 08:23:13
Страницы: 1
Наверх