我创建了一个数据透视表,使用2个类别(A,B)显示年度预算,并创建一个显示预算百分比的计算项目(=支出/预算)。
在图像的第一个数据透视表中,百分比计算可以正常进行,但是当添加另一个子类别时,所有百分比的总和而不是仅显示单行“A”的计算,该计算必须为79%(图像的第二个数据透视表)
在折叠数据透视表时,是否有任何方法不显示其类别中所有百分比值的汇总值,并且在展开数据透视表时,只显示计算项目但行级别显示为第3个数据透视表图像?
答案 0 :(得分:1)
数据透视表是因为没有"那个明显的功能而出了名。"。
在这种情况下,"计算的总和" (例如,已使用百分比的总和)应该是"计算聚合" (例如,使用的百分比)。不幸的是,似乎没有办法从枢轴表中强制解决这个问题。
作为后备职位,您可以使用VBA。
为PivotTableUpdate事件插入以下代码。它应该干净利落地进行多种变化 - 我相信会有一些我没想到的情况......
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim rCell As Range, rCol As Range, rRow As Range
Dim lNewCol As Long, lBudgetCol As Long, lSpendCol As Long, lRow As Long
Dim sFormula As String
' Initial
Application.ScreenUpdating = False
' Clean up remnants of old calculation
For Each rRow In ActiveSheet.UsedRange.Rows
For Each rCell In rRow.Cells
If InStr(rCell.Formula, "=") Then
rCell.Delete shift:=xlShiftToLeft
GoTo NextCell
End If
If rCell.Value = "%Used" Then
rCell.Columns(1).EntireColumn.Delete shift:=xlShiftToLeft
GoTo NextCell
End If
If rCell.Value = "Budget" Then lBudgetCol = rCell.Column
If rCell.Value = "Spending" Then lSpendCol = rCell.Column
NextCell:
Next rCell
Next rRow
lNewCol = ActiveSheet.UsedRange.End(xlDown).End(xlToRight).Column + 1
' Implement new calculation and format
For Each rRow In ActiveSheet.UsedRange.Rows
lRow = rRow.Rows(1).EntireRow.Row
ActiveSheet.Cells(lRow, lNewCol - 1).Copy
ActiveSheet.Cells(lRow, lNewCol).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
If lRow = 4 Then ActiveSheet.Cells(lRow, lNewCol).Value = "%Used"
If lRow > 4 And IsNumeric(ActiveSheet.Cells(lRow, lNewCol - 1).Value) Then
sFormula = "=R" & lRow & "C" & lSpendCol & "/R" & lRow & "C" & lBudgetCol
ActiveSheet.Cells(lRow, lNewCol).FormulaR1C1 = sFormula
ActiveSheet.Cells(lRow, lNewCol).Style = "Percent"
End If
Next rRow
' clean up
ActiveSheet.UsedRange.End(xlToLeft).Select
Application.ScreenUpdating = True
End Sub
为简单起见,用于计算已使用百分比的公式为(例如)=C5/B5
而不是=GETPIVOTDATA(...)/GETPIVOTDATA(...)
。
以下屏幕截图显示了修改过滤器和布局的结果...