提问人:Javier 提问时间:10/30/2023 最后编辑:tallerJavier 更新时间:10/30/2023 访问量:85
如何对Excel数据透视表上计算字段的结果求和
How to sum the result of calculated field on Excel's Pivot Table
问:
我正在处理一个数据透视表,其中包含一些我想汇总的数据。我的数据透视表目前有 1 个行文本字段和 2 个值数字字段。字段“字段 1”具有数据源中的原始数值,其中包含小数。我希望所有这些值都四舍五入为整数,因此我使用以下公式为数据透视表创建了一个计算字段:.计算字段命名为“字段 2”。该公式有效地将所有值四舍五入。但是,总和并没有达到我的预期。=ROUNDUP([Field 1], 0)
我附上了一张截图以更好地显示这一点:
.
我想做的是将所有原始值四舍五入,然后将所有这些新值相加。在此示例中,结果应在总计行 (1+1) 中返回 2。但是,Excel 所做的是首先将所有值相加,结果为 0.83,然后将该结果四舍五入为 1。
我将不胜感激任何解决此问题的建议,无论是通过我缺少的一些数据透视表选项还是使用 VBA 代码。不可能只对源表中的值进行四舍五入,因为它们用于其他计算,如果过滤数据透视表数据,这些计算会搞砸。
我已经尝试修改计算字段的字段选项,尝试显示最大值、最小值、总和和其他选项。我还尝试将所有数据透视表汇总到不同的单元格中以获得结果,但我无法获得动态引用。我可以做一些静态的事情,不会自动对新数据求和。DataBodyRange
=SUM("A1:A2")
答:
我认为您不能改变如何在数据透视表总行上计算 Roundup 的方式。但是你可以用VBA来求和。
Option Explicit
Function GetTotal()
Dim fld As PivotField
Const HEADERNAME = "Sum of Field2"
Application.Volatile
Set fld = ActiveSheet.PivotTables(1).DataFields(HEADERNAME)
GetTotal = Application.WorksheetFunction.Sum(fld.DataRange)
End Function
评论
如果我理解正确,你希望得到结果并能够正确地总结这些结果。RoundUp
Field1
请注意,如果您真的想将字段 1 的每个成员四舍五入并求和,则字段 2 的总和将部分取决于您有多少个条目。如果这是您真正想要的,那么稍作更改即可实现
下面是一个Power Query解决方案
使用 Power Query
- 选择数据表中的某个单元格
Data => Get&Transform => from Table/Range
- 当 PQ 编辑器打开时:
Home => Advanced Editor
- 记下第 2 行中的表名
- 粘贴下面的 M 代码来代替您看到的内容
- 将第 2 行中的表名称改回最初生成的名称。
- 阅读评论并探索以了解算法
Applied Steps
let
//change next line to reflect actual Data source data source
Source = Excel.CurrentWorkbook(){[Name="Table10"]}[Content],
//Change next line to reflect actual column names
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ab", type text}, {"f1", type number}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"ab"}, {
//Change new column names in each aggregation to reflect what you wanbt
{"Sum of Field 1", each List.Sum([f1]), type nullable number},
{"Sum of Field 2", each Number.RoundUp(List.Sum([f1])), type nullable number}
}),
//Add a Totals Row if you wish, or enable it from the Worksheet if you prefer
#"Add Totals Row" =
Table.InsertRows(
#"Grouped Rows",
Table.RowCount(#"Grouped Rows"),
{Record.FromList(
{"Grand Total"}
& {List.Sum(#"Grouped Rows"[Sum of Field 1])}
& {List.Sum(#"Grouped Rows"[Sum of Field 2])},
Table.ColumnNames(#"Grouped Rows"))})
in
#"Add Totals Row"
保存到工作表后,如果 M 代码
中未包含该行,请务必从“表格设计”界面中选择“总计
”选项
评论