最近在开发一个报表,其中的指标要根据 所选择的 维度及属性字段,来动态计算,也就是没办法预先把结果算好。
维度及属性字段共29个,那么总共产生的组合个数为:29个中选1个的组合数,29个中选2个的组合数。。。,直到 29中选择29个的组合数,把这些组合数相加,就是总的组合数。
那么这29个字段的任意组合,到底有多少种可能呢?之前我预估大概是千万级,下面用python来算一算:
import math
s =0
for i in range(1,30):
n,m = 29,i
r = math.factorial(n)//(math.factorial(m)*math.factorial(n-m))
s += r
print(n,m,'组合数:',r)
print('总的组合数:',s)
输出结果:
29 1 组合数: 29
29 2 组合数: 406
29 3 组合数: 3654
29 4 组合数: 23751
29 5 组合数: 118755
29 6 组合数: 475020
29 7 组合数: 1560780
29 8 组合数: 4292145
29 9 组合数: 10015005
29 10 组合数: 20030010
29 11 组合数: 34597290
29 12 组合数: 51895935
29 13 组合数: 67863915
29 14 组合数: 77558760
29 15 组合数: 77558760
29 16 组合数: 67863915
29 17 组合数: 51895935
29 18 组合数: 34597290
29 19 组合数: 20030010
29 20 组合数: 10015005
29 21 组合数: 4292145
29 22 组合数: 1560780
29 23 组合数: 475020
29 24 组合数: 118755
29 25 组合数: 23751
29 26 组合数: 3654
29 27 组合数: 406
29 28 组合数: 29
29 29 组合数: 1
总的组合数: 536870911
最后1行,把上面所有组合数相加,得到总的组合数为:536870911,约为 5.3亿。。。
当然,这么大的组合数,客户在查报表的时候,绝对不可能会覆盖这所有的组合,最多也就是常用的 几十种吧。