是否可以根据多个条件在PowerBi中查找值

问题描述 投票:0回答:1

我有以下两张表:

“行程数据”

“IVMS 数据”

我需要从“IVMS 数据”中选取与“行程数据”中正确行相对应的“输入时间”值,并将其作为列添加到该表中。

需要匹配 3 项:

  • 卡车
  • 加载位置/位置
  • 加载时间/输入时间

我面临的挑战是加载时间永远不会与输入时间匹配,但它将在输入和退出时间值内。

这是我可以在 PBI/DAX 中实现的东西,还是我需要用另一种语言来实现这一点,然后将其拉入 PBI 来报告?

最终的游戏是将行程、输入时间和退出时间全部拉到“行程数据”,但我认为我可以为所有这三个元素重新使用此解决方案

dax
1个回答
0
投票

使用强大的查询语言,我将定义一个名为

fEnterTimeFromTripRecord
的函数查询,给定
#"Trip Data"
中的一行,将返回输入时间。我希望以下内容会起作用...

let
  // Stage this data up front instead of redoing it each time the function is called
  Grouped = Table.Group(
    #"IVMS Data",
    {"Truck", "Location"},
    {
      "Times",
      // table of enter and exit times for the given truck and location
      each Table.SelectColumns(
        _,
        {"Enter Time", "Exit Time"}
      )
    }
  )
in
  each let
    LoadTime = [Load Time],
    Times = Grouped{[
      Truck = [Truck],
      Location = [Load Location]
    ]}[Times]
    Filtered = Table.SelectRows(
      Times,
      each [Enter Time] <= LoadTime and [Exit Time] >= LoadTime
    ),
    EnterTimes = Filtered[Enter Time],
    // There should be exactly one row in Filtered,
    // therefore one element in EnterTimes.
    // Otherwise, we have a problem and should throw an error!
    EnterTime = List.Single(EnterTimes)
  in
    EnterTime

一旦你调试了它,并且你有了一个从

#"Trip Data"
表中获取一行并返回输入时间的函数,剩下的就很简单了。

let
  Source = #"Trip Data",
  #"Added Enter Time" = Table.AddColumn(
    Source,
    "Enter Time",
    fEnterTimeFromTripRecord,
    type datetime
  )
in
  #"Added Enter Time"
© www.soinside.com 2019 - 2024. All rights reserved.