RDLC 报告 - 错误 Rownumber() 不能用于过滤器
RDLC Report- Error Rownumber() can't be used in filter
我有两个 Tablix(tables) 和一个数据集。
他们正在与此数据集绑定
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 || |
左侧 table 是 Tablix1 和
右 table 是 Tablix2
我想为每个 tablix 使用这个 FilterExpression。
= RowNumber(Nothing) mod 2 = 0
对于 Tablix1(左 table)
= RowNumber(Nothing) mod 2 = 1
对于 Tablix2(右 table)
但是这条消息是错误的...
"A FilterExpression for tablix ‘Tablix1’ uses the RowNumber function.
RowNumber cannot be used in filters."
不能在Filter中使用Rownumber。
我应该怎么办?不编辑数据集可以吗
您是否可以编辑您首先收到的数据集?您可以使用
添加一个 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
会在 table...
将 table 的行可见性设置为类似于
对于 Tablix1
=(RunningValue(CountDistinct(Fields!SerialNo.Value), Sum, "DataSetName") mod 2) = 0
对于 Tablix2
=(RunningValue(CountDistinct(Fields!SerialNo.Value), Sum, "DataSetName") mod 2) = 1
[已解决]谢谢,乔纳斯
这是我的数据表。我为商店 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
并通过 SEQ_NO
在报表的 Tablix 中设置过滤器
=Fields!SEQ_NO.Value Mod 2 = 0
再次感谢乔纳斯。
我有两个 Tablix(tables) 和一个数据集。 他们正在与此数据集绑定
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 || |
左侧 table 是 Tablix1 和 右 table 是 Tablix2
我想为每个 tablix 使用这个 FilterExpression。
= RowNumber(Nothing) mod 2 = 0
对于 Tablix1(左 table)
= RowNumber(Nothing) mod 2 = 1
对于 Tablix2(右 table)
但是这条消息是错误的...
"A FilterExpression for tablix ‘Tablix1’ uses the RowNumber function.
RowNumber cannot be used in filters."
不能在Filter中使用Rownumber。 我应该怎么办?不编辑数据集可以吗
您是否可以编辑您首先收到的数据集?您可以使用
添加一个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
会在 table...
将 table 的行可见性设置为类似于
对于 Tablix1
=(RunningValue(CountDistinct(Fields!SerialNo.Value), Sum, "DataSetName") mod 2) = 0
对于 Tablix2
=(RunningValue(CountDistinct(Fields!SerialNo.Value), Sum, "DataSetName") mod 2) = 1
[已解决]谢谢,乔纳斯
这是我的数据表。我为商店 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
并通过 SEQ_NO
在报表的 Tablix 中设置过滤器 =Fields!SEQ_NO.Value Mod 2 = 0
再次感谢乔纳斯。