将表中的同一列乘以多列的递归表达式

时间:2018-12-24 01:01:49

标签: powerquery m

我有一张表格-每行都有用于表示不同类别百分比的列以及用于总计值的列,我想通过将总值乘以每个类别百分比来计算每个类别的值。

我有一个表,对于其他各列(Market Cap.LargeMarket Cap.Medium等-除Symbol以外的所有列),我想将其乘以{{1} }列。我可以手动执行此操作,并为每行添加一列(下面的Current Value行),但是列数可能会增加,标题可能会更改,因此我不想为每个输入一个自定义列

是否有一个递归表达式为每个现有的列创建一个新列,并将其乘以#"Added Custom"-我猜它会涉及为列名创建一个参数,但是我不是有关如何做的足够的知识。

table

Current Value

1 个答案:

答案 0 :(得分:1)

未经测试,写在电话上,但我认为您想做的是:

  1. 创建要与List列相乘的列Current Value(除SymbolCurrent Value以外的所有列)。

    < / li>
  2. 使用List遍历这个新创建的List.Accumulate,并为此在列表中的每一列添加一列(在每次循环迭代期间调用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是否正确(在循环中)并且我无权访问要测试的机器,但是应该很容易检查输出是否是您所需要的期待。