Страницы: 1
RSS
PQ. Суммирование значений двух столбцов в третьем
 
Добрый день,
помогите с элементарной задачей, над которой я бьюсь, тем не менее, уже 2 дня.
Есть таблица, в ней несколько столбцов, с том числе 2 числовых (или с датами, например). Хочу в некий третий ИМЕЮЩИЙСЯ столбец (не важно, что находится в нем до операции) записать сумму (разность, произведение - не важно) двух этих. Делаю так:
Код
let
    Source = Table.FromList({"0".."9"}),
    #"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1),
    #"Added Index1" = Table.AddIndexColumn(#"Added Index", "Index.1", 1, 1),
    #"Added Index2" = Table.AddIndexColumn(#"Added Index1", "Index.2", 1, 1),
    #"Sum up 0+1" = Table.TransformColumns(#"Added Index2", {{"Index.2", each [Index] + [Index.1], type number}})
in
    #"Sum up 0+1"
(первая строка просто, чтобы был хоть какой-то источник данных)

Получаю то, что на скриншоте. Почему возникает ошибка Expression.Error: We cannot apply field access to the type Number. и как ее исправить? При этом, если ДОБАВЛЯТЬ новый столбец и делать операцию в нем, то все, есс-но, работает.

Спасибо!
 
Цитата
voodoo написал:
Хочу в некий третий ИМЕЮЩИЙСЯ столбец (не важно, что находится в нем до операции) записать сумму (разность, произведение - не важно) двух этих
не получится. а можно узнать - зачем и для чего это все?
 
не получится?
по моему НЕпрофессиональному(!) мнению (не претендуя ни на какую истину), это однозначно должно получаться
видел кучу роликов в ютьюбе, где производятся операции в имеющемся столбце, только там использовались данные самого этого столбца (что, по своему прикольно), а вот чтобы в него записывались операции с данными из других столбцов (что вроде как проще), не нашел просто
...зачем нужно - очевидно, чтобы вместо трех команд (добавить столбец с операцией, удалить старый, переименовать новый в старый) обойтись одной
 
voodoo, делали бы просто новый столбец :)
Вариант простой:
Код
let
  Source          = Table.FromList ( { "0" .. "9" } ),
  #"Added Index"  = Table.AddIndexColumn ( Source, "Index", 0, 1 ),
  #"Added Index1" = Table.AddIndexColumn ( #"Added Index", "Index.1", 1, 1 ),
  #"Added Index2" = Table.AddIndexColumn ( #"Added Index1", "Index.2", 1, 1 ),
  #"Sum up 0+1"   = Table.ReplaceValue ( #"Added Index2", each [Index.2], each [Index] + [Index.1], Replacer.ReplaceValue, { "Index.2" } )
in
  #"Sum up 0+1"

Вариант пошустрее:
Код
let
  Source = Table.FromList ( { "0" .. "9" } ),
  #"Added Index" = Table.AddIndexColumn ( Source, "Index", 0, 1 ),
  #"Added Index1" = Table.AddIndexColumn ( #"Added Index", "Index.1", 1, 1 ),
  #"Added Index2" = Table.AddIndexColumn ( #"Added Index1", "Index.2", 1, 1 ),
  typed = Table.TransformColumnTypes ( #"Added Index2", { { "Index.2", type any } } ),
  #"Sum up 0+1" = Table.FromRecords (
    Table.TransformRows ( typed, ( r ) => Record.TransformFields ( r, { { "Index.2", ( x ) => r[Index] + r[Index.1] } } ) ),
    Value.Type ( typed )
  )
in
  #"Sum up 0+1"
Изменено: surkenny - 30.01.2022 15:15:34
 
Спасибо, surkenny
С новым столбцом, как говорится, любой дурак сможет ))
Только вот с ним вместо одной операции придется делать аж 4 - добавить столбец с операцией, удалить старый, переименовать новый в старый, переместить новый на место старого
А меня таблица столбцов на 50, строк на несколько тыщ и мне не один такой имеющийся столбец нужно "вычислить", а с десяток...

Я вот только понять не могу, почему нельзя это сделать через Table.TransformColumns, а через Table.ReplaceValue, как  у Вас, это получается...?
 
результат на Table.FromColumns ( {{ 0 .. 100000 }} )

ответ, думаю очевиден
Изменено: Антон - 30.01.2022 17:31:16
 
Цитата
написал:
вместо трех команд (добавить столбец с операцией, удалить старый, переименовать новый в старый)
В примере вы не оперируете данными из столбца, так какая разница?
 
Цитата
написал:
результат на Table.FromColumns ( {{ 0 .. 100000 }} )  
Значения в таблице - время, полагаю?
...Ок, уговорили )) Решил просто "убить" изначально в исходнике эти "вычисляемые" столбцы, а потом - через добавление новых (остается гемор с перемещением всех этих новых столбцов на правильные места, ну да ладно...)

спасибо!
 
Цитата
написал:
остается гемор с перемещением всех этих новых столбцов на правильные места
Table.ReorderColumns - вторым аргументом список из наименований столбцов
можете его подготовить заранее и просто вставить в функцию
 
, ага, спасибо, тут уж что-нибудь придумаю; это уже не бином Ньютона ))
Страницы: 1
Наверх