包含特定值的特定字段的SSRS CountRows

时间:2015-08-27 22:06:18

标签: sql visual-studio reporting-services

我正在制作SSRS报告。我有一个包含几个字段的DataSet,其中一个是Doc_Type。 Doc_Type可以包含多个值,其中一个是“Shipment”。

在我的报告中,我想计算等于'发货'的Doc_Types数量。这就是我正在使用的,它无法正常工作:

// create a service to manage the users resource
app.factory('UsersService', ['$http', function($http) {
    function getById(id) {
        var requestUrl = '/api/users/' + id + '/fullinfo';
        return $http.get(requestUrl).then(function(resp) {
            return resp.data;
        }, function(err) {
            // handle request error generically
        });
    }

    return {
        getById: getById
    };
}]);

// consume the service in a controller like so:
app.controller('YourController', ['$scope', 'UsersService', function($scope, UsersService) {
    var userId = 5; // you might also get this value from state params or some other dynamic way

    UsersService.getById(userId).then(function(userInfo) {
        $scope.userInfo = userInfo;
    });
}]);

我得到的错误是:“textrun的值表达式'Doc_Type.Paragraphs [0] .TextRuns [0]'的范围参数对聚合函数无效。范围参数必须设置为a字符串常量,它等于包含组的名称,包含数据区域的名称或数据集的名称。

2 个答案:

答案 0 :(得分:7)

您需要使用IIF来评估您的字段并对结果进行总结。如果表达式在表中,则可以使用:

PFObject

答案 1 :(得分:5)

有很多方法可以实现这一目标。

方法1

你可以像这样设置表达式

=SUM(IIf(Fields!Doc_Type.Value = "Shipments", 1, 0), "YourDataSetName")

请记住,SSRS区分大小写,因此请正确放置数据集名称和字段名称。

方法2

更喜欢在SQL中处理它,因为我希望将业务逻辑保留在RDL之外。

您可以使用窗口功能来获取货件计数。

另外请注意,在计算的情况下,我还没有添加ELSE 0条件。因为那会产生错误的结果。伯爵并不关心它里面的价值。它只计算所有非空值。 ELSE NULL会奏效。

SELECT Column1, Column2, Column3,
       SUM(CASE WHEN Doc_Type = 'Shipments' THEN 1 ELSE 0 END) OVER() ShipmentCount_UsingSum
       COUNT(CASE WHEN Doc_Type = 'Shipments' THEN 1 END) OVER() ShipmentCount_UsingCount
FROM myTable
JOIN....
WHERE .....

现在您可以在报告中使用此字段。