#PowerBi 10分钟学会,以X为结尾的聚合函数
前言
在Power BI中,我们经常需要对数据进行聚合计算,比如求和、求平均、求最大值等。
Power BI提供了一系列的聚合函数,可以用来对表中列的值进行聚合然后返回一个值。这些函数通常只需要一个参数,就是要聚合的列名。如SUM(‘销售表’[销量]),就是求销售表里的销量总和。
但是有时候,我们需要对更复杂的表达式进行聚合计算,而不是单纯的一列。今天就来学一下迭代函数解决这类问题。
为了便于理解,本文结合excel分别做两个例子,一个excel版本,一个BI版本,对比学习。
本文示例数据表及BI模型构成
销售表如下:
产品表如下:
BI数据模型
一:聚合函数和迭代函数
1.1引用对象不同
聚合函数只接受单列引用(划重点),而迭代函数可以支持多列计算而聚合
1.2语法示例
聚合函数: SUM(‘销售表’[销量])
迭代函数: SUMX(表,表达式)
以X为结尾的聚合函数非常强大和灵活,它们可以让我们对复杂的表达式进行聚合计算,而不受列或数据类型的限制。它们也可以和其他的表函数配合使用,比如FILTER、RELATEDTABLE等,来实现更多的功能。
1.3 X函数罗列
SUMX、COUNTX、MINX、MAXX、PRODUCTX等等
以X为结尾的聚合函数有很多种,它们的区别在于最后的聚合方式不同。例如,SUMX是求和,MINX是求最小值,MAXX是求最大值,COUNTX是计数等等。它们的用法和语法都很类似,只要掌握了其中一个,就可以很容易地使用其他的。
1.4 为什么要用SUMX这类的迭代函数
日常工作中如果我们要计算一个销量,那么SUM(销售表[销量])就是计算销售表中销量列的所有值的和。
但是有时候,我们需要对更复杂的表达式进行聚合计算,而不是单纯的一列。比如,我们想要计算每个产品的总销售额,但是销售表中又没有产品的售价时,这个表达式涉及到两个表:销售表和产品表,它们之间有一个关联关系。如果我们直接用SUM函数来计算销售总和,就会得到错误的结果,因为SUM函数不能处理这样的表达式(因为涉及多列运算)。这时候,我们就需要用到以X为结尾的聚合函数。
二:案例分析
假设现在我们有两张数据源表。
目标是求得对应各个产品的总销售额。
销售表如下:
产品表如下:
2.1 Excel中的计算
如果是在excel中,我们可以根据产品名,用vlookup去匹配产品表中的产品售价,然后通过售价与销量相乘得到总的销售金额
然后透视表汇总结果
通过excel的实现中,最关键的其实就是新增列,然后通过新增列的值去求和在汇总。
2.2 POWERBI,DAX实现
产品销售金额 = SUMX('销售表','销售表'[销量]*RELATED('产品表'[售价]))
通过迭代函数只需要一行代码。第二参数可以是表达式,这里的related函数相当于上面excel中的vlookup,使得匹配上的值和销售进行了相乘(这里大家可以理解为在bi中我们新增了一个虚拟行去替代excel中我们新增的两列,而SUMX函数针对虚拟的行,
逐行进行表达式的计算,最后针对汇总的虚拟行,进行了SUM求和)
最后,在bi中新建一张表,拉到值内,和excel中是一样的效果。
其他,以X结尾的迭代函数,也和SUMX类似,大家可以举一三反,多在自己的业务中应用,来提高对这类函数的认识和熟练度。
#PowerBi 10分钟学会,以X为结尾的聚合函数的更多相关文章
- 10分钟学会Linux
10分钟学会Linux有点夸张,可是能够让一个新手初步熟悉Linux中最重要最主要的知识,本文翻译的英文网页在众多Linux入门学习的资料中还是很不错的. 英文地址:http://freeengine ...
- 10分钟学会搭建Android开发环境 Eclipse: The import android.support cannot be resolved
10分钟学会搭建Android开发环境_隋雨辰 http://v.youku.com/v_show/id_XNTE2OTI5Njg0.html?from=s1.8-1-1.2 The import a ...
- 10分钟学会VS NuGet包私有化部署
前言 我们之前实现了打包发布NuGet,但是发布后的引用是公有的,谁都可以访问,显然这种方式是不可取的. 命令版本:10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(ne ...
- UWP开发入门(十九)——10分钟学会在VS2015中使用Git
写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支持.考虑到现在Git很火,作为微软系的程序员也不得不学一点防身,以免被开 ...
- 【译】10分钟学会Pandas
十分钟学会Pandas 这是关于Pandas的简短介绍主要面向新用户.你可以参考Cookbook了解更复杂的使用方法 习惯上,我们这样导入: In [1]: import pandas as pd I ...
- 10分钟学会Less开发环境搭建与初体验
Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题.扩充. 今天看一下,10分钟能不能手把手快速教会你Le ...
- 10分钟学会windows中iis搭建服务器集群实现负载均衡和nginx代理转发
前言 我们之前聊过 10分钟搭建服务器集群--Windows7系统中nginx与IIS服务器搭建集群实现负载均衡:https://www.cnblogs.com/xiongze520/p/103087 ...
- [Pulsar系列] 10分钟学会Pulsar消息系统概念
Apache Pulsar Pulsar是一个支持多租户的.高性能的服务与服务之间消息通讯的解决方案,最初由雅虎开发,现在由Apache软件基金会管理. Pulsar的主要特性如下: Pulsar实例 ...
- 10分钟学会Python
#1. 语法 Python中没有强制的语句终止字符,代码块是通过缩进来指示的.缩进表示一个代码块的开始,逆缩进则表示一个代码块的结束.一般用4个空格来表示缩进. 声明以冒号(:)字符结束,并且开启一个 ...
- 10分钟学会前端调试利器——FireBug
概述 FireBug是一个用于网站前端开发的工具,它是FireFox浏览器的一个扩展插件.它可以用于调试JavaScript.查看DOM.分析CSS.监控网络流量以及进行Ajax交互等.它提供了几乎前 ...
随机推荐
- freopen函数
C/C++ 输入输出到文件 freopen("in.txt","r",stdin); freopen("out.txt","w&q ...
- PC端,知乎在不想登录的情况下一打开就弹出登录框的无痛解决办法
基于chrome浏览器 第一步: chrome://settings/content/javascript 第二步:添加禁用项 [*.]zhihu.com
- POI给单元格添加超链接(xls,xlsx)
package com.topcheer.html; import java.io.FileOutputStream; import java.io.IOException; import org.a ...
- 在MDK 5中打开MDK 4工程要注意的问题1
我是生手,对于MDK的理解还很简单.以下内容是遇到的一种情况. 有一个MDK 4工程,要求顺序点亮4个LED灯,工程已经建好. 在MDK 5中打开,编译都没问题,要烧写时,提示"can no ...
- Swust OJ977: 统计利用先序遍历创建的二叉树中的空链域个数
题目描述 利用先序递归遍历算法创建二叉树并计算该二叉树中的空链域个数. 输入 输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树). 输出 输出该 ...
- MFC 错误调试总结
1. msdia80.dll can not be loaded 该文件的路径应该是:C:\Program Files\Common Files\microsoft shared\VC\msdia8 ...
- JavaWeb学习笔记第三弹
一.数据库设计 1.软件研发步骤 2.数据库设计概念 建立数据库中的表结构以及表与表之间的关联关系的过程 3.数据库设计的步骤 表关系:一对一.一对多(多对一).多对多 表关系之一对多 表关系之多对多 ...
- MySQL学习(六)timestamp & datetime 区别
参考博客: https://cloud.tencent.com/developer/article/1407693 timestamp只使用datetime一半的存储空间,并且会根据时区变化,具有特殊 ...
- Go内存管理逃逸分析
1. 前言 所谓的逃逸分析(Escape analysis)是指由编译器决定内存分配的位置吗不需要程序员指定. 函数中申请一个新的对象 如果分配在栈中, 则函数执行结束后可自动将内存回收 如果分配在堆 ...
- 【读书笔记】组合计数-Tilings-正文 学一半的笔记
Tilings-正文部分 目录 9.2 转移函数方法 例子 补充 9.3 其余的方法 9.3.1 the path method 9.3.2 The permanent-determinant and ...