Power Query 表中的网络流数据库
Posted
技术标签:
【中文标题】Power Query 表中的网络流数据库【英文标题】:Network flow database in Power Query table 【发布时间】:2017-12-15 01:36:42 【问题描述】:我有以下 Excel 表格:
给出了 A、B 和 D 列(数据)。计算其他列。每一列中的公式如下所示。
给定 A、B 和 D 列,是否可以使用 Power Query 创建此表?
【问题讨论】:
这对我来说就像一个循环定义。 F 列是根据引用 F 列的 C 列定义的。 【参考方案1】:可以使用其中一种循环机制来完成:List.Generate、List.Accumulate 或递归函数。
由于已知迭代次数,我更喜欢 List.Accumulate。
在下面的查询中,List.Accumulate 构建了一个记录列表,其中包含必须添加到 Source 的字段。
结果表是通过列值列表和新表类型构建的。
let
Source = Table1,
IncomingSupplies = List.Buffer(Source[Incoming Supply]),
GenerateFlow =
List.Accumulate(
List.Skip(IncomingSupplies),
[Beginning On Hand Inventory = Source[Starting Inventory]0,
Shipments = 0.5 * #"Beginning On Hand Inventory",
Ending On Hand = #"Beginning On Hand Inventory" + IncomingSupplies0 - Shipments],
(Result,Supply) =>
Result &
[Beginning On Hand Inventory = List.Last(Result)[Ending On Hand],
Shipments = 0.5 * #"Beginning On Hand Inventory",
Ending On Hand = #"Beginning On Hand Inventory" + Supply - Shipments]),
NewTableType = Value.Type(Table.AddColumn(Source,"Records",each [], type[])),
CombineSourceAndFlow = Table.FromColumns(Table.ToColumns(Source)&GenerateFlow,NewTableType),
ExpandFlow = Table.ExpandRecordColumn(CombineSourceAndFlow, "Records", "Beginning On Hand Inventory", "Shipments", "Ending On Hand"),
Typed = Table.TransformColumnTypes(ExpandFlow,"Beginning On Hand Inventory", Int64.Type, "Shipments", Int64.Type, "Ending On Hand", Int64.Type),
Reordered = Table.ReorderColumns(Typed,"Month", "Starting Inventory", "Beginning On Hand Inventory", "Incoming Supply", "Shipments", "Ending On Hand")
in
Reordered
【讨论】:
感谢您的解决方案。效果很好!需要看看这是否可以扩展。以上是关于Power Query 表中的网络流数据库的主要内容,如果未能解决你的问题,请参考以下文章