数据透视表中的总数百分比

时间:2013-12-11 12:07:12

标签: sql excel pivot-table percentage

我在Excel 2007中并使用SQL查询将两个测试装备中的通过/失败数据拉入数据透视表。以下是我当前/理想的输出,请原谅日期的格式!

我已尝试过值字段设置>将值显示为列的百分比,但这不能正常工作,因为它还会划分装备之间的通过率。我发现了更改父列的引用,但这似乎是Excel 2010以后的版本。有人能指出我正确的方向吗?

当前输出

Pass Rate   Date                    
Outcome      2013-12-05 2013-12-08  2013-12-09  2013-12-10  2013-12-11
F                67         17          50          62           51 
RigOne           33         11          31          25           27
RigTwo           34          6          19          37           24
P                80         29          54          79           46
RigOne           50         21          32          42           21
RigTwo           30          8          22          37           25
Grand Total     147         46         104         141           97 

理想输出

Pass Rate   Date                    
             2013-12-05 2013-12-08  2013-12-09  2013-12-10  2013-12-11
RigOne           %%         %%          %%          %%           %%
RigTwo           %%         %%          %%          %%           %%
Average          %%         %%          %%          %%           %% 

2 个答案:

答案 0 :(得分:0)

如果这是你想要的结果:

SO20518715 example

然后,假设您的源数据分为四列:Rig,Date,Outcome和Value:

  1. 为行标签,日期和结果(自上而下的顺序)创建一个PT,用于列标签和Σ值的总和。
  2. 在快捷菜单中,数据透视表选项...,总计&过滤器取消选中显示行的总计。
  3. 选择Fail和数据透视表工具>选项>工具 - 公式,计算项目...为名称添加平均值:并在公式中:放置=Pass/(Pass +Fail )
  4. 选择平均值并将A到Z排序。
  5. 总计下面的总计算每个日期平均值下的加权平均通过率。
  6. 设置Grand Total行的字体颜色以匹配填充颜色。
  7. 隐藏通过/失败列和行标签行。
  8. 将细胞更改为通过率和日期。
  9. 格式适合。

答案 1 :(得分:0)

我实际上设法通过更改我的SQL查询来提供输入pnuts建议。一旦我更改了代码,它就非常简单了 - 我只是为每个装备创建了一个计算字段,将通过次数除以测试次数以及两者的平均值,然后将它们格式化为百分比。如果它对任何人都有用,我在下面包含了我的SQL。可能非常笨拙,但它给出了正确答案!

SELECT CONVERT (Date, [Stamp]) AS Date
  ,SUM(case when Pass='P' and TestRig = 'Rig 1' THEN 1 ELSE 0 END) AS R1Passes
  ,SUM(case when Pass='P' and TestRig = 'Rig 2' THEN 1 ELSE 0 END) AS R2Passes
  ,SUM(case when Pass IN ('P', 'F') and TestRig = 'Rig 1' THEN 1 ELSE 0 END) AS R1Tests
  ,SUM(case when Pass IN ('P', 'F') and TestRig = 'Rig 2' THEN 1 ELSE 0 END) AS R2Tests
FROM [dbase].[dbo].[tbl_Results]
where Stamp > '2013-12-01'
  and TestName = 'Finished'
GROUP BY CONVERT (Date, [Stamp])