我正在尝试根据另一个集合 A 的一列或多列的值从集合 B 中检索数据。
但是 LookUp 函数在这种情况下无法按预期工作。
ClearCollect(
A;
{
DateVal: DateValue("01/03/2024");
NNI: "A";
Presence: 0
};
{
DateVal: DateValue("04/03/2024");
NNI: "B";
Presence: 1
};
{
DateVal: DateValue("05/03/2024");
NNI: "C";
Presence: 0
};
{
DateVal: DateValue("06/03/2024");
NNI: "D";
Presence: 0
};
{
DateVal: DateValue("07/03/2024");
NNI: "E";
Presence: 0
}
)
;;
ClearCollect(
B;
{
DateVal: DateValue("01/03/2024");
DayNumber: 1
};
{
DateVal: DateValue("04/03/2024");
DayNumber: 4
};
{
DateVal: DateValue("05/03/2024");
DayNumber: 5
};
{
DateVal: DateValue("06/03/2024");
DayNumber: 6
};
{
DateVal: DateValue("07/03/2024");
DayNumber: 7
};
{
DateVal: DateValue("08/03/2024");
DayNumber: 8
}
);;
ClearCollect(
C;
ForAll(
A;
{
ADateVal: ThisRecord.DateVal;
BDayNumber: LookUp(B; DateVal = ThisRecord.DateVal; DayNumber)
}
)
)
这是我从 C 系列中获得的内容:
我希望为每一行检索与 DateVal 相对应的正确 BDayNumber,这对于两个集合来说是完全相同的。
在 LookUp 表达式中,有两个位置(范围)可以获取“DateVal”中的值(表 A 和表 B)。除非指定,否则该值将到达最近的范围,在本例中是表 B。ThisRecord 也是如此:ForAll 和 LookUp 都引入了这个新范围,并且它将使用最接近的范围。所以在表达式中
ForAll(
A;
{
ADateVal: ThisRecord.DateVal;
BDayNumber: LookUp(B; DateVal = ThisRecord.DateVal; DayNumber)
}
)
LookUp 表达式中的比较是将 B 表的 DateVal 属性与其自身进行比较 - 因此它将始终返回第一行。
您可以使用 As 关键字为表达式所使用的表“命名”,使其查看正确的范围,如下所示:
ClearCollect(
A;
{
DateVal: DateValue("01/03/2024");
NNI: "A";
Presence: 0
};
{
DateVal: DateValue("04/03/2024");
NNI: "B";
Presence: 1
};
{
DateVal: DateValue("05/03/2024");
NNI: "C";
Presence: 0
};
{
DateVal: DateValue("06/03/2024");
NNI: "D";
Presence: 0
};
{
DateVal: DateValue("07/03/2024");
NNI: "E";
Presence: 0
}
)
;;
ClearCollect(
B;
{
DateVal: DateValue("01/03/2024");
DayNumber: 1
};
{
DateVal: DateValue("04/03/2024");
DayNumber: 4
};
{
DateVal: DateValue("05/03/2024");
DayNumber: 5
};
{
DateVal: DateValue("06/03/2024");
DayNumber: 6
};
{
DateVal: DateValue("07/03/2024");
DayNumber: 7
};
{
DateVal: DateValue("08/03/2024");
DayNumber: 8
}
);;
ClearCollect(
C;
ForAll(
A As TableA;
{
ADateVal: TableA.DateVal;
BDayNumber: LookUp(B As TableB; TableB.DateVal = TableA.DateVal; TableB.DayNumber)
}
)
)