使用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张图表。当然,主要的是第二个:
一个馅饼,来自第一个例子。在使用SUMIF
时,我需要明确地在那里写"food"
(或引用,无论如何)。可以自动填充找到的每个标记吗?
虽然我可以没有这个,但它可能是第二个主要问题的答案;
来自 arrayformula 的情节或时间轴。它应该沿着时间跟踪绘图中的每个标记。
甚至可以做到吗?如果没有,有什么建议吗?如果需要,我很想start scripting(并且值得)。或者远离谷歌。或者从电子表格一起(最后)。 Python可能吗?红宝石?
或者我可能只是保持原样,如果它太麻烦了。
答案 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
答案 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
函数填充到电子表格的最底部和最右侧,覆盖其路径中的所有内容。所以最好还是有一张专用于此表的表格。