上一文(Power BI x EasyShu:Top商品门店分布地图可视化)分享的是每个产品在不同门店的状况,本文换一种角度:每个门店自己的状况。下图展示了每个门店最畅销的商品,部分门店的Top1因为存在并列关系,所以显示了不止一个产品。
我们可以基于这样的展示结果去分析背后的原因,以期后续做出改善。大部分门店产品A畅销,赛格店产品B畅销,是客户需求的差异导致,还是库存配置导致,或者是陈列位置导致?差异会不会是机会点?
除了全局对比,也可局部对比,东区各门店Top5有什么不同?
使用的数据如下:
这个效果依然使用一个度量值生成:
地图_Top=
VAR Top_N = 1
VAR FontSize = 20
VAR image_width = 50
VAR t =
ADDCOLUMNS (
GENERATE ( '商场资料', '产品资料' ),
"随机数",
[销量]
+ RANDBETWEEN ( 1, 10000 ) / 100000000
)
VAR t_Rank =
ADDCOLUMNS (
t,
"排名", RANKX ( FILTER ( t, [商场] = EARLIER ( [商场] ) ), [销量] ),
"索引", RANKX ( FILTER ( t, [商场] = EARLIER ( [商场] ) ), [随机数] )
)
VAR t_TopN =
FILTER ( t_Rank, [排名] <= Top_N )
VAR Title =
CONCATENATEX (
'商场资料',
"<text x='" & [X] & "' y='" & [Y] + image_width * 0.5 & "' text-anchor='end' dominant-baseline='middle' font-size='" & FontSize & "' fill='black' font-weight='bold'>" & [商场] & "</text>"
)
VAR imagemap =
CONCATENATEX (
t_TopN,
"<image xlink:href='" & [图片] & "' x='"
& [X] + IF ( ISEVEN ( [索引] ), image_width, 0 ) & "' y='"
& [Y]
+ (
ROUNDUP ( [索引] / 2, 0 ) - 1
) * image_width & "' width='" & image_width & "' height='" & image_width & "'></image>"
)
& CONCATENATEX (
t_TopN,
"<text x='"
& [X] + IF ( ISEVEN ( [索引] ), image_width, 0 ) & "' y='"
& [Y]
+ ( ROUNDUP ( [索引] / 2, 0 ) ) * image_width & "' text-anchor='start' font-size='" & FontSize * 0.6 & "' fill='black' >" & [产品ID] & "</text>"
)
//微信公众号、知乎、B站:wujunmin
RETURN
"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1251 631'>
<image xlink:href='" & [BASE64地图] & "' x='0' y='0' width='1251' height='631'></image>" & imagemap & Title & "</SVG>"
实现的思路是:
GENERATE生成一个笛卡尔积表,为表格增加按销量的排名列,并增加一个按销量的随机数索引。索引作为后续产品图片的排序依据,因为销量排名有并列的可能性,为使产品图片错位显示,需要一个很小的随机数。
表格按照TopN控制每个门店显示的产品数量,门店名称、产品图片、产品ID按照前期使用EasyShu提取的坐标有序排列,并使用CONCATENATEX连接到一起。
最后套一层SVG的标准语法,返回图表。
完。