试想这样一个业务情景:有很多店铺需要展示每月业绩达成状况,又需要同时展示趋势。在Power BI矩阵中子弹图和折线组合是一种实现方式,DAX和SVG结合可以轻松实现。
在《Power BI表格矩阵内部空间组合》我已经介绍过这种制图思维,利用矩阵的总计实现图表切换。在这个矩阵中,行为店铺名称,列为月份,值为图表切换度量值,这个度量值需要标记为图像URL才可正常显示。
图表切换度量值如下,当月份有唯一值显示子弹图,否则折线图。
代码语言:javascript复制图表切换 = IF(HASONEVALUE('日期表'[月]),[子弹图],[双折线图])
子弹图度量值如下:
代码语言:javascript复制子弹图1 =
//简化,仅支持正数,负数可自行增加逻辑
//公众号、知乎、B站:wujunmin
VAR MaxAC =
实际值的最大值
VAR MaxPL =
目标值的最大值
VAR MaxValue =
MAX ( MaxAC, MaxPL )
VAR Rect_Width = 145 * [M.销售业绩] / MaxValue
VAR Line_X = 145 * [M.销售目标] / MaxValue
VAR Rect_Color =
IF ( [M.销售业绩] >= [M.销售目标], "deepskyblue", "lightgrey" )
VAR SVG = "
data:image/svg xml;utf8,
<svg xmlns='http://www.w3.org/2000/svg' width='150' height='30' >
<rect
x='0' y='5'
width='" & Rect_Width & "' height='20'
fill='" & Rect_Color & "'
/>
<line
x1='" & Line_X & "' x2='" & Line_X & "'
y1='3' y2='27'
stroke-width='3' stroke='black'
/>
<text x='1' y='20' font-size='15'> " &
FORMAT([M.销售业绩],"#,#") & "
</text>
</svg>"
RETURN
SVG
折线图之前的文章已经分享过,二者IF语句组合到一起即完成切换。
如果对SVG比较熟悉,样式可以自由调整,比如子弹换一种形式:
子弹换成百分比条形: