强力查询 - 根据日期和小时间隔对 a table 进行分组
Power query - Group a table based on the date and the hourly interval
我需要根据日期和小时间隔对 table 进行分组,使用总和:
- 日期
- 间隔:从今天上午 8 点到今天 <8 点+1
以前我使用 MS Access 和查询来创建它。现在我需要在 MS Excel.
中使用 Power Query
这是之前使用的 SQL 查询:
SELECT开关(Tbl_Prod_Chat.[间隔]>=8,Tbl_Prod_Chat.[日期],Tbl_Prod_Chat.[间隔]<8,Tbl_Prod_Chat.[日期]-1) AS LINK_DATE, Tbl_Prod_Chat.Agent, Sum(Tbl_Prod_Chat.ProdChat) AS Prod_Chat
来自 Tbl_Prod_Chat
GROUP BY Switch(Tbl_Prod_Chat.[Interval]>=8,Tbl_Prod_Chat.[Date],Tbl_Prod_Chat.[Interval]<8,Tbl_Prod_Chat.[Date]-1 ), Tbl_Prod_Chat.Agent;
table 构建为:
- 字段 1“日期”(type/format: mm/dd/yyyy)
- 字段 2“间隔”(类型:整数):1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17 , 18, 19, 20, 21, 22, 23, 0
- 字段 3“联系人数量”(类型:整数)
新的 table 将是:
- 字段 1“日期”
- 字段 2“总交易量”(从今天上午 8 点到今天 <8 点+1 的 24 小时总和)。
你能帮我解决这个问题吗?
谢谢
塞布
听起来您只需要添加一个自定义列
添加列..自定义列...
= if [Interval] >7 or [Interval]=0 then [Date] else Date.AddDays([Date],-1)
或
= if [Interval] <8 and [Interval] > 0 then Date.AddDays([Date],-1) else [Date]
这将占用所有时间 [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,0] 并使用当前日期并将占用下一个日期的所有时间 [1,2,3,4,5,6,7]。
然后在新的自定义列上右键单击...分组依据 .. 并在列上执行操作求和:联系人数量,在新列名称中使用您想要的任何名称
示例完整代码
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Interval", Int64.Type}, {"Volume of contact", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each if [Interval] >7 or [Interval]=0 then [Date] else Date.AddDays([Date],-1), type date),
#"Grouped Rows" = Table.Group(#"Added Custom", {"Custom"}, {{"Volume of Contact", each List.Sum([Volume of contact]), type number}})
in #"Grouped Rows"
我需要根据日期和小时间隔对 table 进行分组,使用总和:
- 日期
- 间隔:从今天上午 8 点到今天 <8 点+1
以前我使用 MS Access 和查询来创建它。现在我需要在 MS Excel.
中使用 Power Query这是之前使用的 SQL 查询: SELECT开关(Tbl_Prod_Chat.[间隔]>=8,Tbl_Prod_Chat.[日期],Tbl_Prod_Chat.[间隔]<8,Tbl_Prod_Chat.[日期]-1) AS LINK_DATE, Tbl_Prod_Chat.Agent, Sum(Tbl_Prod_Chat.ProdChat) AS Prod_Chat 来自 Tbl_Prod_Chat GROUP BY Switch(Tbl_Prod_Chat.[Interval]>=8,Tbl_Prod_Chat.[Date],Tbl_Prod_Chat.[Interval]<8,Tbl_Prod_Chat.[Date]-1 ), Tbl_Prod_Chat.Agent;
table 构建为:
- 字段 1“日期”(type/format: mm/dd/yyyy)
- 字段 2“间隔”(类型:整数):1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17 , 18, 19, 20, 21, 22, 23, 0
- 字段 3“联系人数量”(类型:整数)
新的 table 将是:
- 字段 1“日期”
- 字段 2“总交易量”(从今天上午 8 点到今天 <8 点+1 的 24 小时总和)。
你能帮我解决这个问题吗? 谢谢
塞布
听起来您只需要添加一个自定义列
添加列..自定义列...
= if [Interval] >7 or [Interval]=0 then [Date] else Date.AddDays([Date],-1)
或
= if [Interval] <8 and [Interval] > 0 then Date.AddDays([Date],-1) else [Date]
这将占用所有时间 [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,0] 并使用当前日期并将占用下一个日期的所有时间 [1,2,3,4,5,6,7]。
然后在新的自定义列上右键单击...分组依据 .. 并在列上执行操作求和:联系人数量,在新列名称中使用您想要的任何名称
示例完整代码
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Interval", Int64.Type}, {"Volume of contact", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each if [Interval] >7 or [Interval]=0 then [Date] else Date.AddDays([Date],-1), type date),
#"Grouped Rows" = Table.Group(#"Added Custom", {"Custom"}, {{"Volume of Contact", each List.Sum([Volume of contact]), type number}})
in #"Grouped Rows"