【发布时间】:2020-09-01 15:53:34
【问题描述】:
我有一个场景,我必须从一组日期计算股票的平均价格。考虑我有以下数据。
现在我想用以下格式表示数据:
每当在第一个表中添加新的脚本时,Above table 将存储平均价格。 我试过 AVERAGEIFS(),但它只计算单个列范围的平均值。但是我必须使用价格 * 给定股票范围内的数量来计算平均价格。 请提出建议。
【问题讨论】:
-
使用带有计算列的数据透视表。
我有一个场景,我必须从一组日期计算股票的平均价格。考虑我有以下数据。
现在我想用以下格式表示数据:
每当在第一个表中添加新的脚本时,Above table 将存储平均价格。 我试过 AVERAGEIFS(),但它只计算单个列范围的平均值。但是我必须使用价格 * 给定股票范围内的数量来计算平均价格。 请提出建议。
【问题讨论】:
您可以为此使用 Power Query(在 Excel 2010+ 中可用)。
在 Excel 2016+ 中(在早期版本中可能有所不同):
Data / Get & Transform / From Table/RangeAdvanced Editor
注意:在 UI 的“应用步骤”窗口中,将光标悬停在信息图标上以阅读 cmets 以获得解释。您还可以双击齿轮图标以了解有关如何设置这些步骤的更多信息
M 码
let
//Change Table name to correct name
Source = Excel.CurrentWorkbook(){[Name="Table6"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Stocks", type text}, {"Quantity", Int64.Type}, {"Date", type date}, {"Price", type number}}),
//Group by Stock
#"Grouped Rows" = Table.Group(#"Changed Type", {"Stocks"}, {{"Grouped", each _, type table [Stocks=nullable text, Quantity=nullable number, Date=nullable date, Price=nullable number]}}),
//Sum quantity for each stock
#"Added Custom1" = Table.AddColumn(#"Grouped Rows", "Quantity", each List.Sum(Table.Column([Grouped],"Quantity"))),
//Compute weighted average price for each group of stocks
#"Added Custom" = Table.AddColumn(#"Added Custom1", "Price", each List.Accumulate(
List.Positions(Table.Column([Grouped],"Quantity")),
0,
(state, current) =>state + Table.Column([Grouped],"Price"){current} *
Table.Column([Grouped],"Quantity"){current})
/ List.Sum(Table.Column([Grouped],"Quantity"))),
//Compute Total Amount for each stock
#"Added Custom2" = Table.AddColumn(#"Added Custom", "Amount", each [Quantity]*[Price]),
//Remove extraneous Columns
#"Removed Columns" = Table.RemoveColumns(#"Added Custom2",{"Grouped"})
in
#"Removed Columns"
【讨论】: