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

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


请关注

全网同名搜索 焦棚子

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

by 焦棚子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/18577.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第10 CURD操作与RedisCache缓存的强制清理的实现

using System.Net; using Microsoft.Extensions.Caching.Distributed; using Core.Caching; using Core.Configuration; using StackExchange.Redis; namespace Services.Caching { /// <summary> /// 【Redis分布式缓存数据库软件管理器--类】 /// <remarks>…

2023零售店铺管理系统最新排名,这5款性价比高!

很多零售店铺的老板&#xff0c;每天都在被开单收银、记账对账、商品销售、销售数据等各种琐事困扰&#xff0c;使用传统的人工管理模式&#xff0c;耗费了大量的时间和成本&#xff0c;也没有达到理想的效果。 其实&#xff0c;零售店铺管理也可以很简单省事&#xff0c;借助零…

TCP三次握手

TCP三次握手 文章目录 TCP三次握手1. TCP三次握手过程和状态变迁1. 准备工作2. 进行连接 2. 能把三次握手改为两次握手吗&#xff1f;3. 改为两次握手会出现什么后果&#xff1f;4. 改为四次握手行不行&#xff1f;5. TCP第三次握手失败了怎么办&#xff1f;6. 三次握手是否可以…

探索 Elasticsearch 8.X Terms Set 检索的应用与原理

1、Terms Set 检索简介 Terms Set查询是Elasticsearch中一种强大的查询类型&#xff0c;主要用于处理多值字段中的文档匹配。 其核心功能在于&#xff0c;它可以检索至少匹配一定数量给定词项的文档&#xff0c;其中匹配的数量可以是固定值&#xff0c;也可以是基于另一个字段的…

抖音商城小程序搭建的注意事项

抖音商城小程序已经成为了越来越多电商企业的选择&#xff0c;毕竟它具有强大的用户资源和社交传播力。但是&#xff0c;在搭建抖音商城小程序的过程中&#xff0c;还有一些需要注意的事项。 1、制定明确的策略和目标 在搭建抖音商城小程序前&#xff0c;必须事先制定明确的策…

三步配置轻量级服务器nginx

这里写目录标题 一 nginx及其应用场景1.什么是nginx2.应用场景背诵 二 nginx的配置安装1.选择nginx版本2. 安装配置环境3.安装nginx4.启动nginx 三 访问 一 nginx及其应用场景 1.什么是nginx 一款轻量级的Web服务器&#xff0c;反向代理服务器&#xff0c;以及电子邮件代理服…

java获取resources路径的方法

我们在写程序的时候&#xff0c;有时候会发现代码不能正常运行&#xff0c;出现提示异常的问题&#xff0c;这就说明我们的代码没有执行完&#xff0c;也就是没有 resource&#xff0c;其实遇到这种情况&#xff0c;我们只需要把代码重新执行一遍即可。 在 java中是可以实现 re…

实验六 触发器与存储过程

实验六 触发器与存储过程 目录 实验六 触发器与存储过程 1、SQL触发器&#xff1a;删除学生数据题目代码题解 2、SQL触发器&#xff1a;创建成绩表插入触发器题目代码题解 3、 SQL存储过程&#xff1a;查询订单题目代码题解 4、SQL存储过程&#xff1a;建立存储过程&#xff0c…

浅析S32K324的时钟树

S32K3XX系列的时钟树梳理 如下图为S32K3XX系列的时钟树图&#xff1a; 一、时钟源 时钟源说明FIRC快速内部RC时钟源SIRC慢速内部RC时钟源FXOSC快速外部晶振时钟源SXOSC慢速外部晶振时钟源 S32K3系列的mcu有4个时钟源如上表。 二、FIRC&#xff08;快速内部RC时钟源&#…

【A200】 TX1核心 JetPack4.6.2版本如何修改DTB文件测试全部SPI

大家好&#xff0c;我是虎哥&#xff0c;很长时间没有发布新内容&#xff0c;主要是这段时间集中精力&#xff0c;研究DTB设备树的修改&#xff0c;以适配不同载板&#xff0c;同时也是专门做了一个TX1&TX2核心&#xff0c;双网口&#xff0c;可以使用SPI 扩展CAN接口的载板…

Actuators + jolokia

Actuators + jolokia Jolokia造成的XXE漏洞 首先我们查看我们当前环境http://x.x.x.x/jolokia/list地址,是否存在reloadByURL这个方法, 这个方法是造成RCE的关键。因为logback组件提供的reloadByURL操作使我们可以从外部URL重新加载日志配置 创建logback.xml和file.dtd文件…

【神经网络】tensorflow实验9--分类问题

1. 实验目的 ①掌握逻辑回归的基本原理&#xff0c;实现分类器&#xff0c;完成多分类任务&#xff1b; ②掌握逻辑回归中的平方损失函数、交叉熵损失函数以及平均交叉熵损失函数。 2. 实验内容 ①能够使用TensorFlow计算Sigmoid函数、准确率、交叉熵损失函数等&#xff0c…

tomcat集群下的session共享和负载均衡

环境 操作系统&#xff1a;windows tomcat1&#xff1a;Apache Tomcat/7.0.52&#xff08;8085&#xff09; tomcat2&#xff1a;Apache Tomcat/7.0.52&#xff08;8086&#xff09; jre&#xff1a;1.7.0_80 nginx&#xff1a;nginx-1.20.1&#xff08;8070&#xff09; redis…

人工智能洗稿-免费自媒体洗稿工具

文字洗稿 文字洗稿是指通过修改、重组、删除、替换等手段对文本进行优化、清理和调整&#xff0c;以达到改善文章质量、增加独特性和提高可读性的目的。文字洗稿是自媒体行业的一个重要需求&#xff0c;尤其是在批量撰写文章或需要大量修改文本的情况下。文字洗稿分为自动洗稿…

如何用ChatGPT搭建品牌文本体系?(品牌名+slogan+品牌故事)

该场景对应的关键词库&#xff08;26个&#xff09;&#xff1a; 品牌名、奶茶、中文名、情感联想度、饮料、价值观/理念、发音、slogan、产品功能导向、行业性质导向、经营理念导向、消费者观念导向、口语化、修辞手法、品牌故事、创始人初心品牌故事、里程碑事件故事、产品初…

Intellij中使用Spotless 格式化代码

Spotless简介 在一些大型项目或开源项目&#xff0c;由于开发人员太多&#xff0c;导致各个代码格式不统一。会让整体项目的代码可读性变差。统一代码格式使用maven中的Spotless插件就是不错的选择。 Spotless 是一个代码格式化工具&#xff0c;它有以下功能&#xff1a; 支…

第6章 静态代理

第6章 静态代理 把所有静态资源的访问改为访问nginx&#xff0c;而不是访问tomcat&#xff0c;这种方式叫静态代理。因为nginx更擅长于静态资源的处理&#xff0c;性能更好&#xff0c;效率更高。 ​ 所以在实际应用中&#xff0c;我们将静态资源比如图片、css、html、js等交…

helm和chart

Helm helm是Kubernetes 应用的包管理工具&#xff0c;主要用来管理 Charts&#xff0c;类似Linux系统的yum。Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata&#xff0c;以便于应用程序的分发。 he…

keil移植linux(makefile)

文章目录 运行环境&#xff1a;1.1 freeRTOS_LED工程移植1)修改cubeMX配置2)setting设置3)launch设置4)修改makefile5)修改代码6)实验效果 运行环境&#xff1a; ubuntu18.04.melodic 宏基暗影骑士笔记本 stm32f427IIH6 stlink 9-24v可调电源 robomaster A 板 1.1 freeRTOS_L…

第二章——进程与线程(上)

上船不思岸上人&#xff0c;下船不提船上事 文章目录 2.1.1 进程的概念&#xff0c;组成&#xff0c;特征知识总览进程的概念进程的组成——PCB程序是如何运行的进程的组成进程的特征知识回顾 2.1.2 进程的状态与转换&#xff0c;进程的组织知识总览创建态&#xff0c;就绪态运…