Return 日期的 MAX 中的其他列值

Return other column value from MAX of date

我正在使用 Report Builder 3,我正在尝试根据同一记录中另一个字段(日期)的最大值从记录中 return 1 个值(金额)。我的数据看起来像这样:

Type          Date          Amount       Cust
-----------------------------------------------------

Credit        2015-01-01    10           A
Inv           2015-01-01    11           A
Check         2015-01-01    12           A
Check         2015-01-02    13           A
Inv           2015-01-02    12           A

事实上,我需要 2 个字段 - 最后检查日期和最后支付金额。我可以获得的最后检查日期:

=Max(iif(Fields!type.Value = "CHECK", Fields!date.Value, Nothing))

我的数据是按日期顺序排列的,所以我希望类似的东西可以用来获取上次支票金额,例如:

=Last(iif(Fields!type.Value = "CHECK", Fields!amount.Value, Nothing))

但我认为这是在寻找整个数据集中的最后一条记录,如果它是 type = check,那么它会给我数量,否则什么也不会。不幸的是,最后的记录往往不是支票。这种方法导致不显示任何内容。我还尝试将 "last" 包装在 iif 中,但这具有相同的效果。

简而言之,根据上述数据集,我希望生成以下内容。我在报表生成器中有一组 - Cust,但我没有详细信息部分

Cust              A
Last Chk Date     2015-01-02
Last Chk Amt      13

我通常很擅长寻找这类问题的答案,但对于这一个,我一无所知!有人可以帮忙吗?

提前致谢...

不确定这是最好的解决方案,但您可以尝试将表达式与 Lookup 或 LookupSet 函数一起使用。

查找看起来是一个更好的选择,但它 returns 第一个值而不是最后一个值。 LookupSet returns 所有值,然后使用 Right 函数可以 "cut" 最后一个值。

最后一个日期:=Right(Join(LookupSet("Check",Fields!Type.Value,Fields!Date.Value,"DataSet1"),","),InStrRev(Join(LookupSet("Check",Fields!Type.Value,Fields!Date.Value,"DataSet1"),","),",")-1)

最后金额:=Right(Join(LookupSet("Check",Fields!Type.Value,Fields!Amount.Value,"DataSet1"),","),InStrRev(Join(LookupSet("Check",Fields!Type.Value,Fields!Amount.Value,"DataSet1"),","),",")-1)

感谢您的努力,我已将您的回答标记为已接受。使用 Lookupset 是关键。事实证明,使用您答案中的确切代码为我提供了一个很长的串联列表,其中包含每个 "check" 记录中几乎所有日期或金额字段。我发现 RevInStr 正在寻找字符串右侧 first 出现的逗号。所以 Right 显示了之后的所有内容。为了让它为我工作,我使用 InStr(StrReverse 计算出我需要的字符数。

我不确定关于评论与答案的礼节,但我无法获得包含我的解释和代码的评论。我想我应该 post 我的改变,以防这对其他人有帮助...

=Right(Join(LookupSet("Check", Fields!type.Value, Fields!date.Value, "credit"), ","), InStr(StrReverse(Join(LookupSet("Check", Fields!type.Value, Fields!date.Value, "credit"), ",")), ",") - 1)

再次感谢迈克尔的帮助,非常感谢。