在SSRS 2008中排序字符串数值

时间:2014-02-10 14:34:39

标签: reporting-services ssrs-2008

我在一个返回值列表的数据集中有一个varchar字段(我正在分组):20,25,40,100,110,'N / A'..

我希望“数字”值从低到高排序:即:20,25 ... 110,'N / A'

问题是分组中的A> Z排序给出了以下输出:

100,110,25,...,N / A

由于存在字符串值,我无法转换为numeric数据类型。

有人有解决方案吗?

提前谢谢你 果酱

1 个答案:

答案 0 :(得分:6)

您可以在此处实施多种解决方案。我将讨论我认为最简单的两个。如果这些对你不起作用,请告诉我,因为有很多选择。为了方便起见,我将您在问题中引用的字段命名为* num_text *。

修复SSRS: 转到显示相关数据的Tablix的Tablix属性。转到“排序”选项卡。单击添加。在“排序依据”字段中,单击表达式按钮并键入以下内容:

=CInt(IIF(Fields!num_text.value = "N/A",9999999,Fields!num_text.value))

注意,您需要将任何可能的文本值转换为大于任何可能的整数/小数的数字。在这种情况下,我根据您问题中的示例选择了9999999。如果您有多个未转换为数字的文本值,则报表生成器/ BIDS将允许您保存报表,但在呈现时,它将显示 #Error ,表示CInt(或您选择的任何其他转换公式)在非数字值上失败。

在SQL中修复: 添加一个数据类型为numeric的新字段(如field_sort),并使用case语句生成有问题的当前字段:

, Case
    When --Criteria leading to "N/A"
        Then 9999999
        Else num_text
    End as field_sort

--Rest of SQL Script here

Order by field_sort

然后只在SSRS中显示您的num_text字段,这些值将被正确排序。如果您有许多可能的字符串值,那么您可能会发现在SQL中更容易修复(而不是在SSRS中指定大量的IIF语句。

相关问题