1

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

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

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

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

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

但我收到以下错误:

用于计算字段“Rank”的表达式包括聚合、RowNumber、RunningValue、Previous 或查找函数。Aggregate、RowNumber、RunningValue、Previous 和查找函数不能在计算字段表达式中使用。

因此,然后我将其添加到实际的 tablix 中,并且能够正确显示排名。(当我这样做时,它会自动向我的数据集添加一个额外的列。

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

我首先在这个新领域尝试了“倒数 10”,但没有成功。(似乎该字段在实际数据集中全为零。)

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

所以我尝试在 MySQL 中使用 CAST 和 Convert 将付款金额转换为 Integer,但它们不支持转换为 Integer,并且 SSRS 不喜欢“SIGNED”或任何其他选项。

然后我开始尝试选项 1,它将查询构建到 MySQL 中。我补充说:

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

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

有任何想法吗?

4

1 回答 1

1

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

SELECT @rank:=@rank+1 AS Rank, ...
FROM (SELECT @rank:= 0) r
CROSS JOIN ...
于 2013-07-02T15:21:45.610 回答