【问题标题】:Calculate cumulative % based on sum of next row根据下一行的总和计算累积百分比
【发布时间】:2020-08-17 00:46:49
【问题描述】:

我想根据以下公式计算 %。它的小技巧,我有点卡住了,不知道该怎么做。如果有人可以提供帮助,谢谢。

下表中按范围分组的记录很少

范围计数 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 其他 1

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

范围计数累计范围百分比 0-10 50 34.5%(即 50/145) 10-20 12 42.7%(即 62/145) 20-30 9 48.9%(即 71/145) 30-40 0 48.9%(即 71/145) 40-50 0 48.9%(即 71/145) 50-60 1 49.6%(即 72/145) 60-70 4 52.4%(即 76/145) 70-80 45 83.4%(即 121/145) 80-90 16 94.5%(即 137/145) 90-100 7 99.3%(即 144/145) 其他 1 100.0%(即 145/145)

【问题讨论】:

  • 你有索引列来排序数据吗?

标签: powerbi dax measure


【解决方案1】:

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

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

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

第二步 - 使用以下度量来获取价值:

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

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

【讨论】:

  • 嗨@sam,这和我的回答一样,而且回答得更晚了。通过更改变量和列名以及一些描述来复制别人的答案是什么意思?
  • @mkRabbani ..我知道我复制了你的答案。当我阅读您的 cmets 时,我了解到您的解决方案由于缺少 ok 索引列而无法工作。这是我在写答案时读到的最后一条评论——“谢谢 mkRabbani,不幸的是,我将列 (count_percentage) 中的所有行的值都设为 34.48%。我怀疑这是因为我将 Range 值定义为文本。可以吗?是个问题吗?——”
  • @mkRabbani.. PS:虽然它给了我为工作赢得荣誉的动力,但同时,我不喜欢从别人的工作中获得荣誉。我给出了解决方案,因为我觉得你的公式不起作用。
  • 您的解决方案与我的相比有什么不同?
  • @user13320137 :如果 mkRabbani 解决方案有效,那么请接受 mkRabbani 解决方案而不是我的解决方案,因为他首先回答。谢谢..
【解决方案2】:

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

创建以下度量-

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

这是最终的输出-

【讨论】:

  • 感谢 mkRabbani,不幸的是,我将列 (count_percentage) 中的所有行的值设为 34.48%。我怀疑这是因为我将 Range 值定义为文本。这可能是个问题吗?
  • 我还添加了一个索引列并使用它而不是 Range 但仍然得到相同的输出。
  • 您可以在 Power Query 编辑器中对“范围”列应用升序后尝试吗?让我知道输出
  • 欢迎您@user13320137。但不幸的是,您接受了从我那里复制的答案。一切都被复制了,只是重命名了列和描述:(
猜你喜欢
  • 2020-12-23
  • 2019-01-09
  • 2017-03-03
  • 2018-04-20
  • 2017-03-06
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 2021-10-15
相关资源
最近更新 更多