【问题标题】:SSRS Combining values within columns from multiple rows when groupedSSRS在分组时组合来自多行的列中的值
【发布时间】:2014-03-03 17:38:23
【问题描述】:

我觉得这在 SSRS 报告中应该相对容易做到。使用 VS 2010。我有一个来自基本 sql 查询的表。只需将列放入 Visual Studio 中的表中即可。我想首先按公司对表格进行分组,我通过行组属性来完成。我有一张看起来像这样的桌子。

 Company     Contact     ContactSub    SubCert    Year

  Bank3       Joey        Steven.B      A         2010
  Bank2       Dave        James         A         2010
  Bank2       Dave        Steve         B         2010
  Bank2       Dave        Mark          B         2010
  Bank2       Dave        James         A         2011
  Bank2       Dave        Steve         A         2011
  Bank2       Dave        Mark          B         2011
  Bank2       Dave        James         A         2012
  Bank2       Dave        Steve         A         2012
  Bank2       Dave        Mark          A         2012

我现在想将 Contact Subs 和他们的 subcert 合并成一行。但仅使用最近一年。因为某些 ContactSub 可能已将其 SubCert 从 B 升级到 A。

 Company       Contact            ContactSub            SubCert     Year

  Bank3         Joey             Steven.B               A           2010
  Bank2         Dave             James,Steve,Mark       A,A,A       2012

我在行中添加了一个额外的属性组,即“年份”列,并将此公式用于表中的 ContactSub 和 SubCert 列:

=Join(LookupSet(Fields!Company.Value,Fields!Company.Value,Fields!SubCert.Value,"DataSet Name"),",")

但这让我回来了:

 Company     Contact     ContactSub                 SubCert     Year

  Bank3       Joey        Steven.B                   A          2010
  Bank2       Dave        James,Steve,Mark,James     A,B,B,A,   2012
                          Steve,Mark,James, Steve    A,B,A,A,
                          Mark                       A

我如何澄清我的公式以使其仅适用于最近的年份,而不是使用所有年份的值?

希望这是有道理的。

【问题讨论】:

    标签: sql visual-studio-2010 visual-studio reporting-services


    【解决方案1】:

    使用您的数据:

    还有一张按Company分组的表格:

    我使用以下表达方式:

    ContactSub

    =Join(LookupSet(Fields!Company.Value & Max(Fields!Year.Value)
        , Fields!Company.Value & Fields!Year.Value
        , Fields!ContactSub.Value
        , "DataSet1"), ",")
    

    子证书

    =Join(LookupSet(Fields!Company.Value & Max(Fields!Year.Value)
        , Fields!Company.Value & Fields!Year.Value
        , Fields!SubCert.Value
        , "DataSet1"), ",")
    

    您可以看到我使用Max(Fields!Year.Value)Fields!Company.Value 仅匹配LookupSet 表达式中的最高年份。

    这给出了所需的结果:

    【讨论】:

    • 嗯......我似乎仍然得到同样的东西返回。我读过的所有内容也证实了你的回答。我一定是做错了什么。为什么你的 Year 列中也有一个表达式?那一栏是什么?
    • @dcdeez,为截图道歉,Year 中的表达式可以像Max(Fields!Year.Value)...时间 - 我现在已经更新了。也许像我作为对照那样根据一些样本数据开始新的测试报告将有助于解决您的其他问题。
    【解决方案2】:

    您的问题是它按预期工作 - LOOKUPSET() 函数正在返回公司匹配的数据集中的 所有 记录。您需要在使用 LOOKUPSET() 函数时收紧您的标准,或者添加一些自定义代码来遍历返回的数组并清除重复项。

    加强查找的一个选项可能是向您的数据集添加一个计算字段,该字段将公司名称和年份连接在一起,至少查看您的示例数据,这将提供稍微更独特的键正在寻找。

    【讨论】:

    • 上述建议的解决方案是否有任何理由不按日期过滤并仍然包含所有值?
    猜你喜欢
    • 1970-01-01
    • 2018-10-21
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多