【问题标题】:SSRS Getting the most common entries from a datasetSSRS 从数据集中获取最常见的条目
【发布时间】:2012-09-07 13:49:33
【问题描述】:

我有一个返回以下数据集的查询:

设备 |服务 ---------------- PC1 |服务1 PC1 |服务2 PC1 |服务3 PC1 |服务4 PC1 |服务5 PC1 |服务6 PC1 |服务7 电脑2 |服务1 电脑2 |服务2

我的报告中有一个表格,按设备分组并显示服务。但我还想要一个饼图,显示五种最常见的服务。

我可以使用第二个数据集和存储过程相当容易地做到这一点,但我想知道是否有一种方法可以使用相同的数据集来做到这一点(数据已经被查询并返回,所以在我看来这将比对服务器运行单独的过程更好)。

对这是否可能有任何想法?还是我应该只使用第二个查询/存储过程?

【问题讨论】:

  • 嗨,您可能知道添加一个饼图来显示现有数据集中的所有服务计数很容易。不幸的是,将前五名过滤为Filtering on aggregate values for a dataset or data region is not supported.(来自technet.microsoft.com/en-us/library/ee633648.aspx)会更加困难
  • 谢谢保罗,这个链接很有帮助。显示所有内容没问题,只是有时(大部分时间)图表可以包含这么多无用的条目。不过,我将保留这个问题,看看是否有人有任何建议,并在此期间使用单独的程序。
  • 有一个想法 - 如果您可以在 SQL 查询中包含 RowNumber() over (order by count(*)),那么您当然可以在 SSRS 中对其进行过滤

标签: c# sql-server reporting-services reportviewer


【解决方案1】:

您可以使用嵌套查询。如果您从中提取的表的名称称为“#MYTABLE”,并且在上面的示例中返回了两列,那么您将使用

SELECT #MYTABLE.Device, #MYTABLE.Service, NUMBEROFINSTANCES FROM #MYTABLE
    LEFT JOIN
        (SELECT SERVICE, COUNT(DEVICE) AS NUMBEROFINSTANCES 
        FROM #MYTABLE
        GROUP BY SERVICE) AS ABB1 ON ABB1.SERVICE = #MYTABLE.SERVICE

【讨论】:

    【解决方案2】:

    我假设您希望获得每组的计数,并且只显示 TOP 5。您可以将 CTE 与 COUNT(*)OVERDENSE_RANK()OVER 一起使用:

    WITH CTE AS
    (
      SELECT Device, Service
       , COUNT(Service) OVER (PARTITION BY Device) AS Count
       , DENSE_RANK() OVER (PARTITION BY Device ORDER BY Service) AS Rank
      FROM tdevice
    )
    SELECT Count, Rank, Device, Service
    FROM CTE
    WHERE RANK <= 5
    

    这是小提琴:http://sqlfiddle.com/#!3/1f42a/8/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多