在不使用数据透视表的情况下将表压缩为三列

时间:2016-12-28 16:52:57

标签: google-apps-script google-sheets

我有一张表想要压缩成图表。我担心使用数据透视表,因为最终我想导出数据。 Sample data看起来像这样:

data

这是主文档的一个标签,有~26个标签(全年)

我希望结果如下:

Example

我尝试了一些基本数组,但无法获取所有数据(即只有两个变量,而不是三个)。我也尝试了查询功能,但我不熟悉它以使其工作。

1 个答案:

答案 0 :(得分:0)

在没有数据透视表的情况下展平二维数组是Sheets的一种痛苦。在您的情况下,看起来列的数量不会经常变化,因此使用硬编码的公式是合理的:

=sort({
filter({A4:A, iferror(A4:A/0, C3), C4:C}, len(C4:C)); 
filter({A4:A, iferror(A4:A/0, D3), D4:D}, len(D4:D)); 
filter({A4:A, iferror(A4:A/0, E3), E4:E}, len(E4:E));
filter({A4:A, iferror(A4:A/0, F3), F4:F}, len(F4:F));
filter({A4:A, iferror(A4:A/0, G3), G4:G}, len(G4:G));
filter({A4:A, iferror(A4:A/0, H3), H4:H}, len(H4:H));
filter({A4:A, iferror(A4:A/0, I3), I4:I}, len(I4:I))
}, 1, true)

有助于记住公式可以包含换行符(Ctrl-Enter),并且公式窗口可以展开。

解释

  • {A4:A, iferror(A4:A/0, C3), C4:C}形成一个三列数组,第一列是日期,第三列是时间,第二列是重复的人名(除零是重复的一个技巧)发生)。
  • len(C4:C)是过滤条件:仅记录输入时间的行
  • filter的结果垂直堆叠(分号),然后按日期(第1列)按升序排序(true)。