【问题标题】:Aggregation with nestged groups in SQL Server Reporting ServicesSQL Server Reporting Services 中的嵌套组聚合
【发布时间】:2017-02-08 19:06:23
【问题描述】:

假设我们在 SSRS 报告中有以下数据结构:

区按城市分组,城市按国家分组。然后在国家一级,我想得到SUM 的城市人口(人口是城市的一个属性,而地区没有与之相关的人口)。目前,当使用=SUM(Fields!city_population.Value) 表达式完成聚合时,每个城市的人口数与其关联的地区数一样多——这是不正确的。

我正在考虑从没有按地区划分城市的补充数据集中获取数据以进行求和(借助 LookupSet 函数)。但它可能不支持按年计划进一步完成的另一个国家分组级别(无法弄清楚在这种布局中什么可以用作查找键)。有没有办法在不查找的情况下解决这种情况?

更新:需要说明的是,City-District 是一个单一的实体,对应于“市区或如果没有区则只是城市”。该实体是使用LEFT JOINthis question 中讨论的一种方法)在数据源视图中作为命名查询创建的。

【问题讨论】:

    标签: reporting-services aggregate ssrs-2008-r2 reportbuilder3.0


    【解决方案1】:

    从我所读到的内容中,我认为您是说根据城市记录人口,如果一个城市有 3 个区,那么您的数据集将返回城市 3 次,每个区具有相同的人口。 如果是这种情况,并且如果人口的表达式当前是 SUM(Fields!Population.Value) 或类似的,请尝试将其更改为 Max(Fields!Population.Value)。这不是一个“纯粹”的解决方案,但我认为结果会是你想要的,而且它是一个快速的解决方案。

    【讨论】:

    • 如果显示每个城市的人口,这种方法确实有效。但我需要显示一个国家的城市人口总和。尝试了以下表达式:SUM(MAX(FIELDS!city_population.Value,"group_city"), "group_country")。这个想法是在“城市”组的上下文中获得最大值(最小值或平均值也可以),然后在“国家”组的上下文中应用求和。但是“国家”级别的这样一个表达式给出了一个错误,指出子组上下文不能应用于 MAX。
    【解决方案2】:

    您在 tablix 中似乎没有正确的分组设置,在这种情况下不需要查找功能。

    将新的 tablix 组件添加到您的报告中,将 Country 字段拖放到 Row Groups 窗格上方的 details 默认组。

    右键单击Country 列并选择Insert Column / Inside Group

    在创建的列中输入标题标题并使用以下表达式

    =SUM(Fields!city_population.Value)
    

    然后将City字段拖放到详细信息上方和国家/地区下方:

    最后将District字段拖放到最右边的列:

    【讨论】:

    • 亚历杭德罗,谢谢你的回答。我的组结构与您所描述的相匹配(它是以相反的顺序创建的,从地区开始,然后到城市,然后到国家,但这不重要吗?)。我忘了提到 city-district 是一个单一的实体,对应于“city district 或者如果它没有地区,则只是城市”(创建为带有左连接的命名查询) - 我将用这个来更新问题,也许这就是这种聚合行为的原因。
    • @AndreyGrachev,你的数据集的结构是什么。即,运行查询时获得的列是什么?
    • 数据集是从smdl模型中获取的。该模型在城市 City-District 实体(在 City 和 District 表之间具有左连接的命名查询)和 Country 实体(Country 表)之间具有外键关系。至于列名 - 这是一个与我试图解决的问题相关的简化结构,问题实际上与城市、国家等无关,所以我没有确切的列名。这更像是一个抽象问题——我目前得到的结果实际上与我对它应该如何工作的理解相匹配。这不是我想要达到的目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多