【问题标题】:How do I calculate Percentiles in PowerQuery based on grouping variables?如何根据分组变量计算 Power Query 中的百分位数?
【发布时间】:2019-06-05 21:00:52
【问题描述】:

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

我有一些代码作为函数添加,但不能准确应用,因为它不允许按类别和年份对数据进行分组。因此,Full Discretionary 1.5-2.5 AND 2014 中的任何内容都需要添加到百分位数数组中,同样,Full Discretionary 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 列(Year,Category)上匹配的任何内容都应应用于同一数组中。目前调用上述函数只会给我错误。 我也尝试过使用分组并输出“最小值、中值和最大值”输出,但我还需要 10% 和 90% 的百分位数。

提前谢谢你

【问题讨论】:

    标签: excel powerquery percentile


    【解决方案1】:

    根据其他网站上的一些发现和大量谷歌搜索(大多数人只想使用 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", each List.Sum([Amount Sales]), type number}, {"95 Percentile Sales", each List.Average([Amount Sales]), type number}})

    上式中,RenamedColumns为上一步的名称 在脚本中。更改名称以匹配您的实际情况。我假设 预分组销售额栏为“销售额”。的名字 分组列是“总销售额”和“95 百分比销售额”。

    接下来修改组公式,将 List.Average 替换为 百分位数:

    Table.Group(RenamedColumns, {"Country"}, {{"Sales Total", each List.Sum([Amount Sales]), type number}, {"95 Percentile Sales", each PercentileInclusive([Amount Sales],0.95), type number}})

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-25
      • 2021-11-29
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多