You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于HHID和Date的多列数值增长检测技术问询

需求与现有方案

需求:基于HHID和Date维度,检测是否存在两列及以上的数值增长(即同一HHID下,至少2个Question的Points从最早日期到最晚日期出现增长)。

现有操作思路:

  • 复制源文件两份,分别通过排序及Table.Buffer提取最小日期、最大日期的去重数据
  • 合并后得到对应日期的Points值,计划进一步对比各Question的Points变化,统计增长列数:≥2标记为true,≤1标记为false

已知当前方案存在冗余,这是目前能想到的起始思路。已用颜色标记数据变化:增长(绿)、下降(红)、无变化(橙),数据集示例如下:

HHID Date Question Points
1 3/21/2022 Attendance 3
1 3/21/2022 Childcare 3
1 3/21/2022 Education 2
1 3/21/2022 Employment 2
1 3/21/2022 Family Development/Parent Engagement 2
1 3/21/2022 Family Safety 3
1 3/21/2022 Financial Management 3
1 3/21/2022 Food Security 3
1 3/21/2022 Housing 5
1 3/21/2022 Income 3
1 3/21/2022 Language Skills 0
1 3/21/2022 Literacy Grades 1 - 3 3
1 3/21/2022 Physical and Mental Health 1
1 3/21/2022 Substance Use 2
1 3/21/2022 Transportation 5
1 6/13/2024 Attendance 4
1 6/13/2024 Childcare 2
1 6/13/2024 Education 1
1 6/13/2024 Employment 4
1 6/13/2024 Family Development/Parent Engagement 4
1 6/13/2024 Family Safety 4
1 6/13/2024 Financial Management 4
1 6/13/2024 Food Security 3
1 6/13/2024 Housing 3
1 6/13/2024 Income 3
1 6/13/2024 Language Skills 5
1 6/13/2024 Literacy Grades 1 - 3 5
1 6/13/2024 Physical and Mental Health 5
1 6/13/2024 Substance Use 4
1 6/13/2024 Transportation 4

优化实现方案(Power Query M 代码)

无需复制两份源文件,通过分组+透视的方式即可高效完成统计,步骤如下:

  1. 按HHID分组,提取每个HHID的最早和最晚日期数据
  2. 透视Question列,将同一Question的首尾日期Points值转为横向对比
  3. 标记每个Question的增长情况,统计增长数量并生成最终判断结果

完整M代码:

let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    // 统一日期列类型,避免格式错误
    调整日期类型 = Table.TransformColumnTypes(源,{{"Date", type date}}),
    // 按HHID分组,筛选出每个分组的最早和最晚日期数据
    分组筛选首尾日期 = Table.Group(调整日期类型, {"HHID"}, {
        {"筛选后数据", each let
            最早日期 = List.Min([Date]),
            最晚日期 = List.Max([Date])
        in Table.SelectRows(_, each [Date] = 最早日期 or [Date] = 最晚日期)}}),
    // 展开分组数据
    展开数据 = Table.ExpandTableColumn(分组筛选首尾日期, "筛选后数据", {"Date", "Question", "Points"}, {"Date", "Question", "Points"}),
    // 透视日期列,得到每个Question的首尾Points值
    透视日期列 = Table.Pivot(展开数据, List.Distinct(展开数据[Date]), "Date", "Points"),
    // 重命名列,明确区分首尾数值
    重命名列 = Table.RenameColumns(透视日期列, {
        {List.Min(展开数据[Date]), "初始Points"},
        {List.Max(展开数据[Date]), "最终Points"}}),
    // 标记增长情况:最终值>初始值则记为1,否则为0
    添加增长标记 = Table.AddColumn(重命名列, "增长标记", each if [最终Points] > [初始Points] then 1 else 0),
    // 按HHID统计增长列数,生成最终判断结果
    统计并判断 = Table.Group(添加增长标记, {"HHID"}, {
        {"增长列数", each List.Sum([增长标记])},
        {"是否满足条件", each List.Sum([增长标记]) >= 2}})
in
    统计并判断
代码说明
  • 先统一日期类型,避免因日期格式不一致导致的筛选错误
  • 一次分组即可提取每个HHID的首尾日期数据,省去复制文件的冗余操作
  • 透视操作将纵向的Question转为横向列,直观对比同一Question的首尾数值
  • 用1/0标记增长状态,求和后直接得到增长列数,再判断是否达到≥2的要求

运行上述代码后,将得到每个HHID对应的增长列数和最终的true/false标记,比原方案更简洁高效。

内容的提问来源于stack exchange,提问作者Holly Szady

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:34:51