zl程序教程

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

当前栏目

Power BI 模拟麦肯锡糖葫芦

2023-02-18 16:27:11 时间

这是麦肯锡系列第六篇,前五篇如下

Power BI模拟麦肯锡客流转化漏斗图

Power BI模拟麦肯锡多种正方形图表

Power BI模拟麦肯锡华夫饼百分比图

Power BI模拟麦肯锡前后对比气泡图

Power BI模拟麦肯锡哑铃图表现差异

无论是条形图、折线图、卡片图还是饼图,只是表面样式不同,实际都是占据一块矩形画布空间,并且画布的长宽比不能太离谱。

如果长宽差异很大,图表大概率无法正常阅读:

近日在麦肯锡的APP上看到一种气泡图,像一串糖葫芦,比较适合长宽差异很大的画布空间。下图是在Power BI模拟的示例,业绩排行前三的城市设置了不同颜色。这种图表可以放在左右两侧或者中部,给人以新鲜感。

下方是完整度量值,把度量值放入ImageByCloudScope视觉对象即可正常显示:

糖葫芦 = 
//最大圆圈直径100像素
VAR ItemCount =
    DISTINCTCOUNT ( '店铺资料'[城市] )
VAR MaxValue =
    MAXX ( VALUES ( '店铺资料'[城市] ), [M.销售业绩] )
VAR t1 =
    SUMMARIZE (
'店铺资料',
'店铺资料'[城市],
"r", 50 * SQRT ( [M.销售业绩] / MAXVALUE )
    )
VAR t2 =
    ADDCOLUMNS ( t1, 
"cr", SUMX ( FILTER ( t1, [r] >= EARLIER ( [r] ) ), [r] ) ,
"Index", RANKX ( t1, [M.销售业绩] )
    )
VAR t3 =
    ADDCOLUMNS (
        t2,
"Label",
//画标签 
"<text x='50' y='" & [cr] * 2 - [r] & "'  text-anchor='middle' dominant-baseline='middle' font-family='Segoe UI' font-size='10' >" & [城市] & "</text>",
"Circle",
//画气泡
"<circle cx='50' cy='" & [cr] * 2 - [r] & "' r='" & [r]  & "' fill='"
                & IF ( [Index] <= 3, "DeepSkyBlue", "LightGrey" ) & "' fill-opacity='1'/>"
    )
VAR SVGCode =
    CONCATENATEX ( t3, [Circle] & [Label] )
VAR Chart =
"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='"
        & MAXX ( t3, [cr] ) * 2 & "'>" & SVGCode & "</svg>"
RETURN
    Chart

这个图表的难点在于每个城市的上下间距不同,下方城市需要按照上方城市占据的直径空间动态下移,这也是度量值中t2存在的目的。

当然,糖葫芦没有竹签不合适,下方右侧增加一条线:

把度量值中的维度、指标替换为你模型中的值即可复用。实际应用时,也可在text中加入数据标签。

糖葫芦我还是喜欢吃基本款-山楂且不带任何夹心。