Power BI内置表格矩阵最常用的条件格式有字体颜色、背景色和图标。长文本能不能实现同样的条件格式?当然可以。原理是DAX+HTML/SVG。
首先看字体颜色,下图例子中,长文本串联了几个指标,当指标正常时绿色,不正常时红色。
度量值如下,对需要改变字体颜色的部分用<span>包裹,单独对span施加IF变化颜色。
M.P =
"<p id='wujunmin' style='font-size: 30px;'>" &
SELECTEDVALUE('销售目标'[店铺名称]) & "的" &
"销售业绩 " & FORMAT([M.销售业绩],"#,#元") &
",<span style='color: " & IF([M.业绩达成率]>=1,"lightgreen","tomato") & ";'>业绩达成 " & FORMAT([M.业绩达成率],"0%") & "</span>" &
",<span style='color: " & IF([M.销售折扣]>0.78,"lightgreen","tomato") & ";'>销售折扣 " & FORMAT([M.销售折扣],"0.00") & "</span>
</p>"
将度量值放入HTML Content视觉对象即可正常显示。
条件格式背景色同理,只需要将上方的color换成background:
和内置表格矩阵不同的是,HTML的背景色可以有更多花样,比如渐变,《Power BI 长文本局部高亮条件格式》有更详细的介绍。
最后讲解条件格式图标。
最简单的条件格式图标是UNICODE文本符号,可以输入法直接敲出,或者UNICHAR函数调用,这里有个列表《Power BI 符号大全》,如下是长文本中的文本符号效果,可以按照指标状况动态变化样式与颜色。
换成维度也可以:
实现原理还是<span>单独对符号标记,示例度量值:
M.P =
"<p id='wujunmin' style='font-size: 30px;'>" &
SELECTEDVALUE('店铺资料'[店铺名称]) & "的" &
"销售业绩 " & FORMAT([M.销售业绩],"#,#元") &
",业绩达成 " &
"<span style='color:" & IF([M.业绩达成率]>=1,"green","red") & ";'>" &
IF([M.业绩达成率]>=1,"✔","✘") & "
</span>" &
FORMAT([M.业绩达成率],"0%") &
",销售折扣 " &
"<span style='color:" & IF([M.销售折扣]>=0.78,"green","red") & ";'>
" & UNICHAR(9654) & "
</span> "&
FORMAT([M.销售折扣],"0.00") & "。
</p>"
UNICODE符号相对简陋,SVG图标相对华丽且花样无穷,长文本能否直接嵌入SVG图标?
可以。
语法为:
<p>
文本
<svg>svg代码</svg>
接着文本
<svg>下一个svg代码</svg>
接着文本
</p>
SVG图标可以在我分享的Power BI SVG在线工具获得上万种样式,且可以在线调整格式:
https://app.powerbi.com/view?r=eyJrIjoiZDk1N2RiMTgtYWMwOC00ZDM3LTliYzQtYzMxYWYzOGVkNmI1IiwidCI6IjI5Y2JkNTY4LTBlOWItNDQ0Zi1iZTA1LTYxNjMyOTAzNjJmZSJ9
上图针对两个指标使用了SVG图标。因SVG自带格式,因此无需像UNICODE符号那样进行额外的格式设置。SVG图标嵌入<p>文本时,需要注意图像宽度和高度适当调整,和<p>的文本大小适配。
既然长文本可以添加SVG图标,显然SVG图表也是可以的。下图嵌入了一个华夫饼图和一个环形图:
文末知识星球分享了全球最多的SVG图表,可以挑选合适的进行嵌入。
综上,表格矩阵可以实现的条件格式,DAX+HTML长文本都可以实现,甚至更加灵活。