我有2个大型事件表。第一个表是一个数据表(tblData
),它包含日期,持续时间和代码(用于标识事件)。第二个表是每个事件所用总时间的汇总表(tblSummary
)。
如何过滤tblData
并更新tblSummary
?
以下是tblData
的一小部分。请注意,第2级代码有3列(L2a
,L2b
,L2c
);这意味着如果我要查找级别2代码“EL
”的总持续时间,我必须检查所有3列并添加他们的Duration
次。如下图所示,总“EL
”时间为9.9
下面是一段tblSummary
。
对于Total
列,我使用SUMIF (tblData[L2a], [@[Lvl 2 Code]], tblData[Duration])
来获取代码的总时间,但这包括隐藏的行。当我更改tblSummary
上的过滤器时,tblData
不会更新。
我相信使用SUBTOTAL
是一个死胡同。这将解决隐藏列问题,但由于无法设置标准,因此我无法将其应用于tblSummary
。
我是SUMPRODUCT
的新手,但我确实尝试使用
=SUMPRODUCT(SUBTOTAL(109,tblData[Duration]),--(tblData[L2a]="EL"))
但收到了#VALUE!
。我按了Ctl + Shift + Enter
。
答案 0 :(得分:2)
将SUMIF function的列值条件耦合在一起,同时忽略隐藏的行意味着我们必须在SUBTOTAL function上强制执行额外的计算层,并使用{{3的循环计算来收集聚合}}。处理的额外“层”将通过SUMPRODUCT function完成。
tblSummary 总计列(又名K15)第一行的标准公式为,
=SUMPRODUCT((SUBTOTAL(103, OFFSET(tblData, ROW(tblData)-ROW(INDEX(tblData, 1, 0)), 0, 1, 1))=1)*(tblData[L2a]=[@[Lvl 2 Code]]), tblData[Duration])
如果表格没有为您执行此操作,请填写。
当我们过滤 tblData 表的日期列以隐藏2015年11月24日,2015年11月27日和2015年11月28日时,新的总数显示在 tblSummary 表。
¹当整个工作簿中的任何内容发生变化时,不仅在影响其结果的某些内容发生变化时,挥发性函数都会重新计算。 易失性函数的示例包括,INDIRECT,OFFSET,TODAY,NOW和RAND。 RANDBETWEEN和CELL工作表函数的某些子函数也会使它们变得不稳定。