切片有两个级别的聚合。可以在同一张桌子上吗?

时间:2018-02-23 21:38:05

标签: apache-superset

我正在评估Superset,我想尝试了解它是否可行,以及如何在同一组数据上获得不同级别的聚合。我正在处理银行账户。我每天都会拍摄帐户余额的快照,因此我有一张包含以下结构的表格(非常简化):

account_id date balance week 1 2018-01-01 $5.00 1 1 2018-01-02 $10.00 1 1 2018-01-03 $10.00 1 1 2018-01-04 $10.00 1 1 2018-01-05 $10.00 1 1 2018-01-06 $10.00 1 1 2018-01-07 $10.00 2 1 2018-01-08 $10.00 2 1 2018-01-09 $10.00 2 1 2018-01-10 $10.00 2 1 2018-01-11 $20.00 2 1 2018-01-12 $20.00 2 1 2018-01-13 $20.00 2 1 2018-01-14 $20.00 3 2 2018-01-09 $70.00 2 2 2018-01-10 $70.00 2 2 2018-01-11 $70.00 2 2 2018-01-12 $70.00 2 2 2018-01-13 $5.00 2 2 2018-01-14 $5.00 3

首先,我需要计算每天的总余额。这非常直截了当。我可以使用日期作为时间列和余额的度量 SUM 来构建切片。使用上面的示例数据结果必须是:

date total balance week 2018-01-01 $5.00 1 2018-01-02 $10.00 1 2018-01-03 $10.00 1 2018-01-04 $10.00 1 2018-01-05 $10.00 1 2018-01-06 $10.00 1 2018-01-07 $10.00 2 2018-01-08 $10.00 2 2018-01-09 $80.00 2 2018-01-10 $80.00 2 2018-01-11 $90.00 2 2018-01-12 $90.00 2 2018-01-13 $25.00 2 2018-01-14 $25.00 3

然后我需要计算每个帐户的每周平均余额。这也很容易,因为我可以使用 AVG 作为指标:

week average_balance_per_account 1 $9.17 2 $32.08 3 $12.50

但在那之后,我想计算每周的平均总余额。这是每日总余额的平均值。在这个例子中:

week average_balance expression 1 $9.17 = (5+10+10+10+10+10)/6 2 $55.00 = (10+10+(10+70)+(10+70)+(20+70)+(20+70)+(20+5))/7 3 $25.00 = ((20+5))/1

有没有办法使用之前定义的同一个表计算上一个报告?

1 个答案:

答案 0 :(得分:1)

您尝试计算的指标可表示为:filename_e_archive = askopenfilename() current_directory = os.path.abspath('.') folder_d_archive = filename_e_archive.split('.elog')[0] filename_d_archive = folder_d_archive + ".tar.gz" path_to_e_archive = os.path.dirname(filename_e_archive) path_to_d_archive = os.path.join(path_to_e_archive,'/',folder_d_archive) os.makedirs(path_to_d_archive) os.chdir(path_to_d_archive) gpg = gnupg.GPG() with open(filename_e_archive, 'rb') as f: status = gpg.decrypt_file(f, passphrase='mypassword',output=filename_d_archive) ;每日总余额除以总天数。然后,您sum(balance)/count(distinct date)将生成平均余额。

首先,在表格上创建一个新指标。将SQL表达式更新为group by week

其次,确保您的sum(balance)/count(distinct date)列已标记为week。另一种方法是在创建切片并将Groupable设置为date时使用Time Grain列。