如何基于行聚合值对交叉表单元格设置条件格式化?
交叉表条件格式引用行级平均值/标准差的解决办法
直接写CellValue ()>[myQuery].[Average(myData)]没用,本质是交叉表的行聚合值(每个分类的平均、标准差)是行级的动态结果,普通字段引用抓不到当前行的对应值,得用行上下文绑定的方式来取。
最靠谱的实现步骤
1. 给行分组加变量
找到交叉表的「分类」行分组,在它的属性面板里添加两个变量:
- 名字叫
RowAvg,表达式填=Avg(Fields!myData.Value) - 名字叫
RowStdDev,表达式填=StDev(Fields!myData.Value)
这俩变量会自动跟着每一行的分类计算对应的平均和标准差。
2. 写条件格式公式
选中要高亮的年月列数值单元格,打开条件格式规则,把公式改成:
=CellValue() > (Variables!RowAvg.Value + 1.645 * Variables!RowStdDev.Value)
然后设置你要的高亮样式(比如背景变黄)就行。
备选方案:提前在数据集里算好聚合值
如果上面的变量方法不好使,你可以改数据集查询,提前按分类分组算出每个分类的平均和标准差(比如SQL里用GROUP BY 分类,算AVG(myData)和STDDEV(myData)),然后用Lookup函数关联:
=CellValue() > (Lookup(Fields!分类.Value, Fields!分类.Value, Fields!Avg_myData.Value, "myQuery") + 1.645 * Lookup(Fields!分类.Value, Fields!分类.Value, Fields!StdDev_myData.Value, "myQuery"))
这种方式需要数据集里每个分类都带预计算的聚合字段,好处是报表层面不用重复计算。
测试小技巧
可以先在交叉表的行末尾加个临时单元格,输入=Variables!RowAvg.Value或者=Variables!RowStdDev.Value,看看每个分类行的数值对不对,确认没问题再套进条件格式里。
内容的提问来源于stack exchange,提问作者S. Melted
相关产品推荐
相关产品推荐

