Power BI子弹图与折线组合

2023-11-14 18:57:56 浏览数 (2)

试想这样一个业务情景:有很多店铺需要展示每月业绩达成状况,又需要同时展示趋势。在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比较熟悉,样式可以自由调整,比如子弹换一种形式:

子弹换成百分比条形:


0 人点赞