变量百分比对应于其他变量

时间:2018-01-18 13:24:00

标签: conditional qliksense cumsum

我有两个数值变量,并且想要计算一个变量的百分比,该变量对应于其他变量总和的至少50%。

例如

A   |   B
__________
2   |   8
1   |  20
3   |  12
5   |   4
2   |   7
1   |  11
4   |   5

这里,B列的总和是68,所以我正在寻找行(按B的降序排列),累积和至少为34

在这种情况下,它们是第2,3和2行。 6(累计和45)。这些行A列的总和为5,我想将其与A列的总和(18)进行比较。

因此,我正在寻找的结果是5 / 18 * 100 = 28.78%

我正在寻找一种在QlikSense或SQL中实现此功能的方法。

1 个答案:

答案 0 :(得分:1)

这是你可以做到的一种方式 - 可能需要进行一些优化,但这可以满足您的需求。

Source: 
LOAD 
    *,
    RowNo() as RowNo_Source
Inline [
A , B
2 , 8
1 , 20
3 , 12
5 , 4
2 , 7
1 , 11
4 , 5
];

SourceSorted:
NoConcatenate LOAD *,
    RowNo() as RowNo_SourceSorted
Resident Source
Order by B asc;

drop table Source;

BTotal:
LOAD sum(B) as BTotal
Resident SourceSorted;

let BTotal=peek('BTotal',0);

SourceWithCumu:
NoConcatenate LOAD
    *,
    rangesum(peek('BCumu'),B) as BCumu,
    $(BTotal) as BTotal,
    rangesum(peek('BCumu'),B)/$(BTotal) as BCumuPct,
    if(rangesum(peek('BCumu'),B)/$(BTotal)>=0.5,A,0) as AFiltered
Resident SourceSorted;

Drop Table SourceSorted;

我使用的调试字段可能很有用,但您当然可以删除它们。

然后在前端,您计算sum(AFiltered)/sum(A)以获得所需的统计数据,并将其格式化为百分比。