问题描述
我正在尝试创建一个 100% 堆积条形图来显示我通过查询获得的各种计数的总数。我无法弄清楚如何使用分组允许图表的 y 轴显示我拥有的总计的不同列名。我已经在单独的图表中创建了我想要的内容,但是因为 html 格式化所有内容的方式有一堆不需要的间距,我试图在一个图表中创建它。下面的例子
在这里,我只是得到我所拥有的列的总和,它根据状态为每个项目返回 1 或 0。然后对于剩余的 100%,我使用一个表达式从总数中减去它们。
=Sum(Count(Fields!Computer_Name.Value)) - Sum(Fields!ClientHealthEvaluation.Value)
我可以修改我的查询以在结果中对所有这些进行分组,并且只查询总数,但我仍然没有找到一种方法可以在一个条形图中完成这项工作。我想知道是否有办法将所有这些都显示在一个条形图中,y 轴组是单独的列,条形显示总计,因此它更清晰,或者至少知道构建所有这些单独图表的更好方法在图像中,使它们看起来更均匀。这可能吗?
--Edit - 添加数据集样本
resourceID IsActiveDDR IsActivePolicyRequest IsActiveStatusMessages IsActiveHW IsActiveSW ClientHealthEvaluation
16784171 0 0 0 0 0 1
16784668 1 1 1 1 0 1
16784901 0 0 0 0 0 1
16785366 1 0 1 0 0 1
16786781 0 0 0 0 0 1
16786855 0 0 0 0 0 1
16787070 1 1 1 0 0 1
16787571 0 0 0 0 0 1
16787996 1 1 1 1 0 0
16788182 1 1 1 1 0 1
这是我目前拥有的数据,我在每列上使用 sum 函数来获取总数。如果它更容易,我可以像下面这样分组。
Total IsActiveDDR IsActivePolicyRequest IsActiveStatusMessages IsActiveHW IsActiveSW ClientHealthEvaluation
10 5 4 5 3 0 9
---编辑:按照建议更新数据集,现在以更适合图表的方式格式化表格。
select
'Client Health Evaluation' as 'PolicyType','Success' as 'Status',SUM(a.ClientHealthEvaluation) as 'Amount'
from(
Select
summ.Resourceid,case summ.LastEvaluationHealthy when 1 then 1 else 0 end as 'ClientHealthEvaluation'
from v_CH_ClientSummary summ) a
UNION
select
'Client Health Evaluation' as 'PolicyType','Failure' as 'Status',(Count(a.resourceid) - SUM(a.ClientHealthEvaluation)) as 'Amount'
from(
Select
summ.Resourceid,case summ.LastEvaluationHealthy when 1 then 1 else 0 end as 'ClientHealthEvaluation'
from v_CH_ClientSummary summ) a
-------------
UNION
select
'Policy Request' as 'PolicyType',SUM(a.IsActivePolicyRequest) as 'Amount'
from(
Select
summ.Resourceid,summ.IsActivePolicyRequest
from v_CH_ClientSummary summ) a
UNION
select
'Policy Request' as 'PolicyType',(Count(a.resourceid) - SUM(a.IsActivePolicyRequest)) as 'Amount'
from(
Select
summ.Resourceid,summ.IsActivePolicyRequest
from v_CH_ClientSummary summ) a
-------------
UNION
select
'Data discovery' as 'PolicyType',SUM(a.IsActiveDDR) as 'Amount'
from(
Select
summ.Resourceid,summ.IsActiveDDR
from v_CH_ClientSummary summ) a
UNION
select
'Data discovery' as 'PolicyType',(Count(a.resourceid) - SUM(a.IsActiveDDR)) as 'Amount'
from(
Select
summ.Resourceid,summ.IsActiveDDR
from v_CH_ClientSummary summ) a
-------------
UNION
select
'Hardware Inventory' as 'PolicyType',SUM(a.IsActiveHW) as 'Amount'
from(
Select
summ.Resourceid,summ.IsActiveHW
from v_CH_ClientSummary summ) a
UNION
select
'Hardware Inventory' as 'PolicyType',(Count(a.resourceid) - SUM(a.IsActiveHW)) as 'Amount'
from(
Select
summ.Resourceid,summ.IsActiveHW
from v_CH_ClientSummary summ) a
-------------
UNION
select
'Software Inventory' as 'PolicyType',SUM(a.IsActiveSW) as 'Amount'
from(
Select
summ.Resourceid,summ.IsActiveSW
from v_CH_ClientSummary summ) a
UNION
select
'Software Inventory' as 'PolicyType',(Count(a.resourceid) - SUM(a.IsActiveSW)) as 'Amount'
from(
Select
summ.Resourceid,summ.IsActiveSW
from v_CH_ClientSummary summ) a
-------------
UNION
select
'Status Messages' as 'PolicyType',SUM(a.IsActiveStatusMessages) as 'Amount'
from(
Select
summ.Resourceid,summ.IsActiveStatusMessages
from v_CH_ClientSummary summ) a
UNION
select
'Status Messages' as 'PolicyType',(Count(a.resourceid) - SUM(a.IsActiveStatusMessages)) as 'Amount'
from(
Select
summ.Resourceid,summ.IsActiveStatusMessages
from v_CH_ClientSummary summ) a
Order by PolicyType,Status desc
输出:
PolicyType Status Amount
ClientHealth Evaluation Success 13862
Client Health Evaluation Failure 210
Data discovery Success 13967
Data discovery Failure 105
Hardware Inventory Success 13854
Hardware Inventory Failure 218
Policy Request Success 14025
Policy Request Failure 47
Software Inventory Success 13713
Software Inventory Failure 359
Status Messages Success 14018
Status Messages Failure 54
图表:
解决方法
如果这没有帮助,请编辑您的问题并包括您的基础数据和数据集输出的示例。
我创建了一些示例数据如下 - 我认为这是您可能需要进行更改的地方,通过在您的数据集查询中计算它,但直到我看到您的数据才难以判断。
不管怎样,这里是样本数据
DECLARE @t TABLE(Caption varchar(30),Colour varchar(10),Amount int)
INSERT INTO @t VALUES
('Client Health Evaluation','Green',10),('Client Health Evaluation','Red',1),('Policy Request',12),3),('Data Discovery',15),2),('Hardware Inventory',20),('Software Inventory',30),5),('Status Messages',2)
SELECT * FROM @t
然后我简单地添加了一个 100% 条形图并像这样配置...
我所做的只是将字段拖入相应的 bin 'Values'/'Category Groups'/'Series Groups' 并添加了一些颜色格式。
给出以下输出。
使用示例数据进行编辑
我已经为您提供了表(再次作为表变量,因此只需将 @t
换成真实的表名。
然后我对 CTE 中的数据进行逆透视,以便我可以多次引用它,然后 UNION 数据的两个副本,一个是实际值,一个是从记录计数中减去的值,为您提供“红色”价值。
DECLARE @t TABLE (resourceID bigint,IsActiveDDR int,IsActivePolicyRequest int,IsActiveStatusMessages int,IsActiveHW int,IsActiveSW int,ClientHealthEvaluation int)
INSERT INTO @t VALUES
(16784171,(16784668,1,(16784901,(16785366,(16786781,(16786855,(16787070,(16787571,(16787996,0),(16788182,1);
-- SELECT * from @t
-- UNPIVOT THE DATA
WITH nd (caption,FlagSum,RecordCount) AS
(
SELECT caption,SUM(flag) AS flagCount,(SELECT COUNT(*) FROM @t) AS TCount
FROM
(SELECT IsActiveDDR,IsActivePolicyRequest,IsActiveStatusMessages,IsActiveHW,IsActiveSW,ClientHealthEvaluation FROM @t) p
UNPIVOT
(flag FOR caption
IN (IsActiveDDR,ClientHealthEvaluation)
) unpiv
GROUP BY caption
)
SELECT caption,'Green' as SeriesGroup,FlagSum FROM nd
UNION ALL
SELECT caption,RecordCount - FlagSum FROM nd
这给了我们以下结果
您应该可以按照上面的答案将其直接放到图表上。