从数据到信息
从信息到洞察

求解连续次数问题的两种方式

问题描述

这是一类统计特征值连续出现次数的问题,例如员工连续出勤天数、彩票号码连续出现次数,Excel解决此问题要用到数组函数,性能较低,不适合大数据量的场景。

样例数据

以彩票数据为例,统计表格中特码单双列 单双号连续出现次数。
求解连续次数问题
最终效果,实现右侧红框中的连续出现次数统计。
求解连续次数问题

DAX求解思路

解决此问题,除了特征值列,还需要一列索引,本例中将[期数]转为数字列使用。原数据直接导入模型,新建计算列,每行计算上下临界点对应的期数,相减,得到连续出现次数。
求解连续次数问题

CALCULATE (
    MAX ( '表'[期数] ),
    ALL ( '表' ),
    '表'[特码单双] <> EARLIER ( '表'[特码单双] ),
    '表'[期数] < EARLIER ( '表'[期数] )
)
IF (
    ISBLANK (
        CALCULATE (
            MIN ( '表'[期数] ),
            ALL ( '表' ),
            '表'[特码单双] <> EARLIER ( '表'[特码单双] ),
            '表'[期数] > EARLIER ( '表'[期数] )
        )
    ),
    MAX ( '表'[期数] ) + 1,
    CALCULATE (
        MIN ( '表'[期数] ),
        ALL ( '表' ),
        '表'[特码单双] <> EARLIER ( '表'[特码单双] ),
        '表'[期数] > EARLIER ( '表'[期数] )
    )
)

注:IF语句用来处理首次出现号码上界为空的问题

表[连续次数]=表[连续区间上界]-表[连续区间下界]-1

M求解思路

使用分组功能对行做计数统计,之后调整Table.Group函数的第三个参数,一步可出结果,异常简洁。
求解连续次数问题
Table.Group第三个参数分为局部(GroupKind.Local)和全局(GroupKind.Global)两种,默认使用全局分组,两者区别是:全局分组将输入表具备相同键值的所有行视为单一值。局部分组将具备相同键值的连续行作为一个单独分组。所以,当单一键值多次出现时,在全局分组下视为一个单值,而局部分组下则视为多值。

原创内容 转载请联系作者授权:PowerBI极客 » 求解连续次数问题的两种方式

说点什么

1000
  
smilegrinwinkmrgreenneutraltwistedarrowshockunamusedcooleviloopsrazzrollcryeeklolmadsadexclamationquestionideahmmbegwhewchucklesillyenvyshutmouth
  订阅本文评论  
提醒