为每个标签的每日费用自动生成图表数据

时间:2012-09-02 14:18:45

标签: google-visualization google-sheets google-docs

使用Google Spreadsheets。这是尝试复制我的表需求:

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

我已经可以用它做两件事了,但它远远不是最佳的,它可以忽略不计。

首先,Using SUMIF

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

然后,结合with 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 的情节时间轴。它应该沿着时间跟踪绘图中的每个标记。

  3. 甚至可以做到吗?如果没有,有什么建议吗?如果需要,我很想start scripting(并且值得)。或者远离谷歌。或者从电子表格一起(最后)。 Python可能吗?红宝石?

    或者我可能只是保持原样,如果它太麻烦了。

2 个答案:

答案 0 :(得分:1)

通常,Spreadsheets不是数据库,这是一个快速接近需要数据库的任务。然而,幸运的是它(取决于你如何看待它,无论如何),Google Spreadsheets实际上有一些类似数据库的访问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/

答案 1 :(得分: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函数填充到电子表格的最底部和最右侧,覆盖其路径中的所有内容。所以最好还是有一张专用于此表的表格。