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 表中的网络流数据库的主要内容,如果未能解决你的问题,请参考以下文章

初涉网络流 POJ 1459 Power Network

POJ1459 Power Network(网络最大流)

如何减去 Power Query 数据透视表中的两列?

如何在 Power BI 中重置表中的数据

网络流之最大流

如何从 Power Query 的不同表中的 2 列中获取数据以汇总为 1 列?