前言

在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为结尾的聚合函数的更多相关文章

  1. 10分钟学会Linux

    10分钟学会Linux有点夸张,可是能够让一个新手初步熟悉Linux中最重要最主要的知识,本文翻译的英文网页在众多Linux入门学习的资料中还是很不错的. 英文地址:http://freeengine ...

  2. 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 ...

  3. 10分钟学会VS NuGet包私有化部署

    前言 我们之前实现了打包发布NuGet,但是发布后的引用是公有的,谁都可以访问,显然这种方式是不可取的. 命令版本:10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(ne ...

  4. UWP开发入门(十九)——10分钟学会在VS2015中使用Git

    写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支持.考虑到现在Git很火,作为微软系的程序员也不得不学一点防身,以免被开 ...

  5. 【译】10分钟学会Pandas

    十分钟学会Pandas 这是关于Pandas的简短介绍主要面向新用户.你可以参考Cookbook了解更复杂的使用方法 习惯上,我们这样导入: In [1]: import pandas as pd I ...

  6. 10分钟学会Less开发环境搭建与初体验

    Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题.扩充. 今天看一下,10分钟能不能手把手快速教会你Le ...

  7. 10分钟学会windows中iis搭建服务器集群实现负载均衡和nginx代理转发

    前言 我们之前聊过 10分钟搭建服务器集群--Windows7系统中nginx与IIS服务器搭建集群实现负载均衡:https://www.cnblogs.com/xiongze520/p/103087 ...

  8. [Pulsar系列] 10分钟学会Pulsar消息系统概念

    Apache Pulsar Pulsar是一个支持多租户的.高性能的服务与服务之间消息通讯的解决方案,最初由雅虎开发,现在由Apache软件基金会管理. Pulsar的主要特性如下: Pulsar实例 ...

  9. 10分钟学会Python

    #1. 语法 Python中没有强制的语句终止字符,代码块是通过缩进来指示的.缩进表示一个代码块的开始,逆缩进则表示一个代码块的结束.一般用4个空格来表示缩进. 声明以冒号(:)字符结束,并且开启一个 ...

  10. 10分钟学会前端调试利器——FireBug

    概述 FireBug是一个用于网站前端开发的工具,它是FireFox浏览器的一个扩展插件.它可以用于调试JavaScript.查看DOM.分析CSS.监控网络流量以及进行Ajax交互等.它提供了几乎前 ...

随机推荐

  1. freopen函数

    C/C++ 输入输出到文件 freopen("in.txt","r",stdin); freopen("out.txt","w&q ...

  2. PC端,知乎在不想登录的情况下一打开就弹出登录框的无痛解决办法

    基于chrome浏览器 第一步: chrome://settings/content/javascript 第二步:添加禁用项 [*.]zhihu.com

  3. POI给单元格添加超链接(xls,xlsx)

    package com.topcheer.html; import java.io.FileOutputStream; import java.io.IOException; import org.a ...

  4. 在MDK 5中打开MDK 4工程要注意的问题1

    我是生手,对于MDK的理解还很简单.以下内容是遇到的一种情况. 有一个MDK 4工程,要求顺序点亮4个LED灯,工程已经建好. 在MDK 5中打开,编译都没问题,要烧写时,提示"can no ...

  5. Swust OJ977: 统计利用先序遍历创建的二叉树中的空链域个数

    题目描述 利用先序递归遍历算法创建二叉树并计算该二叉树中的空链域个数. 输入 输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树). 输出 输出该 ...

  6. MFC 错误调试总结

    1.  msdia80.dll can not be loaded 该文件的路径应该是:C:\Program Files\Common Files\microsoft shared\VC\msdia8 ...

  7. JavaWeb学习笔记第三弹

    一.数据库设计 1.软件研发步骤 2.数据库设计概念 建立数据库中的表结构以及表与表之间的关联关系的过程 3.数据库设计的步骤 表关系:一对一.一对多(多对一).多对多 表关系之一对多 表关系之多对多 ...

  8. MySQL学习(六)timestamp & datetime 区别

    参考博客: https://cloud.tencent.com/developer/article/1407693 timestamp只使用datetime一半的存储空间,并且会根据时区变化,具有特殊 ...

  9. Go内存管理逃逸分析

    1. 前言 所谓的逃逸分析(Escape analysis)是指由编译器决定内存分配的位置吗不需要程序员指定. 函数中申请一个新的对象 如果分配在栈中, 则函数执行结束后可自动将内存回收 如果分配在堆 ...

  10. 【读书笔记】组合计数-Tilings-正文 学一半的笔记

    Tilings-正文部分 目录 9.2 转移函数方法 例子 补充 9.3 其余的方法 9.3.1 the path method 9.3.2 The permanent-determinant and ...