https://zhuanlan.zhihu.com/p/96823622

​开始半累加的计算之前,我们先看看什么是累加、半累加以及不可累加数据。

在含有大量行的数据表中,各种数据处理语言,包括DAX,为了性能考虑,不太可能总是检索表的每一行,更常见的情形是,一次性检索成千上万行,处理如此多行数据的最有效操作就是将它们加到一起,也就是累加汇总。

可以累加的数据类型就是可累加数据,比如订单表中的销售额,就是这种类型,无论是按照客户维度还是按照时间维度,都可以将每行的销售额直接汇总,并且这种汇总的结果都是有效的、有意义的。

但有些数据是不可累加的,比如价格,虽然是数值,但无论如何累加都是没有意义的,这就是不可累加数据,这类数据最常用的操作是计数或者取平均值。

还有些数据在某些情况下可以累加,但在特定情况下不可累加,比如银行账户的资金余额,可以按照客户维度进行汇总,但并不能按照时间维度进行每日资金余额的汇总操作,每日余额的汇总是没有意义的,这样的数据类型就称为半累加数据。

在这三种类型中,最灵活最有用的当然是完全可累加数据,也是我们最常用的;而不可累加数据是最不灵活的,甚至可以当成是文本类型来看待。

居于其中的就是半累加数据,下面根据一个小例子来理解半累加度量,并看看如何在Power BI中进行它的计算。

假设每日库存余额的数据如下:

新建一个基础度量值:

库存 = SUM('库存表'[库存余额])

半累加度量的可累加属性

当计算每日的库存合计余额时,结果是这样的,

每日的库存余额合计,实际上是在商品维度上汇总,此时体现的是它在商品维度的可累加属性。

半累加度量的不可累加属性

如果上下文是月份,把这个[库存]度量值放进去,结果是这样的,

这个结果实际上是每日的库存余额简单相加,明显是无意义的数字,这时就体现了库存余额在时间维度的不可累加属性。

对于这个不可累加属性,库存更常见的计算是期末余额,实际上就是最后一天的余额,建个度量值如下:

期末库存余额 = CALCULATE([库存],LASTDATE('日期表'[日期]))

结果如下:

这样1月和2月的结果就正确了,但有个问题是3月份竟然返回了空值?

这是因为LASTDATE返回的当前月份的最后一天,如果每日的库存数据都很完整,这样没有问题,但实际情况是有些数据只显示工作日的库存,比如上面的例子,3月31日是周末,3月份库存余额记录的最后一天是3月29日。

因此需要计算最后一个有数据的日期的库存余额,修改度量值如下,

期末库存余额 优化= CALCULATE([库存],FILTER(ALL('日期表'),'日期表'[日期]=MAX('库存表'[日期])))

这样就计算出了正确的结果,

还有个更简单的写法是利用LASTNONBLANK函数,找到最后一个有余额的日期,然后再计算该日期的库存余额,

期末库存余额 优化2= CALCULATE([库存],LASTNONBLANK('日期表'[日期],[库存]))

上面DAX的计算原理,就是先找出最后一天的日期,然后在这个日期,计算所有商品的累计库存余额。

通过这个计算过程就能很清晰的理解半累加度量在时间维度上不可累加、在其他维度上可累加的属性。

半累加度量的计算应注意细节,因为是数值型,在任一维度上累加都不会报错,但某些结果很可能是无效的;不过当你清晰的认识到这个属性以后,利用灵活的DAX,顺畅的进行各种半累加度量的计算并不会成为问题。

