代码之家  ›  专栏  ›  技术社区  ›  Fame th

RDLC报告-错误Rownumber()不能在筛选器中使用

  •  5
  • Fame th  · 技术社区  · 9 年前

    我有两个Tablix(表)和一个数据集。 它们与此数据集绑定

       Serial No.  |      Name    
     ______________|________________
        SN0003     |      Beckham
        SN0005     |      Henry
        SN0012     |      Rooney
        SN0119     |      Ji Sung
        SN0200     |      Gerrard
    

    在我的报告中,我需要拆分两个表格 它将显示如下。。。

    (在“上到屁股”之前是“从左到右”)

       Serial No.  |      Name        ||    Serial No.  |    Name
     ______________|________________  || _______________|______________
        SN0003     |      Beckham     ||     SN0005     |    Henry        
        SN0012     |      Rooney      ||     SN0119     |    Ji Sung
        SN0200     |      Gerrard     ||                |
    

    左表为Tablix1 右表为Tablix2

    我想对每个tablix使用这个FilterExpression。

          = RowNumber(Nothing) mod 2 = 0 
    

    对于Tablix1(左表)

          = RowNumber(Nothing) mod 2 = 1
    

    对于Tablix2(右表)

    但这是错误的消息。。。

         "A FilterExpression for tablix ‘Tablix1’ uses the RowNumber function.
          RowNumber cannot be used in filters."
    

    它不能在筛选器中使用Rownumber。 我该怎么办?如果我不编辑数据集,有可能吗。

    2 回复  |  直到 9 年前
        1
  •  6
  •   Jonnus    9 年前

    您是否可以首先编辑正在接收的数据集?您可以添加 ROW_NUMBER 通过使用

    SELECT
      ...,
      ROW_NUMBER() OVER(ORDER BY SerialNo ASC) AS RowNum,
      ...
    

    那么返回的数据集将如下所示

       Serial No.  |      Name      |  RowNum
     ______________|________________|__________
        SN0003     |      Beckham   |   1
        SN0005     |      Henry     |   2
        SN0012     |      Rooney    |   3
        SN0119     |      Ji Sung   |   4
        SN0200     |      Gerrard   |   5
    

    然后你可以在 RowNum mod 2 = 0

    编辑

    或者,如果无法更改基础数据集,可以使用RunningValue和CountDistinct。

    CountDistinct 将为每一行提供数据集中匹配的行数(因此,假设序列号是唯一的,通常为1)

    RunningValue 将为您提供一个表中每一行的值总数……使用此选项,您可以将所有“CountDistincts”相加。

    将表的行可见性设置为

    对于Tablix1

    =(RunningValue(CountDistinct(Fields!SerialNo.Value), Sum, "DataSetName") mod 2) = 0
    

    对于Tablix2

    =(RunningValue(CountDistinct(Fields!SerialNo.Value), Sum, "DataSetName") mod 2) = 1
    
        2
  •  0
  •   Fame th    9 年前

    谢谢,乔纳斯

    这是我的数据表。我为存储seq_no创建了新列。 通过右键单击>添加列并更改名称“SEQ_NO” enter image description here

    下一步,我用vb编码,将值设置为SEQ_NO列

                    Dim dt As dsProductionControl.TL_PRODUCTION_SCHEDULE_DETAILSDataTable = DsProductionControl.TL_PRODUCTION_SCHEDULE_DETAILS
    
                    For i As Integer = 1 To dt.Rows.Count
                        dt.Rows(i).Item("SEQ_NO") = i
                    Next i
    

    并通过SEQ_NO在报告的Tablix中设置Filter

            =Fields!SEQ_NO.Value Mod 2 = 0
    

    再次感谢乔纳斯。