首页 > 其他分享 >178_技巧_Power BI 动态排名多项展示

178_技巧_Power BI 动态排名多项展示

时间:2023-05-10 16:34:35浏览次数:51  
标签:01 Power SVG BI Sale 178 VAR 排名 tbaleSale

178_技巧_Power BI 动态排名多项展示

一、背景

在 Power BI 中做排名矩阵时,我们经常遇到同一维度下,多项展示排名的问题。类似这样的排名矩阵,排名的名次不会太多,但是同一维度下会有多项同时展示排名,并且还要满足切片时能动态的变化。

Power BI 公共 web 效果:https://demo.jiaopengzi.com/pbi/178-full.html

先来看下示例效果

图-01

一般情况下我们会使用右边的简单文字版排名。本案例我们同时补充一个信息更加密集的SVG的效果。

矩阵里面的元素解析如下:

图-02

二、模型和DAX

这里的示例模型都是我们常用的模型( https://jiaopengzi.com/1435.html )

表间关系

图-03

因为我们需要多项展示同质排名效果,所有加入了辅助的计算表:T08_大区_排名辅助

辅助表的ID则为排名提供了外部的筛选上下文条件,实现排名的复用。

T08_大区_排名辅助 = 
DATATABLE(
    "ID",INTEGER,
    "说明",STRING,
    {
        {1,"大区内销售额第1"},
        {2,"大区内销售额第2"},
        {3,"大区内销售额第3"},
        {4,"大区内销售额第4"},
        {5,"大区内销售额第5"},
        {6,"大区内销售额第6"},
        {7,"大区内销售额第7"}
    }
)

度量值DAX

基础度量值:01_销售金额

01_销售金额 = 
SUM ( 'T05_订单子表'[F_06_产品销售金额] )

实现简单文字版的度量值:02_大区内排名

注意:这里使用了 2023 年 4 月版本新函数 RANK, 需要升级到最新版才能体验。

02_大区内排名 = 
VAR DQ =
    SELECTEDVALUE ( 'D00_大区表'[F_01_大区ID] )
VAR tbaleSale =
    ADDCOLUMNS ( ALL ( 'D01_省份表' ), "@Sale", [01_销售金额] )
VAR tbaleRank =
    ADDCOLUMNS (
        tbaleSale,
        "@RankAll", RANK ( DENSE, tbaleSale, ORDERBY ( [@Sale], DESC ) )
    )
VAR tbaleDQ =
    FILTER ( tbaleRank, [F_01_大区ID] = DQ )
VAR tbaleRankDQ =
    ADDCOLUMNS (
        tbaleDQ,
        "@RankDQ", RANK ( DENSE, tbaleDQ, ORDERBY ( [@Sale], DESC ) )
    )
VAR N =
    SUM ( 'T08_大区_排名辅助'[ID] )
VAR tbaleRankProvince =
    FILTER ( tbaleRankDQ, [@RankDQ] = N )
VAR ProvinceName =
    MAXX ( tbaleRankProvince, [F_05_省简称2] )
RETURN
    ProvinceName

图-04

实现信息更加密集的SVG度量值:03_大区内排名_SVG

03_大区内排名_SVG = 
VAR DQ =
    SELECTEDVALUE ( 'D00_大区表'[F_01_大区ID] )
VAR tbaleSale =
    ADDCOLUMNS ( ALL ( 'D01_省份表' ), "@Sale", [01_销售金额] )
VAR tbaleRank =
    ADDCOLUMNS (
        tbaleSale,
        "@RankAll", RANK ( DENSE, tbaleSale, ORDERBY ( [@Sale], DESC ) )
    )
VAR tbaleDQ =
    FILTER ( tbaleRank, [F_01_大区ID] = DQ )
VAR tbaleRankDQ =
    ADDCOLUMNS (
        tbaleDQ,
        "@RankDQ", RANK ( DENSE, tbaleDQ, ORDERBY ( [@Sale], DESC ) )
    )
VAR N =
    SUM ( 'T08_大区_排名辅助'[ID] )
VAR tbaleRankProvince =
    FILTER ( tbaleRankDQ, [@RankDQ] = N )
VAR rankAll =
    MAXX ( tbaleRankProvince, [@RankAll] )
VAR rankAllTotal =
    IF ( rankAll, rankAll & "/" & COUNTROWS ( tbaleSale ), BLANK () )/*构造排名*/
VAR ProvinceName =
    MAXX ( tbaleRankProvince, [F_05_省简称2] )
VAR ProvinceSaleMax =
    MAXX ( tbaleSale, [@Sale] )
VAR ProvinceSale =
    MAXX ( tbaleRankProvince, [@Sale] )
VAR ProvinceSaleFormat =
    FORMAT ( ProvinceSale, "#,0" )
VAR ProvinceSalePercentFormat =
    FORMAT ( DIVIDE ( ProvinceSale, ProvinceSaleMax, BLANK () ), "0.0%" ) /*当前省份销售额占比最大省份销售额的百分比,即进度条*/
VAR SVG_start_image = "data:image/svg+xml;utf8," /*SVG 图像类型头部。*/
VAR SVG_start_html = "<svg id='jiaopengzi' version='1.1' baseProfile='full' width='80' height='50' xmlns='http://www.w3.org/2000/svg'>" /*SVG html类型头部。*/
VAR SVG_content = "
    <rect width='100%' height='100%' fill='rgba(0,0,0,0)' id='bg' rx='4%' ry='4%' />
    <text x='4%' y='20%' font-size='10' text-anchor='left' font-weight='normal' fill='rgba(30,40,88,0.6)' id='rank'>" & rankAllTotal & "</text>
    <text x='50%' y='55%' font-size='16' text-anchor='middle' font-weight='bold' fill='rgba(30,40,88,1)' id='name'>" & ProvinceName & "</text>
    <text x='50%' y='88%' font-size='10' text-anchor='middle' font-weight='normal' fill='rgba(30,40,88,0.6)' id='sale'>" & ProvinceSaleFormat & "</text>
    <rect y='92%' width='100%' height='6%' fill='rgba(30,40,88,0.2)' id='progressAll' rx='1%' ry='1%' />
    <rect y='92%' width='" & ProvinceSalePercentFormat & "' height='6%' fill='rgba(200,152,40,1)' id='progressAc' rx='1%' ry='1%' />
" /*SVG 内容构造。*/
VAR SVG_end = "</svg>"/*SVG 结束标签。*/
VAR SVG_html = SVG_start_html & SVG_content & SVG_end
VAR SVG_image = SVG_start_image & SVG_html
VAR RESULT =
    IF ( ProvinceSale, SVG_image, BLANK () )
RETURN
    RESULT

图-05

三、总结

  1. 类似这样多项排名共同展示的时候,使用矩阵比较好的展示;因为排名都是同质的,使用辅助表提前准备好排名,把排名放到行或列上,实现排名的复用。

  2. SVG版的内容会更加密集,可以更加自由的展示内容信息。

  3. 值得注意的是矩阵的每个格子的图像大小的宽高像素都可以达到 512像素,512像素*512像素的面积已经很大了,默认情况 Power BI 报告标准页面也就 1280像素*720像素。如此大的面积也就有了更多想象的空间。

    图-06

附件下载

https://jiaopengzi.com/2993.html


请关注

全网同名搜索 焦棚子

如果对你有帮助,请 点赞关注三连 支持一下,这是我们更新的动力。

图-07

by 焦棚子

标签:01,Power,SVG,BI,Sale,178,VAR,排名,tbaleSale
From: https://www.cnblogs.com/jiaopengzi/p/17388367.html

相关文章

  • OCR 文字检测(Differentiable Binarization --- DB)
    文本检测基于分割的做法(如蓝色箭头所示):传统的pipeline使用固定的阈值对于分割后的热力图进行二值化处理首先,它们设置了固定的阈值,用于将分割网络生成的概率图转换为二进制图像然后,用一些启发式技术(例如像素聚类)用于将像素分组为文本实例DB的做法(如红色箭头所示):而本文提出......
  • 老版本ubuntu16.04安装zabbix-agent
    最好用的agent应该是zabbix-agent2,不仅选项丰富,更是可以监控容器但是由于ubutu16.04版本太低,没有对应的zabbix-agent2,所以这里只能安装zabbix-agent安装步骤下载安装源在https://repo.zabbix.com/zabbix/找到对应版本的源这里以6.2.4版本的为例找到的地址就是https://rep......
  • Readability下周一在Amazon Appstore独家推出
          上个星期我们介绍了一款能将网页制作成电子书的浏览器Readability,当时这一应用只有iOS版本,而现在这一应用的Android版本也即将推出,对于Android用户来说真是个好消息。         Readability的主要竞争对手包括ReaditLater和Instapaper,前者是一个原生Andr......
  • linux系统异常关机,重启后显示:probing edd (edd=off to disable) ....ok
    机房掉电,linux服务器重启后显示:probingedd(edd=offtodisable)....ok  处理方法一:1、开机选择内核时上下键卡住,根据提示按e进入grub界面2、编辑linux行末尾添加edd=off3、ctrl+x 处理方法二:1、使用U盘进入救援模式,切换命令行界面,挂载系统磁盘chroot/mnt/sysim......
  • Power Quality Disturbance:基于MATLAB/Simulink的各种电能质量扰动仿真模型,包括配电线
    PowerQualityDisturbance:基于MATLAB/Simulink的各种电能质量扰动仿真模型,包括配电线路故障、感应电机启动、变压器励磁、单相/三相非线性负载等模型,可用于模拟各种电能质量扰动和分析研究。附带一份详细的说明文档对各模型进行说明,便于理解。仿真条件:MATLAB/SimulinkR2015bID:9......
  • Direct_Power_Control_of_DFIG:基于MATLAB/Simulink的双馈异步感应发电机的直接功率控
    Direct_Power_Control_of_DFIG:基于MATLAB/Simulink的双馈异步感应发电机的直接功率控制仿真模型。仿真条件:MATLAB/SimulinkR2015bID:6470654414626940......
  • DFIG_Wind_Turbine:基于MATLAB/Simulink的双馈异步风力发电机仿真模型,控制方案采用矢量
    DFIG_Wind_Turbine:基于MATLAB/Simulink的双馈异步风力发电机仿真模型,控制方案采用矢量控制,电机的有功功率和无功功率由转子侧变换器控制。。仿真条件:MATLAB/SimulinkR2015bID:8670654806335207......
  • IBM Power 740 7 单用户引导模式
     2、单用户引导模式在AIX上要进入单用户引导模式,只需把钥匙拨到维护(SERVICE)位置,然后系统上电即可。系统首先显示的是诊断操作指令(DiagnosticOperatingInstructions)的屏幕。在这幅屏幕按回车进入功能选择(FunctionSelection)菜单。类似如下图:FUNCTIO......
  • IBM Power 740 面板操作查看IP地址
    转载:https://blog.csdn.net/weixin_44654338/article/details/127444877 通过进入Power小机液晶控制面板上的功能30,就能读出HMC端口的IP地址。具体步骤如下:a.为服务器接通电源,直到控制面板上的显示不再变化,且电源指示灯缓慢闪烁。b.使用控制面板的<↑>或<↓>按钮选......
  • Armbian设置
    Armbian设置换源Debian源修改/etc/apt/sources.list文件内容为#默认注释了源码镜像以提高aptupdate速度,如有需要可自行取消注释清华源debhttps://mirrors.tuna.tsinghua.edu.cn/debian/bullseyemaincontribnon-free#deb-srchttps://mirrors.tuna.tsinghua.edu.c......