引用单个单元格中的多个字段和项-GETPIVOTDATA


4

我已经在StackOverflow上进行了询问,但是意识到这里可能更合适。

是否可以将单个单元格中的多个字段和项目引用到GETPIVOTDATA公式中?

我有一个仪表板,可基于许多用户控件显示来自数据透视表的数据。根据选择的内容,我可能需要使用单个字段和一个或多个字段来引用正确的数据。我能够在单元格中构建所需字段和项目的字符串,但似乎无法将其插入GETPIVOTDATA公式中。似乎将单元格视为逗号内的单个项。有没有办法解决?

Example code:
=GetPivotData("Time", PTSchedule, $A$1)
Cell $A$1 contains "ID", $A$5, "Team", "Team 1"

理想情况下,这将评估为

=GetPivotData("Time", PTSchedule, "ID", $A$5, "Team", "Team 1")

然而,似乎评估

=GetPivotData("Time", PTSchedule, ""ID", $A$5, "Team", "Team 1"")

有任何想法吗?

我正在处理的数据具有多个层次结构:经理>团队>代理根据用户的选择,我想在这些级别中的任何一个上拉回数据。这意味着GETPIVOTDATA语句可能需要1到3个字段/项目对来标识正确的信息。

我想我可以使用三个GETPIVOTDATA并用CHOOSE函数包装它们:

=CHOOSE(Selection, GETPIVOTDATA("Sales", PTSALES, "Manager", Manager),
                   GETPIVOTDATA("Sales", PTSALES, "Manager", Manager, "Team", Team),
                   GETPIVOTDATA("Sales", PTSALES, "Manager", Manager, "Team", Team, "Agent", Agent))

但是,我希望有一个更整洁的解决方案,它将所有“变量”值移动到一个易于维护的位置,而不是分布在我从数据透视表中提取数据的每个单元格中。

Answers:


3

Excel的官方文档规定了以下语法GETPIVOTDATA

GETPIVOTDATA(data_field,pivot_table,field1,item1,field2,item2,...)

但是,还有另一种更灵活的使用方式,GETPIVOTDATA该方式未记录在案:

GETPIVOTDATA(pivot_table,"'Sum of " & data_field & "' '" & item1 & 
     "' '" & item2 & "' '" & ... & "'")

在哪里Sum of可以用其他聚合类型代替。

因此,您的问题的解决方案是:

GETPIVOTDATA(
  PTSALES,
  "'Sum of Sales' " &
  "'" & Manager & "' " &
  if(len(Team>0),"'" & Team & "' ","") &
  if(len(Agent>0),"'" & Agent & '","")
)

并确保命名范围TeamAgent为空,以防您必须在其上进行汇总。为了清楚起见,您可能需要将if语句移至单独的单元格


1

没有。

但是,由于您具有“许多用户控件”,所以为什么不直接从其输出直接构造GETPIVOTDATA,例如:

=GETPIVOTDATA("Time", PTSchedule, "ID", $A$5, "Team", $B$7)

因此,对于每个控件,将输出放入其自己的单元格中(当然要进行一些错误检查),然后在公式中使用它们。

(除了:为了提高鲁棒性,我总是使用一个单元格来获取字段标签,而不是对其进行硬编码,例如,引用原始列标题。如果有人将“ Team”重命名为“ Group”或将“ ID”重命名为“ SSN ”在原始源表中,因此在PT中,您的公式不会中断。)

不幸的是,这没有提供一种忽略空项目的简单方法,例如未指定ID,但是您当然可以将整个内容包装到IF语句中以进行检查:

=IF($A$5="",GETPIVOTDATA("Time", PTSchedule, "Team", $B$7),GETPIVOTDATA("Time", PTSchedule, "ID", $A$5, "Team", $B$7))

仅当您的PT层次结构为“团队”>“ Id”且“团队”具有小计可见时,此方法才有效(GetPivotData将仅返回已计算并显示在PT中的值)。

或者只是简单地告诉用户有问题,如果他们没有填写所有内容:

=IFERROR(GETPIVOTDATA("Time", PTSchedule, "ID", $A$5, "Team", $B$7),"Please choose all parameters")

感谢那。我希望有一个更整洁的解决方案,我在原始问题中添加了更多细节,希望对您有所帮助。
迈克尔(Michael)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.