计算个体占总体的比例是一个很常见的分析方式,它很简单,就是两个数字相除,但是当需要计算的维度、总体的范围发生动态变化时,如何灵活且快速的计算出各种占比,还是需要动一点心思的。

本文就通过 DAX 中的 ALL 和 ALLSELECTED 函数来看看在 PowerBI 中是如何快速计算出各种占比的。


数据为虚拟的某网上商城的电子产品的销售记录,我们根据销售额指标来计算某产品的占总体或者类别的比例。

首先写一个销售额的度量值,

销售额 = SUM('订单'[销售额])

在矩阵中看看该度量值的结果,

总体占比

计算占总体的比例,就是每一个类别的销售额都除以总计数,计算总计数,可以用 ALL 函数清除外部上下文的筛选,如果单独计算出总计销售额,可以这样写,

销售额总计=CALCULATE([销售额],ALL('产品')

将该度量值放入到卡片图中,可以看到正好是2,305,350.

这里为了更加直观,我们直接写出占总体比例的度量值,

总体占比 = DIVIDE([销售额],CALCULATE([销售额],ALL('产品')))

矩阵中结果如下,

为了进一步分析具体每一种产品的占比,把产品名称展开,

分类占比

每一种产品相对于总体的比例都计算出来了,但是如果还需要知道每一种产品占所属分类的比例,可以这样写,

分类占比 =
DIVIDE([销售额],CALCULATE([销售额],ALL('产品'[产品名称])))

结果如下,

这张表中最后一列每种产品占分类的比例正是想要的结果,这两个度量值的区别就在于ALL('产品')和ALL('产品'[产品名称])。

ALL('产品')是清除对产品表上所有的列的上下文,正如上面看到的,CALCULATE([销售额],ALL('产品')的结果就是总体的销售额。

而ALL('产品'[产品名称])仅仅是清除产品名称的上下文,如果上下文不是产品名称,那么它还是会继续计算,比如第一行是类别:电脑外设,它不属于产品名称,那么这个度量值会计算电脑外设的销售额。

可以单独写一个度量值观察一下结果,

销售额 分类 = CALCULATE([销售额],ALL('产品'[产品名称]))

可以看出每一个产品计算出的销售额都是所属分类的汇总销售额,正是利用这个特点,拿产品的销售除以类别合计销售额,就得到的每种产品占所属类别的比例。

按筛选上下文计算总体占比

现在如果想分析具体某几个产品的数据,用产品名称做个切片器,效果如下,

除了类别行和总计行的占比发生了变化,每一种产品的占比数据并没有变化。

如果我们只是想分析所选的这几种产品,把所选这几种产品作为一个整体,来分析每种产品占所选产品的比例,这个结果显然不能让人满意。

是时候请出ALLSELECTED函数登场表演了!

要计算每一种产品占所选品种合计销售额的比例,度量值如下,

按筛选 占总体% =
DIVIDE([销售额],CALCULATE([销售额],ALLSELECTED('产品')))

最后一列的占比,无论我们筛选哪些产品,总体比例都是100%,而每一种产品,都是该产品占所选产品的比例。

ALLSELECTED函数针对外部上下文中进行筛选计算,正好是我们需要的效果。

按筛选上下文计算类别占比

如果我们想进一步计算按外部所选的产品,并且按照产品类别,来计算相对产品类别的百分比,怎么做呢?

也许你已经想到了,和上面一样,使用ALLSELECTED('产品'[产品名称],

按筛选 占分类% =
DIVIDE([销售额],CALCULATE([销售额],ALLSELECTED('产品'[产品名称])))

正是期望中的结果。

从这几个实例可以看出,使用DAX来计算占比非常灵活,稍微一改动,结果大不同,以硬盘为例,通过ALL和ALLSELECTED函数和参数的变化,获得了4个不同的占比,并且每种占比都具有一定的意义,都是在某种业务场景下的真实需求。

总结

其实上面计算的每一种占比,分子都不变,只是通过ALL和ALLSELECT函数及其参数的选择操控不同的上下文环境,来控制分母的计算,进而得到我们所需要的占比。

1,计算占总体的比例,

总体占比 =
DIVIDE([销售额],CALCULATE([销售额],ALL('产品')))

2,计算占类别的比例,

分类占比 =
DIVIDE([销售额],CALCULATE([销售额],ALL('产品'[产品名称])))

3,按外部筛选上下文,计算占总体的比例,

按筛选 占总体% =
DIVIDE([销售额],CALCULATE([销售额],ALLSELECTED('产品')))

4,按外部筛选上下文,计算占类别的比例,

按筛选 占分类% =
DIVIDE([销售额],CALCULATE([销售额],ALLSELECTED('产品'[产品名称])))

DAX函数并不是很容易理解,必须基于不同的上下文环境来观察结果,通过不断的练习、思考背后的逻辑,才能更好的掌握。

是引进外部函数吗_使用PowerBI的这两个函数,灵活计算各种占比相关推荐

  1. string类有可以调换方向的函数吗_深度剖析C++中的inline函数

    点蓝色字关注"CurryCoder" 微信公众号:CurryCoder的程序人生 怕什么真理无穷,进一寸有一寸的欢喜 1.inline函数的爱恨两难 内联函数比宏优点好很多,详细原 ...

  2. vlookup函数练习_为什么职场要学excel函数?看这个案例演示:自动计算快递价格...

    在上一篇文章里面,我们讲了如何整理完成一个规范化的表格,以便于下一步的函数计算. 最初的信息内容如图所示. 经过整理,我们得到了表2这样的规范化表格. 现在,我们就通过表2来实现快递费用自动计算,最终 ...

  3. python中可以使用变量来引用函数吗_如何在python语言中使用函数变量并调用函数...

    在python语言中,除了常规变量之外,还有函数变量.把函数本身赋值给变量,这个变量为函数变量. 工具/原料 python pycharm 截图工具 WPS 方法/步骤 1 在已新建的python文件 ...

  4. sinc函数卷积_从采样点到声音:sinc函数和卷积

    前言 自从接触到数字信号,特别是采样定理之后,我就一直非常好奇一个问题:两个相邻的采样点之间,要以什么样的形式,怎么样连接起来? 因为正弦波才是频率最单一的波形,如果两个采样点直接用直线连接(变成了三 ...

  5. python函数助手_转jmeter(十五)函数助手

    由于时间和版本问题,其中有些内容和排版我做了修改和重新整理,使其更符合最新的jmeter版本. 一.使用jmeter函数助手 启动jmeter后,可以在JMeter的选项菜单中找到函数助手对话框(快捷 ...

  6. 单调有界定理适用于函数吗_《实变函数》——论有界变差函数

    一日不见如隔三秋,本人觉得有界变差函数是实变函数中最容易理解且和高等数学联系最紧密的一个概念,其在概率论中也有非常广泛的应用,也和勒贝格空间有着千丝万缕的联系. 什么叫有界变差函数?若在区间(a,b) ...

  7. python自定义函数名_使用自定义名称创建Python动态函数

    如果这个问题已经提出并得到了回答,我深表歉意. 我需要做的是非常简单的概念,但不幸的是,我还没有找到一个在线答案. 我需要在Python(Python2.7)中使用运行时的自定义名称创建动态函数.每个 ...

  8. python count函数时间复杂度_关于python:了解如何测量函数的时间复杂度

    这是功能: 1 2 3 4 5 6 7 8 9c = [] def badsort(l): v = 0 m = len(l) while v c.append(min(l)) l.remove(min ...

  9. access month函数用法_【Access文章】日期常用函数详解

    时 间:2015-08-20 09:46:13 作 者:摘 要: weekday 函数,WeekdayName函数(VBA),DateSerial 函数,DatePart函数 ,DateAdd 函数  ...

最新文章

  1. elementui 清空下拉框值_element中的select如何在下拉数据改变后清空之前的选择?...
  2. 教你用Keras和CNN建立模型识别神奇宝贝!(附代码)
  3. 2022年值得关注的8个人工智能趋势
  4. 使用IDEA搭建第一个SpringBoot程序
  5. 【数值分析】微分求积:复化梯形、复化辛浦生
  6. Shell-11--for
  7. 什么是 MIME Type
  8. LeetCode 1847. 最近的房间(排序离线计算 + 二分查找)
  9. djpython教程_简单介绍Python的Django框架的dj-scaffold项目
  10. 【BZOJ1922】【Tyvj1736】【codevs2129】大陆争霸,无语最短路
  11. 性能测试的那些事儿!
  12. Activity详解 Intent显式跳转和隐式跳转, 及多个Activity之间传值 总结
  13. TeraTerm SSH 登陆
  14. 计算机类专业学习难度排行,大学最难学的十大专业排名
  15. 从 Chrome 源码看浏览器如何计算 CSS
  16. JAVA:实现线性丢番图方程求解器算法(附完整源码)
  17. android系统优化方向,Android开发的优化方向
  18. 不相信九江大桥事故专家鉴定的五大理由
  19. LDF文件过大,如何收缩
  20. 洛谷P1101 单词方阵

热门文章

  1. mysql concat例子_MYSQL中CONCAT详解
  2. python rowcount_PyQt(Python+Qt)学习随笔:QTableWidget的currentItem、rowCount、columnCount等部件状态属性访问方法...
  3. win10无法运行C语言文件,主编告诉你win10打不开pdf文件的详尽处理办法
  4. oracle 存long,ORACLE中LONG类型字段的存取
  5. Python脚本实现图片加水印
  6. opencv双目视觉标定、匹配和测量 (附代码)
  7. 高光谱图像pca降维_高光谱图像的数据特性之探讨
  8. 华为手机怎么强制关机_华为忘记锁屏密码怎么办?多品牌手机通用解锁密码
  9. 导致大量kworker的原因_高尿酸与生活习惯有关?导致高尿酸的8个坏习惯,现在改还来得及...
  10. 鼠标点击实现花瓣雨_每周实验 | 黄金雨