Рекурсивное выражение для умножения нескольких столбцов на один и тот же столбец в таблице - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть таблица - в каждой строке есть столбцы для процентов различных категорий плюс столбец для общего значения, и я хочу рассчитать значение для каждой категории путем умножения общего значения на процент каждой категории.

У меня есть таблица, и для каждого из остальных столбцов (Market Cap.Large, Market Cap.Medium и т. Д. - все, кроме Symbol) я хочу умножить ее на столбец Current Value.Я могу сделать это вручную и добавить столбец для каждого (строка #"Added Custom" ниже), но количество столбцов может увеличиться, а названия могут измениться, поэтому я не хочу вводить пользовательский столбец для каждого.

Существует ли рекурсивное выражение для создания нового столбца для каждого из существующих и умножения его на Current Value - я предполагаю, что это потребует создания параметра для имени столбца, но я недостаточно осведомлен о том, как это сделать.

таблица

let
    Source = #"Portfolio %",
    #"Merged Queries" = Table.NestedJoin(Source,{"Symbol"},#"Current Output Aggregated",{"Symbol"},"Current Output Aggregated",JoinKind.Inner),
    #"Expanded Current Output Aggregated" = Table.ExpandTableColumn(#"Merged Queries", "Current Output Aggregated", {"Current Value"}, {"Current Value"}),
    #"Added Custom" = Table.AddColumn(#"Expanded Current Output Aggregated", "Market Cap.Giant Value", each [Market Cap.Giant]*[Current Value])
in
    #"Added Custom"

1 Ответ

0 голосов
/ 24 декабря 2018

Не проверено, написано на телефоне, но я думаю, что вы хотите сделать следующее:

  1. Создать List столбцов, которые вы хотите умножить на столбец Current Value (всестолбцы, за исключением: Symbol, Current Value).

  2. Зацикливание вновь созданного List с использованием List.Accumulate и добавление столбца для каждого столбца вlist (вызывая Table.AddColumn во время каждой итерации цикла).

Итак, что-то вроде приведенного ниже кода M (при необходимости скопируйте и вставьте приведенный ниже код в Advanced Editor):

let
    Source = #"Portfolio %",
    mergedQueries = Table.NestedJoin(Source,{"Symbol"},#"Current Output Aggregated",{"Symbol"},"Current Output Aggregated",JoinKind.Inner),
    expandedNested = Table.ExpandTableColumn(mergedQueries, "Current Output Aggregated", {"Current Value"}, {"Current Value"}),
    allHeaders = Table.ColumnNames(expandedNested),
    headersToLoopOver = List.RemoveItems(allHeaders, {"Symbol", "Current Value"})
    loopOverList = List.Accumulate(headersToLoopOver, expandedNested, (tableState, currentColumn) =>
        Table.AddColumn(tableState, currentColumn & " Value", each Record.Field(_, currentColumn) * [Current Value], type number)
    )
in
    loopOverList

Я не уверен, правильно ли я получил бит Record.Field (в цикле), и у меня нет доступа к машине для тестирования, но вам должно быть легко проверить, если выводэто то, что вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...