检索SSRS / MySQL上的行计数

时间:2013-07-02 14:47:01

标签: mysql reporting-services rowcount

我正在使用通过ODBC链接到MySQL的SSRS。我的查询按客户汇总付款金额,并按金额desc排序。我想用它在SSRS中创建一个LeaderBoard,显示Rank,并且只包括前10位客户。

选项1: 在SQL中对我的组查询执行其他查询,添加行号。

选项2: 在SSRS中添加计算字段。

选项1似乎很笨重,所以从选项2开始;我在名为“Rank”的数据集中添加了一个计算字段,定义为=RowNumber("DataSet1")

我在名为“Rank”的数据集中添加了一个计算字段,定义为:= RowNumber(“DataSet1”)

但是我收到了以下错误:

  

用于计算字段“Rank”的表达式包括聚合,RowNumber,RunningValue,Previous或lookup函数。 Aggregate,RowNumber,RunningValue,Previous和lookup函数不能用于计算字段表达式。

所以,然后我将它添加到实际的tablix中,我能够正确显示Rank。 (当我这样做时,它会自动为我的数据集添加一个额外的列。

然后我想过滤前10位客户。

我首先在这个新领域尝试了“底部10”,但它没有用。 (看起来这个字段在实际数据集中都是零。)

然后我尝试了支付金额的“前10名”,但收到的错误是过滤器只支持整数。

所以我尝试使用CAST和Convert将付款金额转换为MySQL中的Integer,但是他们不支持转换为Integer,而SSRS不喜欢'SIGNED'或任何其他选项。

然后我开始尝试选项1,它正在构建MySQL的查询。 我补充说:

SET @rank=0; 
SELECT @rank:=@rank+1 AS Rank, ...

这适用于MySQL,但是当我将该查询粘贴到SSRS上的报告定义中时出现错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

不要在单独的语句中设置@ rank = 0,而是尝试在子查询中将其设置为交叉连接到主查询 - 如下所示:

SELECT @rank:=@rank+1 AS Rank, ...
FROM (SELECT @rank:= 0) r
CROSS JOIN ...