我正在制作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字符串常量,它等于包含组的名称,包含数据区域的名称或数据集的名称。
答案 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 .....
现在您可以在报告中使用此字段。