【问题标题】:Power Query Custom Column FormulaPower Query 自定义列公式
【发布时间】:2021-10-26 19:57:52
【问题描述】:

我正在尝试汇总通过电源查询引入的数据并添加自定义列。本质上,我想按组计算数据馈送中所有前非零月份,并在单独的列中报告该计数。

例如,输入数据如下所示:

Index UNIQUEID PRMS Reserves Category PRMS Reserves Sub Category Date Gross Oil Well Head Volume (MBBL)
36 INPTegrxW4xbF6 probable undeveloped 6/1/2027 0
36 INPTegrxW4xbF6 probable undeveloped 7/1/2027 0
36 INPTegrxW4xbF6 probable undeveloped 8/1/2027 0
36 INPTegrxW4xbF6 probable undeveloped 9/1/2027 14
36 INPTegrxW4xbF6 probable undeveloped 10/1/2027 24
36 INPTegrxW4xbF6 probable undeveloped 11/1/2027 27
37 INPTegrxW4xbF7 probable undeveloped 6/1/2027 0
37 INPTegrxW4xbF7 probable undeveloped 7/1/2027 0
37 INPTegrxW4xbF7 probable undeveloped 8/1/2027 0
37 INPTegrxW4xbF7 probable undeveloped 9/1/2027 14
37 INPTegrxW4xbF7 probable undeveloped 10/1/2027 24
37 INPTegrxW4xbF7 probable undeveloped 11/1/2027 27
38 INPTegrxW4xbF8 probable undeveloped 6/1/2027 0
38 INPTegrxW4xbF8 probable undeveloped 7/1/2027 0
38 INPTegrxW4xbF8 probable undeveloped 8/1/2027 0
38 INPTegrxW4xbF8 probable undeveloped 9/1/2027 14
38 INPTegrxW4xbF8 probable undeveloped 10/1/2027 24
38 INPTegrxW4xbF8 probable undeveloped 11/1/2027 27
39 INPTegrxW4xbF9 proved undeveloped 5/1/2027 0
39 INPTegrxW4xbF9 proved undeveloped 6/1/2027 0
39 INPTegrxW4xbF9 proved undeveloped 7/1/2027 0
39 INPTegrxW4xbF9 proved undeveloped 8/1/2027 14
39 INPTegrxW4xbF9 proved undeveloped 9/1/2027 24
39 INPTegrxW4xbF9 proved undeveloped 10/1/2027 27

我希望最终查询看起来像这样:

PRMS Reserves Category PRMS Reserves Sub Category Date Sum of Gross Oil Count
probable undeveloped 6/1/2027 0 0
probable undeveloped 7/1/2027 0 0
probable undeveloped 8/1/2027 0 0
probable undeveloped 9/1/2027 42 3
probable undeveloped 10/1/2027 72 0
probable undeveloped 11/1/2027 81 0
proved undeveloped 5/1/2027 0 0
proved undeveloped 6/1/2027 0 0
proved undeveloped 7/1/2027 0 0
proved undeveloped 8/1/2027 14 1
proved undeveloped 9/1/2027 24 0
proved undeveloped 10/1/2027 27 0

有人对如何在 power query 的自定义列中编写函数有建议吗?

【问题讨论】:

  • 由于您的所有日期在月初,只需按 DatePMRS Reserves Category 分组,并为聚合做 SUM 的 @987654326 @.
  • 谢谢——总油量的总和很简单。计算第一个非零总油量并按组计算是我遇到麻烦的地方。
  • 不确定您使用的逻辑。给定 2027 年 10 月 1 日的索引 36、37、38,您对输出的期望是什么。共有三行,每行的 Volume 为 24。在输出表中,volume 显示 72,Count 显示 0。但是对于 2027 年 9 月 1 日(相同的行索引 = 36、37、38),您显示 3 表示计数
  • 没错。 9/1/2027 有三个记录,它们是 probable undeveloped 中的第一个非零条目。 10/1/2027 在该组中有三个非零记录,但它们是第二个(而不是第一个)非零元素。

标签: dax powerquery m


【解决方案1】:

您似乎需要计算每个类别组合的最小日期MinDate,然后检查是否Date = MinDate

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("pZGxCoMwFEX/JbNgklqT/EChS+lQ6CAODYYuUkWo+PlN62DNe8vV7SVwznBPVYlDKTJxvlxv4TlM92Lyp+9HP3T+4dsQz/erCWNouz408VXmKtdSm3hKUWcwb3bydifvFl4VWwRKLga9zaD+DGY2mNRgsAgYTyNgPI2A8UwETMBFAA1MBJsaLBYB42kEjKcRMJ6JgAm4CKCBieBSg5sN449Y80cyAULTgAhN8yG0peMjuKPLI/iqXNy9/gA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Index = _t, UNIQUEID = _t, #"PRMS Reserves Category" = _t, #"PRMS Reserves Sub Category" = _t, Date = _t, #"Gross Oil Well Head Volume (MBBL)" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Index", Int64.Type}, {"UNIQUEID", type text}, {"PRMS Reserves Category", type text}, {"PRMS Reserves Sub Category", type text}, {"Date", type date}, {"Gross Oil Well Head Volume (MBBL)", Int64.Type}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([#"Gross Oil Well Head Volume (MBBL)"] <> 0)),
    #"Grouped Category" = Table.Group(#"Filtered Rows", {"PRMS Reserves Category", "PRMS Reserves Sub Category"}, {{"MinDate", each List.Min([Date]), type nullable date}}),
    #"Merged Queries" = Table.NestedJoin(#"Changed Type", {"PRMS Reserves Category", "PRMS Reserves Sub Category"}, #"Grouped Category", {"PRMS Reserves Category", "PRMS Reserves Sub Category"}, "Grouped Rows", JoinKind.LeftOuter),
    #"Expanded Grouped Rows" = Table.ExpandTableColumn(#"Merged Queries", "Grouped Rows", {"MinDate"}, {"MinDate"}),
    #"Added Custom" = Table.AddColumn(#"Expanded Grouped Rows", "Custom", each if [Date] = [MinDate] then 1 else 0, Int64.Type),
    #"Grouped Category and Date" = Table.Group(#"Added Custom", {"PRMS Reserves Category", "PRMS Reserves Sub Category", "Date"}, {{"Gross", each List.Sum([#"Gross Oil Well Head Volume (MBBL)"]), type nullable number}, {"Count", each List.Sum([Custom]), type number}})
in
    #"Grouped Category and Date"

这会在过滤掉0 值后通过在Date 列上取最小值来计算#"Grouped Category" 步骤中的MinDate

然后它将这个MinDate 列合并回原始表,并使用逻辑if [Date] = [MinDate] then 1 else 0 添加一个自定义列。

上面显示的前三列中的最后一步分组,对总石油和海关求和。

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2018-01-25
    • 2020-06-04
    • 1970-01-01
    相关资源
    最近更新 更多