本篇文章将介绍矩阵聚焦灯效果的实现,具体效果如下图所示:
该聚焦灯效果的创意来自于白茶大佬,由于挺好玩的因此我就进行了复现并做了一定的增强,增加了通过RGB颜色代码来自定义高亮颜色的功能。然后发现白茶大佬文章里介绍的实现方法与我的不一致,因此我决定愉快的水一篇文章,简单介绍下我的实现方法与思路。
首先来看下使用到的数据与模型,如下图:
然后,提取产品表中的商品分类以及分店表中的分店名,分别生成两张辅助表,这两张辅助表不需要与模型中的其它表建立关系,使用到的新建表公式如下:
分店-切片器 = ALL('分店表'[分店名])
商品分类-切片器 = ALL('产品表'[商品分类])
上述准备工作完成后,模型如下图所示:
然后简单拉一个矩阵出来:
最后,新建一个度量值用于控制矩阵条件格式中的背景色,度量值代码如下:
聚焦灯 =
VAR CurItem = MAX('产品表'[商品分类])&MAX('分店表'[分店名])
VAR FilterList_store = FILTER(VALUES('分店-切片器'[分店名]),ISFILTERED('分店-切片器'))
VAR FilterList_product = FILTER(VALUES('商品分类-切片器'[商品分类]),ISFILTERED('商品分类-切片器'[商品分类]))
VAR Num =
COUNTROWS(
FILTER(
UNION(FilterList_store,FilterList_product),
FIND('分店-切片器'[分店名],CurItem,,0)
)
)
RETURN
SWITCH(TRUE(),
Num=1,"rgba("&[R 值]&","&[G 值]&","&[B 值]&",0.5)",
Num>1,"rgba("&[R 值]&","&[G 值]&","&[B 值]&",1)"
)
简单说一下聚焦灯这个度量值的实现思路:首先获取矩阵的当前行列标题,并拼接成一个字符串,然后获取分店与商品分类两个切片器中所选择的项目,接着判断行列标题拼接成的字符串中是否包含任意一个切片器中选择的项目,如果包含两个或以上,则代表当前的单元格处于十字交叉位置,高亮颜色需要加深;如果只包含一个,则代表当前的单元格处于十字非交叉位置,高亮颜色较浅即可;如果一个都不包含,那就是非十字相关位置,因此不用高亮。
经过上面的设置后,最终实现的效果如下图所示: