博客:www.jiaopengzi.com

焦棚子的文章目录

请点击下载附件

一、背景

前些天在和朋友交流Power BI中有这样一个需求,按照父级排名后,需要显示出父级TOPN的子级明细。

如下《效果图》

1、圆环图按照父级排名第一名:E,第二名:A,第三名:C;

2、依次显示出E、A、C的二级明细;

3、需要图表标题动态变化。


效果图

再来看看动态效果。

[video width="1476" height="968" mp4="https://jiaopengzi.com/wp-content/uploads/2020/03/128_2.mp4"][/video]

结果动图

二、数据源


data

1、说明:

A、data中的一级即为父级,二级即为子级;

B、data是pq模拟随机数,方便刷新观看;

C、拿到附件后数据会和文章中不一样,这是正常的。


pq随机数

2、pq代码

//pq模拟25行随机数
let
data = #table(
type table [
一级=text
,二级=text
,value=Int64.Type
]
,List.Transform(
{1..25}
,each
{
{"A".."E"}{Number.Mod(_-1,5)}
,"F"&Text.From(_)
,Number.Round(Number.RandomBetween(1,25),0)
}
)
)
in
data

三、上DAX

1、基础度量total

total = SUM(data[value])

2、一级排名TOP1需显示的度量,TOP2、TOP3同理。

N_rankx_1 =
VAR N=1
VAR T1=SUMMARIZE(ALL(data),data[一级],"@S",[total])//构建排序表
VAR T2=SUMMARIZE(ALL(data),data[一级],"@R",RANKX(T1,[@S],[total],DESC,Dense))
VAR T3=FILTER(T2,[@R]=N)
RETURN
CALCULATE('data'[total],T3)

3、动态显示TOP1的标题的度量,TOP2、TOP3同理。

Name_TOP1 =
VAR N=1
VAR T1=SUMMARIZE(ALL(data),data[一级],"@S",[total])//构建排序表
VAR T2=SUMMARIZE(ALL(data),data[一级],"@R",RANKX(T1,[@S],[total],DESC,Dense))
VAR T3=FILTER(T2,[@R]=N)
RETURN
"TOP"&N&":"&CONCATENATEX(T3,[一级],"&",[一级],ASC)

说明:

A、如下图《并列排名》中的TOP3,图表标题显示为:TOP3:C&D;

B、在一级排名中C和D是并列第3名;所以需要CONCATENATEX 把第3、4、5参数用上(1-5参数分别:表,表达式,分隔符,排序列,正序倒序)。

C、如果数据中不存在并列排名的话还可以使用TOPN 来处理,在这里就不展示了,拿到附件可以看到。


并列排名

四、总结

1、还是那句话,业务需求转换为DAX思想很重要;

2、本文中没有特别难点,需要注意的是RANKX 的使用,案例中写了关于RANKX 第三参数使用的对比,拿到附件即可看到;

3、CONCATENATEX 处理并列排名的问题。

by 焦棚子

焦棚子的文章目录

128_Power BI父级排名TOPN子级动态展示的更多相关文章

  1. ThinkPHP 关联模型中查询某条记录的父级(非查询子级)

    数据表 id      cat_name      cat_pid 76     手机.数码     0 84     手机配件        76 86     蓝牙耳机        84 从属关 ...

  2. SQL根据指定节点ID获取所有父级节点和子级节点

    --根据指定节点ID获取所有子节点-- WITH TEMP AS ( SELECT * FROM table_name WHERE Id=' --表的主键ID UNION ALL SELECT T0. ...

  3. SQL根据指定节点ID获取所有父级节点和子级节点(转载)

    --根据指定节点ID获取所有子节点-- WITH TEMP AS ( ' --表的主键ID UNION ALL SELECT T0.* FROM TEMP,table_name T0 WHERE TE ...

  4. 让一个父级div根据子级div高度而自适应高度

    需求是点击上传的时候进行子级div高度不定,相对来说父级div高度也不能固定,把元素都设置成普通标准流,然后样式可以使用margin内边距或者padding外边距来进行调节 放上代码供参考: .opu ...

  5. jquery获取父,同,子级元素

    一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 <div id="par_div"><a id="href_fir& ...

  6. 【idea】idea重新打包依赖了父级项目的子级项目,父级项目代码改变,但是子级项目打包依旧是老的代码 问题解决

    最简单的方法: 就是单独打包父级项目,然后替换本地maven仓库中的父级项目的jar,然后重新打包子级项目,就可以了.

  7. MySQL通过自定义函数实现递归查询父级ID或者子级ID

    背 景: 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度, 那么所有节点为根的树的深度均不会超过树的最大深度,则我们可以直接通过left join来实现. 但很多时候我们是无 ...

  8. js和jquery获取父级元素、子级元素、兄弟元素的方法

    最近工作中总遇到取各种父啊子啊兄弟姐妹啊,每次都得查,这次整理个全乎的~ [js的获取方式] function dom(){      var a = document.getElementByIdx ...

  9. 转载:js和jquery获取父级元素、子级元素、兄弟元素的方法

    转载网址: 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元 ...

随机推荐

  1. ADAS最全整理

    为了实现「无人驾驶」的理想,各大整车厂和供应商目前正在开发「高级驾驶员辅助系统」(ADAS),随着 ADAS 慢慢被完善,车辆也在一步一步从 NHTSa 的 0 级过度到第 4 级,实现完全自动化.& ...

  2. [computer vision] Bag of Visual Word (BOW)

    Bag of Visual Word (BoW, BoF, 词袋) 简介 BoW 是传统的计算机视觉方法,用一些特征(一些向量)来表示一个图像.BoW的核心思想是利用一组较为通用的特征,将图像用这些特 ...

  3. 【Android开发】【数据库】LitePal 数据库的使用

    一,导包 dependencies { ...... // LitePal的包 compile 'org.litepal.android:core:1.3.1' ...... } 二,创建bean类 ...

  4. spring报错can't find resources

    整合spring的时候报错can't find resource[../././.xml] 这两天在整个spring,发现单元测试的时候就可以正常运行,放在tomcat中就报错initial cont ...

  5. c语言实现双链表的基本操作—增删改查

    //初始化 Node*InitList() { Node*head=(Node*)malloc(sizeof(Node)); if(NULL==head) { printf("内存分配失败! ...

  6. LC-349

    Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the ...

  7. MySQL5.6复制技术

    mysql复制功能介绍 我们可以通过为服务器配置主从即一个或多个备库的方式,以及主主结构来进行数据同步,将MySQL的数据分布到多个系统上去.复制过程中一台主库(master)服务器可以数据被同步到多 ...

  8. 如何使用Android可视化埋点

    Android可视化埋点是Android全埋点的增强.开发者可以将App界面同步至DTM界面,并在DTM界面通过可视化点击的方式添加埋点事件.目前Android可视化埋点包含两种埋点方式:普通可视化埋 ...

  9. 帝国CMS如何互相转移分表之间的数据

    最近发现帝国CMS文章数据添加太多到某一张分表中了,如图 这是极其不合理的,需要优化下,所以这篇文章要告诉大家的也就是如何互相转移分表之间的数据. 我现在要将:phome_ecms_news_data ...

  10. NodeJs学习日报day7——简单中间件

    const express = require('express') const app = express() const mw = function(req, resp, next) { cons ...