Power BI新手求助:如何对高分辨率数据表按区间求平均生成子集表
Power BI按区间求平均生成子集的最优方案
不需要循环,用DAX的聚合函数就能高效处理4万行数据,两种方案都能满足你的需求:
方案一:用SUMMARIZE实现(推荐)
先给每行数据打上区间标签,再按区间分组求平均,逻辑直观且性能稳定:
子集表 = VAR 带区间的原始数据 = ADDCOLUMNS( '原始数据', "区间", INT('原始数据'[数值列]/10)*10 // 这里的10是区间步长,按需调整,比如改成5就是每5个单位一个区间 ) RETURN SUMMARIZE( 带区间的原始数据, [区间], "平均测量值", AVERAGE('原始数据'[测量值]) // 替换成你要求平均的列名 )
方案二:用SELECTCOLUMNS + CALCULATE实现
完全符合你提到的函数组合,先提取所有唯一区间,再用CALCULATE筛选对应区间计算平均值:
子集表 = SELECTCOLUMNS( // 先获取所有不重复的区间 DISTINCT(ADDCOLUMNS('原始数据', "区间", INT('原始数据'[数值列]/10)*10)), "区间", [区间], "平均测量值", CALCULATE(AVERAGE('原始数据'[测量值])) )
自定义非等步长区间的处理
如果你的区间不是等步长(比如0-10、10-25、25-50这种),可以先新建一个区间映射表,包含「区间起始值」「区间结束值」「区间名称」三列,然后用LOOKUPVALUE给原始数据匹配对应区间,再用上面的方法分组聚合:
带自定义区间的原始数据 = ADDCOLUMNS( '原始数据', "区间名称", LOOKUPVALUE( '区间映射表'[区间名称], '区间映射表'[区间起始值], MAX('区间映射表'[区间起始值]) <= '原始数据'[数值列], '区间映射表'[区间结束值], MIN('区间映射表'[区间结束值]) >= '原始数据'[数值列] ) )
不管哪种方案,都比循环高效得多——DAX是基于集合运算的语言,专门处理这种批量数据聚合场景,4万行数据完全能快速计算。
内容的提问来源于stack exchange,提问作者Catherine_new2DAX
相关产品推荐
相关产品推荐

