从日期的MAX返回其他列值

时间:2015-02-17 08:58:02

标签: reporting-services reportbuilder3.0

我正在使用报表生成器3而我试图根据同一记录中另一个字段(日期)的最大值从记录中返回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 Check金额,例如:

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

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

简而言之,从上面的数据集中我将寻找以下内容。我在报表生成器中有一个组 - Cust和我没有详细信息部分

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

我通常擅长寻找这些类型问题的答案,但对于这一点,我已经画了一个完整的空白!任何人都可以帮忙吗?

提前致谢...

2 个答案:

答案 0 :(得分:1)

感谢您的努力,我已将您的答案标记为已被接受。使用Lookupset是关键。事实证明,使用你答案中的确切代码给了我一个很长的连锁列表,其中几乎所有的日期或金额字段来自每个" check"记录。我发现RevInStr正在从字符串的右侧查找逗号的第一个出现位置。所以权利在那之后展示了一切。为了让它适合我,我使用了InStr(StrReverse来计算我需要的字符数。

我不确定有关评论与答案的礼节,但我无法收到评论以包含我的解释和代码。我想我应该发布我的更改,以防其他人帮助......

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

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

答案 1 :(得分:0)

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

查找看起来是一个更好的选择,但它返回第一个值但不是最后一个。 LookupSet返回所有值,然后使用Right函数可以“剪切”最后一个值。

上次日期:=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)

enter image description here