我有以下两张表:
“行程数据”
“IVMS 数据”
我需要从“IVMS 数据”中选取与“行程数据”中正确行相对应的“输入时间”值,并将其作为列添加到该表中。
需要匹配 3 项:
我面临的挑战是加载时间永远不会与输入时间匹配,但它将在输入和退出时间值内。
这是我可以在 PBI/DAX 中实现的东西,还是我需要用另一种语言来实现这一点,然后将其拉入 PBI 来报告?
最终的游戏是将行程、输入时间和退出时间全部拉到“行程数据”,但我认为我可以为所有这三个元素重新使用此解决方案
使用强大的查询语言,我将定义一个名为
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"