两个不同表之间日期差异的平均聚合

问题描述 投票:0回答:1

我有2张桌子:

  1. 日历表
Date
-----
Dec 2021
Jan 2022
Feb 2022
Mar 2022
   .
   .
   .
  1. 活动表
Event   | Last Date
-----------------
Event A | 01-Jan-2013
Event B | 01-Mar-2017
Event C | 01-Feb-2022
   .    |      .
   .    |      .
   .    |      .

我想创建一个表,计算日历表和事件表的最后日期之间的平均月份差异,并每月汇总它们

计算如下:

2021 年 12 月

事件 A 的月份差异 = 107
事件 B 的月份差异= 57
事件 C 不被视为最后日期 > 2021 年 12 月
平均值 = (107+57)/2 = 82

2022 年 1 月

事件 A 的月份差异= 108
事件 B 的月份差异= 58
事件 C 不被视为最后日期 > 2022 年 1 月
平均值 = (108+57)/2 = 83

2022 年 2 月

事件 A 的月份差异 = 109
事件 B 的月份差异 = 59
事件 C 的月份差异= 0
平均值 = (109+58+0)/3 = 56

2022 年 3 月

事件 A 的月份差异 = 110
事件 B 的月份差异= 60
事件 C 的月份差异 = 1
平均值 = (110+59+1)/3 = 57

输出表应如下:

Date     | Avg Diff
------------------------
Dec 2021 | 82
Jan 2022 | 83
Feb 2022 | 56
Mar 2022 | 57
   .     |
   .     |
   .     |

感谢您通过 DAX(PowerBI) 或 PowerQuery 实现此目的的任何帮助。

powerbi dax powerquery powerbi-desktop m
1个回答
3
投票

结果

事件表如下所示:

日历表看起来像这样:

日历表获取结果的完整代码:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcklNVjAyMDJUitWJVvJKzANxjMAct9QkBMc3sQjKiQUA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t]),
    #"Duplicated Column" = Table.DuplicateColumn(Source, "Date", "Date2"),
    #"Changed Type" = Table.TransformColumnTypes(#"Duplicated Column",{{"Date2", type date}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", 
let a =  (x)=> 
   let b = Table.SelectRows( Event, (y)=> y[Last Date] <= x[Date2] ), 
   c = Table.AddColumn(b, "diff", (z)=>( Date.Month(x[Date2]) +  (Date.Year(x[Date2])*12)) - (Date.Month(z[Last Date]) +  (Date.Year(z[Last Date])*12)) ),
   d = Table.RowCount(b),
   e = List.Sum(c[diff])
   in e/d
in a),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Date2"})
in
    #"Removed Columns"
© www.soinside.com 2019 - 2024. All rights reserved.