【问题标题】:SSRS Row Group + Column Group = RowNumber IssueSSRS 行组 + 列组 = 行号问题
【发布时间】:2010-12-22 00:54:12
【问题描述】:

我又带着另一个 SSRS 问题回来了 :-)

我正在处理调查数据。我有一个程序可以返回组织对每个问题的响应计数。所以我的报告被定义为行的组织组和列的答案组。组织的数量和答案都是可变的。这按预期工作。我尝试在组织旁边添加一个 RowCount 以便我可以显示排名,但每个组织每个问题都有一行的事实意味着我每个组织得到八行。

这是一个例子:

这是我的报告定义:

排名表达式目前为:=RowNumber(Nothing)

理想情况下,排名应该是 1、2、3、4 等...我已经尝试了行组、列组的范围,什么都没有。没有帮助。

任何帮助将不胜感激!

【问题讨论】:

    标签: reporting-services row-number


    【解决方案1】:

    我通过在 SQL 查询中使用窗口函数得到它,这可以正确计算列集中的行数。

    dense_rank() over (partition by mgr.employee_sk order by e.employee_sk) as row_format

    mgr.employee_sk 是我的 Lvl 2 行组,e.employee_sk 是我的 Lvl 3 行组(详细级别)。

    然后 SSRS 表达式从查询中引用此列。为了避免它聚合,我使用了一个 min 函数,并且为了避免它不显示在列组的所有列中没有数据的行,我将范围指定为我的 3 级行组。

    =Iif(min(Fields!row_format.Value, "Employee") mod 2 = 1, "white", "aliceblue")

    【讨论】:

      【解决方案2】:

      有同样令人沮丧的问题;浪费了很多时间。最终,这个解决方案也有所帮助:

      =RunningValue(CountDistinct("YourTableName"),Count,"YourTableName")
      

      这里的技巧不是使用表/矩阵中的组名,而是使用表本身的名称。是的,有人会认为在函数 RowNumber 中使用表名作为范围应该可以工作,但事实并非如此。

      【讨论】:

      • 谢谢,这解决了困扰我好几天的问题。
      • 为此+1 ..这有助于创造奇迹!我的表名是 DataSet 的名称
      • 我认为我们应该输入 DataSetName 而不是 "YourTableName" - 所以它会类似于 =RunningValue(CountDistinct("YourTableName"),Count,"YourDataSetName")
      【解决方案3】:

      我使用自定义代码。

      将此添加到报告配置的代码部分:

      Dim private count as integer = 0
      Dim private iniRow as integer = 0
      Public function nroFila(Byval rowNum as integer) as integer
          if iniRow = 0 then
              iniRow = rowNum
          end if
      
          if rowNum = iniRow then
              count = 0
          end if
      
          count = count + 1
          Return count
      End function
      

      然后,在组内的一个单元格中调用函数:

      =Code.nroFila(RowNumber(Nothing))
      

      【讨论】:

        【解决方案4】:

        尝试使用:

        runningvalue(Fields!AnswerText.Value,CountDistinct,"NameOfOrganizationGroup") 
        

        如果是矩阵,则将范围名称从行范围更改为矩阵范围。

        【讨论】:

          【解决方案5】:

          您确定使用RowNumber("NameOfOrganizationGroup") 不起作用吗?

          点击矩阵,点击左上角选择框选择整个东西,然后在选择边框上右击,获取属性。切换到“组”选项卡并查看 部分中的组名称。这就是 RowNumber() 函数的范围。

          如果您已经知道并尝试过,我很抱歉——我并不是要假设您不知道。从您的问题来看,这不是解决方案并不是 100% 清楚。

          【讨论】:

            【解决方案6】:

            我似乎找到了解决方案,但感觉就像是 hack……我不回答这个问题,看看其他人是否可以提供更好的解决方案(少读一些 hackish)。

            我的排名表达式现在是:
            =RowNumber(Nothing)/Count(Fields!AnswerText.Value)

            一切似乎都很好。我想我应该 IIf(Count... = 0, Then RowNumber, else what I've got...

            【讨论】:

            • 没有其他任何东西出现,这种方法虽然看起来像一个黑客,但它是有效的。对我来说,如果它显示聚合数据,它应该 RowNumber 聚合而不是原始数据......
            • 注意:此方案仅适用于每个组包含相同数量的详细记录时。
            【解决方案7】:

            在现有列旁边添加另一个排名列,并在其中放入另一个表达式,该表达式从排名(行数?)中获取值并将其除以 8。然后使旧排名列不可见。

            【讨论】:

              【解决方案8】:

              最好的办法是让 Rank 列等于 =RowCount()/8

              由于您确定每个可见行总共包含 8 行,因此应该可以正常工作。

              【讨论】:

              • 乔恩,感谢您的回复。问题是我忘了提到答案的数量是可变的......我忘了提到......
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-10-11
              • 1970-01-01
              • 1970-01-01
              • 2017-06-11
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多