在具有不同计数的 Excel 数据透视表 table 中按周对数据进行分组

Grouping data by week in an Excel pivot table which has distinct count

我的原始数据是这样的:raw_data

我想按周对这些数据进行分组,显示每个观众每周观看的不同节目的数量。 数据应如下所示。 ExpectedOutput

我为我的原始数据创建了一个数据透视表 table,如下所示:Pivot1

在创建数据透视表 table 时,我选择了 'Add this data to the data model',因为我想要查看的节目的不同计数,这是使不同计数选项可用的唯一方法。遗憾的是,选择数据模型选项会限制可用的分组选项,因为您无法按周分组。

所以,我尝试创建我的数据透视表的数据透视表,但没有将数据添加到数据模型中以查看是否可行但没有成功,因为 headers 列不是日期,所以分组功能被禁用

我真的被这个问题困住了,所以任何帮助将不胜感激。

Power Query,在 Excel 2010+ 中可用,对于创建此类报告很有用。

(我尝试使用数据透视表 Table,但无法让列 headers 按您的喜好显示,而且 正确排序.)

要使用 Power Query,具体取决于您的 Excel 版本,请转到“数据”选项卡并 select 从 Table/Range 获取和转换(或 2016 年之前版本中的等效项).

然后:

  • 将 Date/Time 列转换为日期
  • 为一周的开始添加一列并设置格式 dd/MM/yyyy

  • 添加一周开始 + 6 天的列并设置格式 dd/MM/yyyy

  • 使用“-”作为分隔符合并 wkStart 和 wkEnd 列。
  • 删除现在不需要的列
  • Group 按周和查看者 ID,按行的唯一计数聚合

  • 周转

瞧!

以上所有都可以通过 Power Query 的 UI 完成。下面是生成的 M-Code.

如果你把你的数据变成Table,你可以直接把M-Code粘贴到PQ编辑器里,然后把Table 姓名第二行改为你的真实姓名table.

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Viewer ID", Int64.Type}, {"DatTime", type date}, {"ShowID", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "wkStart", each Date.ToText(Date.StartOfWeek([DatTime],Day.Monday),"dd/MM/yyyy")),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "wkEnd", each Date.ToText(Date.AddDays(Date.StartOfWeek([DatTime],Day.Monday),6),"dd/MM/yyyy")),
    #"Inserted Merged Column" = Table.AddColumn(#"Added Custom1", "Week", each Text.Combine({[wkStart], [wkEnd]}, " - "), type text),
    #"Removed Columns" = Table.RemoveColumns(#"Inserted Merged Column",{"wkStart", "wkEnd", "DatTime"}),
    #"Grouped Rows" = Table.Group(#"Removed Columns", {"Week", "Viewer ID"}, {{"Count", each Table.RowCount(Table.Distinct(_)), Int64.Type}}),
    #"Pivoted Column" = Table.Pivot(#"Grouped Rows", List.Distinct(#"Grouped Rows"[Week]), "Week", "Count", List.Sum)
in
    #"Pivoted Column"