我正在使用通过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上的报告定义中时出现错误。
有什么想法吗?
答案 0 :(得分:1)
不要在单独的语句中设置@ rank = 0,而是尝试在子查询中将其设置为交叉连接到主查询 - 如下所示:
SELECT @rank:=@rank+1 AS Rank, ...
FROM (SELECT @rank:= 0) r
CROSS JOIN ...