数据可视化之DAX篇(二十七)半累加度量,在Power BI 中轻松处理的更多相关文章

  1. 数据可视化之 图表篇(四) 那些精美的Power BI可视化图表

    之前使用自定义图表,每次新打开一个新文件时,都需要重新添加,无法保存,在PowerBI 6月更新中,这个功能得到了很大改善,可以将自定义的图表固定在内置图表面板上了. 添加自定义图表后,右键>固 ...

  2. 数据可视化之DAX篇(十七)Power BI表格总计行错误的终极解决方案

    https://zhuanlan.zhihu.com/p/68183990 我在知识星球收到的问题中,关于表格和矩阵(以下统称表格)总计行错误算是常见的问题之一了,不少初学者甚为不解,在Excel透视 ...

  3. 数据可视化之PowerQuery篇(十五)如何使用Power BI计算新客户数量?

    https://zhuanlan.zhihu.com/p/65119988 每个企业的经营活动都是围绕着客户而开展的,在服务好老客户的同时,不断开拓新客户是每个企业的经营目标之一. 开拓新客户必然要付 ...

  4. 数据可视化之DAX篇(一)Power BI时间智能函数如何处理2月29日的?

    https://zhuanlan.zhihu.com/p/109964336 ​今年是闰年,有星友问我,在Power BI中,2月29日的上年同期是怎么计算的? 这是个好问题,正好梳理一下,Power ...

  5. 数据可视化之DAX篇(二)Power BI中的度量值和计算列,你搞清楚了吗?

    https://zhuanlan.zhihu.com/p/75462046 对于初学者,总是会把度量值和计算列搞混,我也经常碰到这样的问题,有些星友用文章中的代码总是报错,发给我一看,才知道TA把本来 ...

  6. 数据可视化之DAX篇(二十一)连接表的几个DAX函数,一次全掌握

    https://zhuanlan.zhihu.com/p/67015995 编写DAX代码进行业务分析时,经常会用到表与表之间的连接计算,比如在之前的产品关联分析一文中(如何用Power BI分析产品 ...

  7. 数据可视化之DAX篇(二十八)Power BI时间序列分析用到的度量值,一次全给你

    https://zhuanlan.zhihu.com/p/88528732 在各种经营分析报告中,我们常常会看到YTD,YOY这样的统计指标,这样的数据计算并不难,尤其是在PowerBI中,因为有时间 ...

  8. 数据可视化之DAX篇(十一)Power BI度量值不能作为坐标轴?这个解决思路送给你

    https://zhuanlan.zhihu.com/p/79522456 对于PowerBI使用者而言,经常碰到的一个问题是,想把度量值放到坐标轴上,却发现无法实现.尤其是初学者,更是习惯性的想这么 ...

  9. 数据可视化之DAX篇(二十)Think in DAX 之报表自动化实践

    https://zhuanlan.zhihu.com/p/107672198 ​本文来自星友袁佳林的实践分享,他参加了PowerBI星球中的DAX圣经第二版100天学习打卡活动,已持续分享近100天, ...

随机推荐

  1. OpenCV开发笔记(六十四):红胖子8分钟带你深入了解SURF特征点(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  2. 解决mysql插入数据l出现"the table is full"的问题

    需要修改Mysql的配置文件my.ini,在[mysqld]下添加/修改两行:tmp_table_size = 256Mmax_heap_table_size = 256M

  3. cb04a_c++_数据结构_STL_queue队列-一般用来做系统软件开发

    /*cb04a_c++_数据结构_STL_queue队列-一般用来做系统软件开发队列(只能两端数据)与堆栈(只能一端操作数据)都没有迭代器.,队列:FIFO先进先出自适应容器(容器适配器)栈适配器ST ...

  4. 一、Jenkins 安装(自动构建发布)

    war 包方式安装 官方下载地址:https://jenkins.io/download/ ,下载war包,并上传到服务器(案例中是把war包放在了 /usr/local/jenkins 里面) 运行 ...

  5. Netty源码分析之自定义编解码器

    在日常的网络开发当中,协议解析都是必须的工作内容,Netty中虽然内置了基于长度.分隔符的编解码器,但在大部分场景中我们使用的都是自定义协议,所以Netty提供了  MessageToByteEnco ...

  6. JavaWeb网上图书商城完整项目--day02-17.登录功能页面实现

    1.当在登陆页面点击登陆按钮的时候,会调用UserServlet的login方法,我们要在login.jsp中进行配置 2.要在login.jsp中处理Servlet在后台业务操作之后forward到 ...

  7. 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)

    背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...

  8. DNS信息收集-NSLOOKUP

    上一篇文章简单介绍了nslookup的简单用法,这篇文章进一步介绍nslookup. nslookup可以指定DNS服务器,使用server参数: 可以看到,采用不同的DNS服务器的到的结果是不一样的 ...

  9. CentOS 7 下安装 MySQL 8.0

    前言 本篇文章主要介绍在 CentOS 7 环境下安装 MySQL 8.0. 正文 1. 配置yum源 首先在 https://dev.mysql.com/downloads/repo/yum/ 找到 ...

  10. 黑鸟码表BB10S骑行记录导入行者

    前言 开始骑车用行者app记录, 后来觉得每次都要开app很麻烦, 于是在骑友的推荐下入手了黑鸟BB10S, 使用了一段时间感觉还不错, 不过也遇到之前大家说的问题, 黑鸟不支持直接导出fit文件, ...