RDLC报告 - 错误Rownumber()不能用于过滤器

Fam*_* th 5 rdlc rdl reporting-services dynamic-rdlc-generation

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

   Serial No.  |      Name    
 ______________|________________
    SN0003     |      Beckham
    SN0005     |      Henry
    SN0012     |      Rooney
    SN0119     |      Ji Sung
    SN0200     |      Gerrard
Run Code Online (Sandbox Code Playgroud)

在我的报告中,我需要拆分两个tablix它将显示如下...

(在"Up to Buttom"之前它是"从左到右")

   Serial No.  |      Name        ||    Serial No.  |    Name
 ______________|________________  || _______________|______________
    SN0003     |      Beckham     ||     SN0005     |    Henry        
    SN0012     |      Rooney      ||     SN0119     |    Ji Sung
    SN0200     |      Gerrard     ||                |
Run Code Online (Sandbox Code Playgroud)

左表是Tablix1,右表是Tablix2

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

      = RowNumber(Nothing) mod 2 = 0 
Run Code Online (Sandbox Code Playgroud)

for Tablix1(左表)

      = RowNumber(Nothing) mod 2 = 1
Run Code Online (Sandbox Code Playgroud)

对于Tablix2(右表)

但这个消息是错误的......

     "A FilterExpression for tablix ‘Tablix1’ uses the RowNumber function.
      RowNumber cannot be used in filters."
Run Code Online (Sandbox Code Playgroud)

它不能在Filter中使用Rownumber.我该怎么办?如果我不编辑数据集,是否可能.

Jon*_*nus 6

您是否有可能首先编辑您正在恢复的数据集?您可以使用添加ROW_NUMBER字段

SELECT
  ...,
  ROW_NUMBER() OVER(ORDER BY SerialNo ASC) AS RowNum,
  ...
Run Code Online (Sandbox Code Playgroud)

然后你的返回数据集看起来像

   Serial No.  |      Name      |  RowNum
 ______________|________________|__________
    SN0003     |      Beckham   |   1
    SN0005     |      Henry     |   2
    SN0012     |      Rooney    |   3
    SN0119     |      Ji Sung   |   4
    SN0200     |      Gerrard   |   5
Run Code Online (Sandbox Code Playgroud)

然后你可以进行过滤 RowNum mod 2 = 0

编辑

或者,如果您无法更改基础数据集,则可以使用RunningValue和CountDistinct更聪明.

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

RunningValue 将在表中的每一行中为您提供越来越多的值...并且可以将所有这些"CountDistincts"相加.

将表的行可见性设置为类似

对于Tablix1

=(RunningValue(CountDistinct(Fields!SerialNo.Value), Sum, "DataSetName") mod 2) = 0
Run Code Online (Sandbox Code Playgroud)

对于Tablix2

=(RunningValue(CountDistinct(Fields!SerialNo.Value), Sum, "DataSetName") mod 2) = 1
Run Code Online (Sandbox Code Playgroud)