根据下一行的总和计算累计百分比

Calculate cumulative % based on sum of next row

我想根据以下公式计算百分比。它有点小技巧,我有点卡住了,不知道该怎么做。如果有人能帮忙,谢谢。

我在下面 table 中有几条记录是按范围

分组的
Range       Count
0-10        50
10-20       12
20-30       9
30-40       0
40-50       0
50-60       1
60-70       4
70-80       45
80-90       16
90-100      7
Other       1

我想再增加一列,其中包含基于下一行总和与总行数 (145) 之和的累积百分比,如下所示

Range       Count   Cumulative % of Range
0-10        50      34.5%   (which is 50/145)
10-20       12      42.7%   (which is 62/145)
20-30       9       48.9%   (which is 71/145)
30-40       0       48.9%   (which is 71/145)
40-50       0       48.9%   (which is 71/145)
50-60       1       49.6%   (which is 72/145)
60-70       4       52.4%   (which is 76/145)
70-80       45      83.4%   (which is 121/145)
80-90       16      94.5%   (which is 137/145)
90-100      7       99.3%   (which is 144/145)
Other       1      100.0%   (which is 145/145)

对于累积计算,总是需要排序。无论如何,如果您在“范围”列中给定的值是真实的 - 这也将用于此目的,因为此字段的升序保持数据按预期顺序排列。执行以下操作以获得所需的输出。

创建以下度量-

count_percentage = 

VAR total_of_count =
CALCULATE(
    SUM(your_table_name[Count]),
    ALL(your_table_name)
)

VAR cumulative_count =
CALCULATE(
    SUM(your_table_name[Count]),
    FILTER(
        ALL(your_table_name),
        your_table_name[Range] <= MIN(your_table_name[Range])
    )
)

RETURN cumulative_count/total_of_count

这里是最终输出-

按照以下步骤获取答案。如果您觉得解决方案有帮助,请投票并接受答案。

第一步 - - 从范围列创建索引列。我已将“其他”值替换为 999。您可以将其替换为更大的数字,这不太可能出现在您的数据集中。将这个新列转换为整数

Sort Column = if(Sickness[Range] = "Other",9999,CONVERT(LEFT(Sickness[Range],SEARCH("-",Sickness[Range],1,LEN(Sickness[Range])+1)-1),INTEGER))

第 2 步 - 使用以下度量获取值:

Measure = 
var RunningTotal = CALCULATE(SUM(Sickness[Count]),FILTER(all(Sickness),Sickness[Sort Column] <= MAX(Sickness[Sort Column])))
var totalSum = CALCULATE(SUM(Sickness[Count]),ALL())
Return
RunningTotal/totalSum

下面是完全符合您要求的输出。