计数问题,请高手解答一下

Power Query ksbor ⋅ 于 2019-10-30 14:20:32 ⋅ 最后回复由 ksbor 2019-10-31 11:38:27 ⋅ 2150 阅读

file
编号T13会随机排列在表格中,需要一列来统计这次T13出现与上次出现的间隔数,如图所示第二个T13与第一个T13间隔数是7,第三个T13与第二个T13间隔数是13

成为第一个点赞的人吧 :bowtie:
最佳答案
  • 焦棚子 微软 MVP
    2019-10-30 17:04:03

    参考

    let
        源 = Excel.CurrentWorkbook(){[Name="demo"]}[Content],
        索引 = Table.AddIndexColumn(源, "结果", 0, 1),
        sxb=Table.Buffer(Table.SelectRows(索引,(t)=> t[条件] = "T13")),
        result = Table.ReplaceValue(索引,each _,null,(X,Y,Z)=>
                    if Y[条件]="T13"  then 
                        let 
                            tb=Table.SelectRows(sxb, (sx)=> sx[结果] <= Y[结果] ),
                            l=Table.LastN(tb,2)[结果] 
                        in 
                            if  List.Count(l)=1 then 0 else l{1}- l{0}   
                    else null 
                    ,{"结果"}),
        类型 = Table.TransformColumnTypes(result,{{"编号", type text}, {"日期", type date}, {"时间", type time}, {"条件", type text}, {"结果", Int64.Type}})
    in
        类型

    file

回复数量: 6
  • 焦棚子 微软 MVP
    2019-10-30 17:04:03

    参考

    let
        源 = Excel.CurrentWorkbook(){[Name="demo"]}[Content],
        索引 = Table.AddIndexColumn(源, "结果", 0, 1),
        sxb=Table.Buffer(Table.SelectRows(索引,(t)=> t[条件] = "T13")),
        result = Table.ReplaceValue(索引,each _,null,(X,Y,Z)=>
                    if Y[条件]="T13"  then 
                        let 
                            tb=Table.SelectRows(sxb, (sx)=> sx[结果] <= Y[结果] ),
                            l=Table.LastN(tb,2)[结果] 
                        in 
                            if  List.Count(l)=1 then 0 else l{1}- l{0}   
                    else null 
                    ,{"结果"}),
        类型 = Table.TransformColumnTypes(result,{{"编号", type text}, {"日期", type date}, {"时间", type time}, {"条件", type text}, {"结果", Int64.Type}})
    in
        类型

    file

  • 飞天篮球 Talk is cheap, show me your code.
    2019-10-30 21:50:55

    fyi...

    = let a = Table.PositionOf(源,[条件="T13"],2,each [条件]),
          b = List.Zip({a,{null}&a}),
          c = List.TransformMany( b,
                                  each if _{0}=null then {} else 
                                       if _{1}=null then List.Repeat({null},_{0})&{0} else 
                                       List.Repeat({null},_{0}-_{1}-1)&{_{0}-_{1}},
                                  (x,y)=>y )
      in Table.FromColumns( Table.ToColumns(源)&{c}, Table.ColumnNames(源)&{"结果"} )
  • 飞天篮球 Talk is cheap, show me your code.
    2019-10-30 21:53:15
    let
        源 = Excel.CurrentWorkbook(){[Name="demo"]}[Content],
    
        acc = List.Accumulate( Table.ToRecords(源),
                               {{},"",0},
                               (s,c)=>if c[条件]="T13" then 
                                                           if s{1}="T13" then 
                                                           {s{0}&{c&[结果=s{2}]},c[条件],1} 
                                                           else {s{0}&{c&[结果=null]},c[条件],1} 
                                      else {s{0}&{c&[结果=null]},s{1},s{2}+1} ),
    
        rlt = Table.FromRecords(acc{0})
    in
        rlt
  • 焦棚子 微软 MVP
    2019-10-30 22:12:04
  • libo5563
    2019-10-30 23:33:42

    file 顺便问下,源文件从哪下载?没找到,就自己随便模拟了一个

  • ksbor
    2019-10-31 11:38:27

    @焦棚子
    测试可行,非常感谢!

暂无评论~~
  • 请务必阅读并严格遵守《社区管理规范与使用说明》
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 发送表情,可用的 Emoji 见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板粘贴上传, 格式限制 - jpg, png, gif
  • 不支持上传附件,请尽可能用文字和图片将问题描述清楚,如实在需要上传附件,可上传到 共享网盘 后分享链接
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter