zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Power BI自定义业绩达成华夫饼图

2023-04-18 16:23:15 时间

DAX驱动图表设计

华夫饼图可以直观的表现百分比,能够放在表格或矩阵中,也可单独卡片展示。

在Power BI中,使用度量值可以直接生成华夫饼图,并且数据标签带有条件格式。下图示例为矩阵样式,业绩达成大于30%显示绿色否则显示红色。

度量值如下:

迷你华夫饼图 = 
VAR t=GENERATESERIES(1,10)//1-10的序列
VAR tPlus=GENERATE(SELECTCOLUMNS(t,"Value1",[Value]),t)//笛卡尔集
VAR tPlusPlus=ADDCOLUMNS(tPlus,"Index",RANKX(tPlus,[Value]+[Value1]/100,,ASC)) //生成1-100的序号
VAR tWaffle=ADDCOLUMNS(tPlusPlus,"circle","<circle cx='"&[Value]*10-5&"' cy='"&[Value1]*10-5 &"' r='4' fill='"&IF([Index]<=ROUND([业绩达成率]*100,0),"Grey","LightGrey")&"' fill-opacity='0.4'/>")//生成100个圆
VAR Chart=
"data:image/svg+xml;utf8,"&"
<svg xmlns='http://www.w3.org/2000/svg' height='100' width='100'>"&
    CONCATENATEX(tWaffle,[circle])&"
    <!-- 数据标签 -->
    <text x='50' y='50' font-size='25' text-anchor='middle' dominant-baseline='middle' fill='"& IF([业绩达成率]>=0.3,"DarkCyan","Tomato")&"'>"&ROUND([业绩达成率]*100,0)&"%"&"</text>
</svg> "
Return
IF(HASONEVALUE('业绩表'[店铺]),Chart,BLANK())

设置为图像URL并放入矩阵即可正常显示:

原理是生成两个1-10的列表,然后两个列表笛卡尔集生成10*10的方阵,给方阵的每个点排序(1-100),业绩达成大小和序号匹配进行颜色判断。

该度量值也可直接用作卡片图,放入Image这个第三方视觉对象即可:

显示效果如下(进行了一定的格式改变):

以上是一个朴素的版本,还可以花式填充任意图形:

将度量值中的circle替换为image标签,链接网络图片即可填充图案。填充时需要注意使用蒙版将大于业绩达成部分的图案进行一定灰度处理。

"<defs>
<mask id='w' x='0' y='0' width='1' height='1'maskContentUnits='objectBoundingBox'>
<rect x='0' y='0' width='1' height='1' fill='Grey' fill-opacity='0.5'/>
</mask>
</defs>"

实际工作中建议朴素一点就行了,Power BI内置的矩阵也不支持这么复杂的SVG图片显示,需要使用HTML Content视觉对象。

以上示例读图方式均是从左到右,有读者可能问,如何从下到上,例如朴素的下图矩阵:

只需要将100个圆点(或其他图形)用g标签打包,统一给出旋转命令,如下图所示,rotate(-90,50,50)表示以坐标50 50为中心,逆时针旋转90度。

这里需要注意,数据标签并不旋转,所以g标签不要打包text。