Power BI DAX技术求助:统计值连续n次及连续3次出现的总次数
Power BI中DAX实现连续数值出现次数统计
一、通用方案:统计某数值连续出现n次的总次数
前提条件
假设你的数据表(示例用FactTable)包含:
- 用于排序的列(比如
日期,确保数据按时间/顺序排列) - 目标数值列(比如
Value,要统计的数值列)
步骤1:添加计算列标记连续分组
连续分组ID = VAR CurrValue = 'FactTable'[Value] VAR PrevValue = INDEX( 1, FILTER('FactTable', 'FactTable'[日期] < EARLIER('FactTable'[日期])), ORDERBY('FactTable'[日期], DESC), SELECTCOLUMNS('FactTable', "Val", 'FactTable'[Value]) ) RETURN IF(ISBLANK(PrevValue), 1, IF(CurrValue = PrevValue, EARLIER('FactTable'[连续分组ID]), 'FactTable'[连续分组ID] + 1))
步骤2:计算每个连续分组的长度
连续序列长度 = CALCULATE( COUNTROWS('FactTable'), ALLEXCEPT('FactTable', 'FactTable'[连续分组ID], 'FactTable'[Value]) )
步骤3:创建度量值统计总次数
修改TargetN的值即可适配任意n:
连续n次总次数 = VAR TargetN = 3 // 替换为你需要的次数 RETURN SUMX( SUMMARIZE( 'FactTable', 'FactTable'[连续分组ID], 'FactTable'[Value], "序列长度", MAX('FactTable'[连续序列长度]) ), IF([序列长度] >= TargetN, [序列长度] - TargetN + 1, 0) )
二、特定方案:统计某值连续3次出现的总次数
如果只需要统计连续3次的情况,可直接使用以下简化度量值(无需额外计算列):
连续3次总次数 = VAR RankedData = ADDCOLUMNS( 'FactTable', "行号", RANKX('FactTable', 'FactTable'[日期], , ASC, DENSE) ) VAR ConsecutiveGroups = ADDCOLUMNS( RankedData, "分组ID", VAR CurrRow = [行号] VAR CurrVal = [Value] VAR PrevVal = MAXX(FILTER(RankedData, [行号] = CurrRow - 1), [Value]) RETURN IF(ISBLANK(PrevVal), 1, IF(CurrVal = PrevVal, EARLIER([分组ID]), EARLIER([分组ID]) + 1)) ) RETURN SUMX( SUMMARIZE(ConsecutiveGroups, [分组ID], [Value], "序列长度", COUNTROWS(ConsecutiveGroups)), IF([序列长度] >= 3, [序列长度] - 3 + 1, 0) )
说明
- 上述逻辑中,连续出现L次的序列会贡献
L - n + 1次符合条件的统计(比如连续5次,连续3次的统计次数为5-3+1=3) - 如果需要针对特定数值统计,可在
SUMMARIZE或过滤条件中添加'FactTable'[Value] = 目标值的筛选
内容的提问来源于stack exchange,提问作者Rider03
相关产品推荐
相关产品推荐

