如何对Excel数据透视表上计算字段的结果求和

How to sum the result of calculated field on Excel's Pivot Table

提问人:Javier 提问时间:10/30/2023 最后编辑:tallerJavier 更新时间:10/30/2023 访问量:85

问:

我正在处理一个数据透视表,其中包含一些我想汇总的数据。我的数据透视表目前有 1 个行文本字段和 2 个值数字字段。字段“字段 1”具有数据源中的原始数值,其中包含小数。我希望所有这些值都四舍五入为整数,因此我使用以下公式为数据透视表创建了一个计算字段:.计算字段命名为“字段 2”。该公式有效地将所有值四舍五入。但是,总和并没有达到我的预期。=ROUNDUP([Field 1], 0)

我附上了一张截图以更好地显示这一点:

Example pivot table.

我想做的是将所有原始值四舍五入,然后将所有这些新值相加。在此示例中,结果应在总计行 (1+1) 中返回 2。但是,Excel 所做的是首先将所有值相加,结果为 0.83,然后将该结果四舍五入为 1。

我将不胜感激任何解决此问题的建议,无论是通过我缺少的一些数据透视表选项还是使用 VBA 代码。不可能只对源表中的值进行四舍五入,因为它们用于其他计算,如果过滤数据透视表数据,这些计算会搞砸。

我已经尝试修改计算字段的字段选项,尝试显示最大值、最小值、总和和其他选项。我还尝试将所有数据透视表汇总到不同的单元格中以获得结果,但我无法获得动态引用。我可以做一些静态的事情,不会自动对新数据求和。DataBodyRange=SUM("A1:A2")

Excel VBA 数据透视表 自定义域

评论

1赞 Ron Rosenfeld 10/30/2023
我相信这是一个Excel问题,Microsoft承认,至少自2010年以来影响版本。获取所需结果的一种方法是使用 Power Query 和分组;,然后添加一个自定义列来执行四舍五入的总和。

答:

0赞 taller 10/30/2023 #1

我认为您不能改变如何在数据透视表总行上计算 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

enter image description here

评论

0赞 Javier 11/7/2023
很抱歉耽搁了,我离开办公室几天了。这正是我一直在寻找的,非常感谢!
0赞 Ron Rosenfeld 10/30/2023 #2

如果我理解正确,你希望得到结果并能够正确地总结这些结果。RoundUpField1

请注意,如果您真的想将字段 1 的每个成员四舍五入并求和,则字段 2 的总和将部分取决于您有多少个条目。如果这是您真正想要的,那么稍作更改即可实现

下面是一个Power Query解决方案

使用 Power Query

  • 选择数据表中的某个单元格
  • Data => Get&Transform => from Table/Range
  • 当 PQ 编辑器打开时:Home => Advanced Editor
  • 记下第 2 行中的表
  • 粘贴下面的 M 代码来代替您看到的内容
  • 将第 2 行中的表名称改回最初生成的名称。
  • 阅读评论并探索以了解算法Applied Steps

源数据
enter image description here

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 代码中未包含该行,请务必从“表格设计”界面中选择“总计”选项

结果
enter image description here

评论

0赞 Javier 11/7/2023
非常感谢您的帮助!虽然这运行良好,但我发现 Power Query 在 Excel for Mac 中不可用。这是一个问题,因为我需要与所有系统完全兼容。我需要使用VBA代码作为解决方法。谢谢你抽出时间,罗恩。