如何在TM1规则中实现Excel COUNTIF等价功能?统计含'EVET'的单元格
在TM1规则中实现类似Excel COUNTIF的统计功能
核心实现思路
通过TM1的INSTR函数检测单元格内容是否包含目标字符串EVET,结合SUM函数遍历数据源的行/列维度进行计数,同时关联月份维度确保统计结果匹配目标区域的对应月份。
基础规则代码(维度直接匹配场景)
假设:
- 数据源立方体:
Source_Cube,维度包含Month、Data_Row、Data_Col - 目标立方体:
Target_Cube,维度包含Month、Metric(其中Metric维度有EVET_Count统计项)
# 目标立方体中EVET统计项的计算规则 ['EVET_Count'] = SUM( {Data_Row.Data_Row, Data_Col.Data_Col}, IF( INSTR(DB('Source_Cube', !Month, Data_Row, Data_Col), 'EVET') > 0, 1, 0 ) );
维度映射场景(月份维度名称/编码不同)
如果数据源与目标的月份维度不直接匹配,可通过属性映射关联:
['EVET_Count'] = SUM( {Data_Row.Data_Row, Data_Col.Data_Col, Source_Month.Source_Month}, IF( AND( ATTRS('Target_Month', !Target_Month, 'Source_Month_Mapping') = Source_Month, INSTR(DB('Source_Cube', Source_Month, Data_Row, Data_Col), 'EVET') > 0 ), 1, 0 ) );
性能优化:添加Feeders
若数据源为稀疏维度,需配置Feeder避免计算延迟:
FEEDERS; # 从数据源单元格触发目标统计项的预计算 DB('Source_Cube', Source_Month, Data_Row, Data_Col) => DB('Target_Cube', ATTRS('Source_Month', Source_Month, 'Target_Month_Mapping'), 'EVET_Count');
关键函数说明
INSTR(string, substring):返回子串在字符串中的起始位置,返回值>0表示子串存在SUM(set, expression):遍历指定维度集,对符合条件的表达式结果求和ATTRS(dimension, element, attribute):通过属性值关联不同维度的元素
内容的提问来源于stack exchange,提问作者Vatan Ozcelik
相关产品推荐
相关产品推荐

