5

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

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

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

(在“Up to Buttom”之前是“Left to Right”)

   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."

它不能在过滤器中使用行号。我应该怎么办?如果我不编辑数据集有可能吗?

4

2 回答 2

6

您是否可以首先编辑您正在接收的数据集?您可以使用添加一个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
于 2015-09-03T08:01:53.990 回答
0

[已解决] 谢谢,乔纳斯

这是我的数据表。我为商店 seq_no 创建了新列。通过右键单击>添加列并更改名称“SEQ_NO” 在此处输入图像描述

下一步,我通过使用 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

并在报表的 Tablix 中按 SEQ_NO 设置过滤器

        =Fields!SEQ_NO.Value Mod 2 = 0

再次感谢乔纳斯。

于 2015-09-03T10:04:04.277 回答