【问题标题】:Relantionships between tables with duplicates (Excel)具有重复项的表之间的关系 (Excel)
【发布时间】:2021-01-29 10:01:58
【问题描述】:

我正在尝试加入两个有(并且需要有)重复的数据集。

以下是两个表的虚拟数据示例:

t.componentsneeded
ORDER    PRODUCT   PENDINGSALES    components    component_stock    
 1        REF1         100           COMP1            50              
 1        REF1         100           COMP2            100            
 1        REF1         100           COMP3            50             
 2        REF1         200           COMP1            50              
 2        REF1         200           COMP2            100             
 2        REF1         200           COMP3            50              

我想将第一张桌子和另一张桌子一起加入:

t.pendingtoarrive
ORDER DATE    ARRIVAL DATE    PURCHASE_ORDER   COMPONENT     UNITS
01/11/2020    01/12/2020          1              COMP1        100
15/11/2020    15/12/2020          2              COMP1        100
01/12/2020    01/01/2021          3              COMP1        50

第一个数据集以如下表格为轴:

FILTER ORDER: ALL                               (COLUMN I WOULD JOIN)
COMPONENT       NEEDED        STOCK     TO_BUY      TO_ARRIVE
COMP1            300           50         250           250
COMP2            300           100        200            -
COMP3            300           50         250            -

我尝试创建一个没有重复值 (COMPONENT) 的新表来连接两个表。但是,然后数据透视表将来自 t.pendingtoarrive 的总单位相加,而不使用来自 t.componentsneeded 的过滤器(唯一要记住的过滤器是“组件”)。我想这样做,以便最终用户可以双击 TO_ARRIVE 中的值,它会打开包含数据的表。如果有任何其他方法可以实现相同的目标......

谢谢。任何帮助将不胜感激

【问题讨论】:

  • 我不明白您如何获得在表 1 的数据透视表中为 STOCK 列显示的结果。它似乎是通过对特定组件的 component_stock 列求和确定的数量的 1/2。它总是1/2吗?或者还有其他方法可以计算吗? (也许按订单数量?
  • @RonRosenfeld 这是平均水平。 COMP1 有 50 个库存,我不希望它汇总不同的订单或产品。每行总是 50 个

标签: excel pivot-table powerpivot


【解决方案1】:

您可以使用 Excel 2010+ 中提供的 Power Query 执行此操作 您执行Nested Join 并提取适当的值

  • 确保您的两个数据集设置为Tables
    • 记录表名
  • 通过以下任一方式打开 PQ 编辑器
    • 打开一个空白查询或
    • 在数据集 1 和Data => Get & Transform => from Table/Range 中选择一个单元格
  • Home/Advanced Editor 并将下面的代码粘贴到编辑器中
    • 更改相应行中的表名以反映您的实际表名
    • 检查 Applied Steps 窗口和代码,看看它是如何完成的。

M 码

let
    //Get data set 1
    Source = Excel.CurrentWorkbook(){[Name="needed"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ORDER", Int64.Type}, {"PRODUCT", type text}, {"PENDINGSALES", Int64.Type}, {"components", type text}, {"component_stock", Int64.Type}}),

    //Group by component to generate "pivot"
    //Note that "needed" is a SUM, and "stock" is an AVERAGE
    #"Grouped Rows" = Table.Group(#"Changed Type", {"components"}, {
            {"NEEDED", each List.Sum([PENDINGSALES]), type nullable number}, 
            {"STOCK", each List.Average([component_stock]), type nullable number}
            }),

    // Generate the "to buy" column
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "TO_BUY", each [NEEDED]-[STOCK]),

    //Get data set 2
    Ordered = Excel.CurrentWorkbook(){[Name="pendingArrive"]}[Content],
    #"Changed Type1" = Table.TransformColumnTypes(Ordered,{{"ORDER DATE", type date}, {"ARRIVAL DATE", type date}}),

    //Join with set 1
    join = Table.NestedJoin(#"Added Custom","components",#"Changed Type1","COMPONENT","Joined"),

    //extract total for each componennt
    #"Added Custom1" = Table.AddColumn(join, "TO_ARRIVE", each List.Sum(Table.Column([Joined],"UNITS"))),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"Joined"})
in
    #"Removed Columns"

【讨论】:

  • 谢谢,但遗憾的是我认为我需要它作为 Pivot,因为某些字段是使用 DAX 计算的。如果我按照您说的方式进行操作,用户是否可以双击 TO_ARRIVE 列打开数据集?
猜你喜欢
  • 2012-09-10
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 2023-02-22
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多