根据条件在 Power BI 中查找多个值的值

LOOKUP Value in Power BI for multiple values based on condition

我知道有很多问题与在 power bi 中查找值有关。但是,我的问题与根据条件查找多个值有关。

情况描述:

我在 power bi 中有两个 table,其中一个 table 有产品代码、组件代码、最后日期(与产品相关)和组件成本。另一个 table 具有相同的 headers,但不包括最后日期,因为这些组件由多个产品共享。这些代码是从第一个 table 中提取的,并从第一个 table 中删除。而在第一个 table 中,组件出现在不同产品代码的前面,并且它有自己的行,其中有成本和产品代码是“共享的”。因此,在第一个 table 中,我将它们放在产品代码的前面,并且基于这些组件代码,我想从第二个 table 中查找成本以将其作为附加列。

我想根据一个条件查找值,如果产品有多个最后日期,return具有最后日期的产品的组件成本。

首先table:

第二个table:

想要的结果:

很抱歉添加图片,因为 table 格式化无效。

如果有什么公式可以达到这个结果就好了。到目前为止,我已经尝试使用 lookupvalue (DAX) 和 list.positionof (M Query) 函数。他们两个都给我错误,你能帮忙解决这个问题吗?

M 中的两种方法

1 -- 对 material 代码进行分组并提取日期的最大值。扩张。合并成本。添加自定义列,以便如果行上的日期等于最大日期,则使用成本,否则为零

假设另一个 table 是一个名为 Table2 的查询,如图所示

let  Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Material code", type text}, {"Product code", Int64.Type}, {"Last Date", type date}, {"Costs", Int64.Type}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Material code"}, {
    {"data", each _, type table [Material code=nullable text, Product code=nullable number, Last Date=nullable date, Costs=nullable number]},
    {"max", each List.Max(_[Last Date]), type date}
    }),
#"Expanded data" = Table.ExpandTableColumn(#"Grouped Rows", "data", {"Product code", "Last Date"}, {"Product code", "Last Date"}),
#"Merged Queries" = Table.NestedJoin(#"Expanded data", {"Material code"}, Table2, {"Material code"}, "Table2", JoinKind.LeftOuter),
#"Expanded Table2" = Table.ExpandTableColumn(#"Merged Queries", "Table2", {"Costs"}, {"Costs2"}),
#"Added Custom" = Table.AddColumn(#"Expanded Table2", "Costs", each if [Last Date]=[max] then [Costs2] else 0),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"max", "Costs2"})
in #"Removed Columns"

2——如果你想得到所有花哨的东西,你可以在添加到 Table1 的单个自定义列中执行此操作,但对于非常大的数据集来说它可能会很慢

 #"Added Custom" = Table.AddColumn( #"PriorStepName","CostTable", (i)=>if i[Last Date]= List.Max(Table.SelectRows(#"PriorStepName",each [Material code]=i[Material code])[Last Date]) then Table.SelectRows(Table2, each [Material code]=i[Material code]) [Costs]{0}  else 0)