1

使用谷歌电子表格。这是复制我的表需求的尝试:

2012-08-30    food     $15    expensive dinner
2012-08-30    food     $10    pizza!
2012-08-30    other    $30    that damn painting
2012-09-02    home     $40    can't remember
2012-09-02    other    $5     toilet paper
2012-09-02    home     $2     buying new flowers

我已经可以用它做两件事,但它远非最佳,它变得可以忽略不计。

首先,使用SUMIF

food    $25    <-    SUMIF(B:B;"food";C:C)
other   $35
home    $42

然后,将其ARRAYFORMULA

           food home other
2012-08-30  $25   $0   $30 <- ARRAYFORMULA(SUMIF(A:A&B:B;2012-08-30&"food";C:C))
2012-09-02   $0  $42    $5

看看哪里会变得太大?出色地...

我想做2个图表。当然,最主要的是第二种:

  1. 馅饼,来自第一个例子。在使用 时SUMIF,我需要明确地写"food"在那里(或参考,无论如何)。可以自动填充找到的每个标签吗?

    虽然我可以没有这个,但它可能是第二个主要问题的答案;

  2. 来自arrayformula的绘图时间线。它应该沿时间跟踪图中的每个标签。

甚至有可能做到吗?如果没有,有什么建议吗?如果需要(并且值得),我很想开始编写脚本。或者离开谷歌。或从电子表格一起(最后)。也许是 Python?红宝石?

或者,如果太麻烦的话,也许我会保持原样。

4

2 回答 2

1

一般来说,电子表格不是数据库,这是您快速接近需要数据库的任务。然而,幸运的是(取决于你如何看待它,无论如何),谷歌电子表格确实一些类似数据库的访问 API,所以你可以做你想做的事:

http://googleajaxsearchapi.blogspot.com/2008/03/introducing-latest-ajax-api-google.html

https://developers.google.com/chart/interactive/docs/querylanguage

http://blog.ouseful.info/2009/05/18/using-google-spreadsheets-as-a-databace-with-the-google-visualisation-api-query-language/

于 2012-09-02T14:25:45.547 回答
1

使用 QUERY,您可以使用以下方法生成第一个表(带有标题):

=QUERY(B:C;"select B, sum(C) where B != '' group by B label B 'Category', sum(C) 'Total'";0)

这应该很容易绘制为饼图。您可以为图表选择比当前表格更长的范围以适应不断增长的数据,并且饼图将方便地忽略空白行。

可以使用以下方法生成第二个表:

=QUERY(A:C;"select A, sum(C) where A is not null group by A pivot B";0)

您可以尝试各种图表类型以实现所需的可视化。


编辑

根据您的评论提供一个填充零而不是空白的表格;假设表格的左上角(空白)单元格是I1,那么在I2

=SORT(UNIQUE(A:A))

并在J1

=TRANSPOSE(SORT(UNIQUE(B:B)))

然后在J2

=ArrayFormula(IF(I2:I*LEN(J1:1);MMULT(I2:I=TRANSPOSE(A:A);(J1:1=B:B)*C:C);IFERROR(1/0)))

请注意,这会将函数填充CONTINUE到电子表格的最底部和最右侧,覆盖其路径中的所有内容。所以最好有一张专门用于这张桌子的纸。

于 2012-09-04T00:33:57.640 回答