如何根据分组变量在PowerQuery中计算百分位数?

时间:2019-05-24 14:07:59

标签: excel powerquery percentile

我有几列数据,我需要将“ PERCENTILE”的excel版本转换为Powerquery格式。

我有一些代码可以作为一个函数添加,但是不能正确应用,因为它不允许按CATEGORY和YEAR对数据进行分组。因此,需要将完全自由裁量权1.5-2.5 AND 2014中的所有内容添加到百分位数数组中,同样,将完全自由裁量权2.5-3.5 AND 2014中的所有内容添加到不同的百分位数组中

let

 Source = (list as any, k as number) => let

 Source = list,

 #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

 #"Sorted Rows" = Table.Sort(#"Converted to Table",{{"Column1", Order.Ascending}}),

 #"Added Index" = Table.AddIndexColumn(#"Sorted Rows", "Index", 1, 1),

 #"Added Custom" = Table.AddColumn(#"Added Index", "TheIndex", each Table.RowCount(#"Converted to Table")*k/100),

 #"Filtered Rows" = Table.SelectRows(#"Added Custom", each [Index] >= [TheIndex] and [Index] <= [TheIndex]+1),

Custom1 = List.Average(#"Filtered Rows"[Column1])

   in

 Custom1

in

 Source

因此,预期结果将是在2列(年份,类别)中匹配的任何内容都应应用于同一数组中。当前调用上述功能只会给我错误。 我还尝试使用分组并输出“最小,中位数和最大”输出,但是我还需要10%和90%的百分位数。

提前谢谢

1 个答案:

答案 0 :(得分:0)

根据其他网站上的一些发现和大量使用Google搜索功能(大多数人只想使用DAX,但是如果您仅使用Power Query则不能!),有人发布了一个非常有用的答案:

https://social.technet.microsoft.com/Forums/en-US/a57bfbea-52d1-4231-b2de-fa993d9bb4c9/can-the-quotpercentilequot-be-calculated-in-power-query?forum=powerquery

基本上:

/PercentileInclusive Function

(inputSeries as list, percentile as number) => 
let
    SeriesCount = List.Count(inputSeries),
    PercentileRank = percentile*(SeriesCount-1)+1, //percentile value between 0 and 1
    PercentileRankRoundedUp = Number.RoundUp(PercentileRank),
    PercentileRankRoundedDown = Number.RoundDown(PercentileRank),
    Percentile1 = List.Max(List.MinN(inputSeries,PercentileRankRoundedDown)),
    Percentile2 = List.Max(List.MinN(inputSeries,PercentileRankRoundedUp)),
    Percentile = Percentile1+(Percentile2-Percentile1)*(PercentileRank-PercentileRankRoundedDown)
in
    Percentile

以上内容将复制Excel中找到的PERCENTILE函数-您可以使用“新查询”和高级编辑器将此作为查询传递。将数据分组后再调用它-

  

Table.Group(RenamedColumns,{“ Country”},{{“ Sales Total”,每个   List.Sum([Amount Sales]),键入数字},{“ 95 Percentile Sales”,每个   List.Average([销售金额]),键入数字}})

     

在上面的公式中,RenamedColumns是上一步的名称   在脚本中。更改名称以符合您的实际情况。我假设   分组前的销售金额列为“销售金额”。的名字   分组的列是“销售总额”和“ 95%销售额”。

     

接下来修改组公式,用List代替。   百分位数:

     

Table.Group(RenamedColumns,{“ Country”},{{“ Sales Total”,每个   List.Sum([Amount Sales]),键入数字},{“ 95 Percentile Sales”,每个   PercentileInclusive([Amount Sales],0.95),键入数字}})

这适用于我的数据集,并且匹配相似的