分在同一张桌子上

时间:2016-04-26 07:03:01

标签: sql sql-server reporting-services

我尝试从我的16台机器中展示产生最多浪费的最高机器。经过大量的努力,我已经做到了这一点。

现在我必须做出最高问题的前5名。并且这些问题列在数据库的同一目录中:

我该怎么做?

我使用的是SQL Server Report Builder。

我无法添加图片,我会尝试这样做:

Date                        CounterName                  calculationUnitsInitial     
    2016-04-26 00:00:00.000 Prod                     6221   
    2016-04-26 00:00:00.000 Bad                          0  
    2016-04-26 00:00:00.000 ba           0  
    2016-04-26 00:00:00.000 ba       0  
    2016-04-26 00:00:00.000 Ausg     6    
    2016-04-26 00:00:00.000 Au           0  
    2016-04-26 00:00:00.000 Bad                          125    
    2016-04-26 00:00:00.000 Aus                          8  
    2016-04-26 00:00:00.000 Band position                0  
    2016-04-26 00:00:00.000 Fe               0  
    2016-04-26 00:00:00.000 Fe               0
    2016-04-26 00:00:00.000 Hu                       124    
    2016-04-26 00:00:00.000 S                     0 
    2016-04-26 00:00:00.000 Dr               0
    2016-04-26 00:00:00.000 H            4

1 个答案:

答案 0 :(得分:1)

因此,对于最差的操作机器,我们需要按频率降序列出问题列表。我将您真正的大查询设置为数据集,并使用它来填充名为Machine的隐藏参数的默认值。我们还需要两个参数DateFromDateTo,其默认值设置为您感兴趣的日期范围。

然后您的问题选择很简单:

SELECT CounterName, COUNT(*) AS Problems
FROM Problems
WHERE Machine = @Machine 
  AND ProblemDate >= @DateFrom AND ProblemDate <= @DateTo
GROUP BY CounterName
ORDER BY COUNT(*) DESC

现在我们有一个很好的列表,列出了该机器每种问题的数量,按出现问题的降序排列。我们称这个数据集为Problems

使用两列向报表添加表格。第一列将具有以下表达式:

=Fields!Problems.Value / SUM(Fields!Problems.Value, "Problems")

这会将CounterName的问题数除以数据集Problems中的全部问题数。将该单元格的Format属性设置为P1,以百分比形式显示为百分比。

第二列只是字段CounterName