PowerBI_一分钟学会计算门店开业前3天销售金额_计算列及度量值方法
在某些特殊场景,我们往往需要去计算一些特定的组别的聚合数据
今天,就以计算门店开业前3天的销售情况,来学习一下,利用计算列和DAX度量值,两种快捷计算此类问题的方案。
一:XMIND

二:示例数据
2.1 示例数据列说明
为了方便验证和更清晰的检查结果,数据源只用了三列,分别是3个门店,分别为A,B,C,日期列,以及一列模拟的营业额数据。
2.2 计算目标
目标就是利用DAX或者计算列,计算出,每一家门店实际产生销售的前三天的营业额之和

三:计算列方案
首先,我们用计算列方案来解决。
遇到此类问题,最快捷或者说最直接的方式就是通过计算列给我们的每行数据进行数据标注,再通过CALCULATE计算器的筛选器,去筛选我们想要的标签,再得到结果
下方的计算列方案,第一步就是通过MIN函数求得最小得日期,由于我们是计算每个门店单独得最小日期得销售之和,所以这里使用了ALLEXCEPT,去除门店列得筛选,总而得到了每一个门店得开业前三天得数据标签。
最后,通过CALCULATE函数,对符合我们要求的数据,进行求和,便得出我们的结果。
具体DAX代码如下:
第一步,新增营业表的计算列
IsFirst3Days =
VAR MinDate = CALCULATE(MIN('示例表'[日期]), ALLEXCEPT('示例表', '示例表'[门店]))
RETURN
IF(
'示例表'[日期] >= MinDate && '示例表'[日期] <= MinDate + 2,
"开业前三天门店日期",
"其他"
)
第二步,度量值计算营业额,利用第一步的标签来筛选并计算
IsFirst3Days_营业额=
CALCULATE(SUM('示例表'[营业额]),
'示例表'[IsFirst3Days]="开业前三天门店日期")

四:DAX方案
那么有没有更加方便,或者说一步解决问题的方案呢?
当然有,我们来看看纯DAX的解决思路。
首先,思路和计算列方案是一样的,我们也是利用标签的形式去筛选表,然后直接对符合条件的行进行求和,即可得到目标值
下方DAX中,首先利用FILTER函数,对示例表进行筛选,配合ALLEXCEPT函数,去除表筛选条件,最后直接用CALCULATE函数进行聚合。
有一点不一样的是,计算列方案时,我们用了IF去进行判断,DAX方案中,我们用了并列条件,即同时满足这两个条件的行我们保留,小知识点,在DAX中我们会使用 "&&" 去表达我们的 "且" 这个概念。
最后,我们可以看到,两种方案的结果是一样的。

纯DAX方案:
TotalSalesFirst3Days =
CALCULATE(
SUM('示例表'[营业额]),
FILTER(
'示例表',
'示例表'[日期] >= CALCULATE(MIN('示例表'[日期]), ALLEXCEPT('示例表', '示例表'[门店])) &&
'示例表'[日期] <= CALCULATE(MIN('示例表'[日期]), ALLEXCEPT('示例表', '示例表'[门店])) + 2
)
)
看到这里,有些朋友可能会问,为什么会在这里介绍两种方案,而不只介绍DAX呢,明明DAX一步就可以解决问题?
因为,即便计算组,会浪费内存,在大的数据集表中有相当大的性能限制,但是,在某些紧急情况(来不及构思DAX)或者某些特殊场景下,我们首先需要解决问题,我们是鼓励多一些的解决问题思路。
所以,在性能充足时,不必纠结解决方式,解决问题就好,性能优化的事情,我们放在后面解决也不迟。
五:关键DAX-ALLEXCEPT函数
5.1 语法
ALLEXCEPT(<table>, <column1>, <column2>, ...)
5.2 作用
ALLEXCEPT函数会返回一个表,该表删除了所有筛选器,除了那些应用于指定列的筛选器。这在需要对某些列进行聚合计算时非常有用,而不受其他列的筛选条件影响。
5.3 使用场景
计算占比:例如,你想计算某个城市在省份中的销售占比,可以使用ALLEXCEPT函数保留省份的筛选条件,移除其他筛选条件。
复杂的聚合计算:在进行复杂的聚合计算时,ALLEXCEPT可以帮助你控制哪些列的筛选条件被保留,哪些被移除,从而更灵活地进行数据分析。
5.4 其他类似函数
ALL:移除所有筛选器,返回整个表或列
ALL('销售数据')
ALLSELECTED:移除所有筛选器,但保留用户在视觉对象中选择的筛选器
ALLSELECTED('销售数据')
REMOVEFILTERS:移除指定列或表的筛选器。
REMOVEFILTERS('销售数据'[省份])
KEEPFILTERS:保留现有筛选器,并在此基础上添加新的筛选器。
CALCULATE([销售量], KEEPFILTERS('销售数据'[城市] = "成都"))
六:总结
实际业务中,这类根据特定分组,如小组,商品品类,具体门店等,进行统计的场景是很常见的,而今天讲到的ALLEXCEPT函数的灵活使用,恰恰可以帮助我们解决这类问题
这类问题,一般包含了日期,分组占比,分组排名等等一系列的场景,值得我们花时间去研究,后续如果有实际案例发生,我会做补充的案例说明。
ENJOY DAX
PowerBI_一分钟学会计算门店开业前3天销售金额_计算列及度量值方法的更多相关文章
- 数据可视化之DAX篇(二)Power BI中的度量值和计算列,你搞清楚了吗?
https://zhuanlan.zhihu.com/p/75462046 对于初学者,总是会把度量值和计算列搞混,我也经常碰到这样的问题,有些星友用文章中的代码总是报错,发给我一看,才知道TA把本来 ...
- 30 分钟学会 Flex 布局
30 分钟学会 Flex 布局 有酒 617 人赞同了该文章 为什么我要写这一篇关于 Flex 布局的教程? 因为它十分简单灵活,区区简单几行代码就可以实现各种页面的的布局,以前我在学习页面布局的 ...
- 5分钟学会使用Less预编译器
5分钟学会使用Less预编译器 Less是什么? LESS CSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法为CSS赋予了动态语言的特性,如变量.继承.运算.函数等,更方便 ...
- 【grunt第二弹】30分钟学会使用grunt打包前端代码(02)
前言 上一篇博客,我们简单的介绍了grunt的使用,一些基础点没能覆盖,我们今天有必要看看一些基础知识 [grunt第一弹]30分钟学会使用grunt打包前端代码 配置任务/grunt.initCon ...
- 《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)
http://www.matlabsky.com/thread-43937-1-1.html <量化投资:以MATLAB为工具>连载(3)基础篇-N分钟学会MATLAB(下) ...
- 《量化投资:以MATLAB为工具》连载(1)基础篇-N分钟学会MATLAB(上)
http://blog.sina.com.cn/s/blog_4cf8aad30102uylf.html <量化投资:以MATLAB为工具>连载(1)基础篇-N分钟学会MATLAB(上) ...
- [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)
[分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...
- 10分钟学会Linux
10分钟学会Linux有点夸张,可是能够让一个新手初步熟悉Linux中最重要最主要的知识,本文翻译的英文网页在众多Linux入门学习的资料中还是很不错的. 英文地址:http://freeengine ...
- 【译】10分钟学会Pandas
十分钟学会Pandas 这是关于Pandas的简短介绍主要面向新用户.你可以参考Cookbook了解更复杂的使用方法 习惯上,我们这样导入: In [1]: import pandas as pd I ...
- JS 时间差计算 XX秒前、XX小时前、XX天前
//时间差 function GetTime(time) {//di作为一个变量传进来 //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了 var dateBegin = new Date ...
随机推荐
- 点击li 该li变色
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- C# 8字节byte数组转int
对方是协议 对于整型.长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节):而 Little endian 则相反,它认为第一个 ...
- (四)Redis 缓存应用、淘汰机制
1.缓存应用 一个系统中不同层面数据访问速度不一样,以计算机为例,CPU.内存和磁盘这三层的访问速度从几十 ns 到 100ns,再到几 ms,性能的差异很大,如果每次 CPU 处理数据时都要到磁盘读 ...
- JAVA Stream在jdk17下的例子
最近因为某些原因,又要用stream,所以耗费了一些时间,做了一些例子,以便自己后续参考. 环境: windows11 jdk 17 spring 2.6.7 Article类代码: package ...
- .NET中使用RabbitMQ延时队列和死信队列
RabbitMQ延时队列和死信队列 延时队列和死信队列 延时队列是RabbitMQ中的一种特殊队列,它可以在消息到达队列后延迟一段时间再被消费. 延时队列的实现原理是通过使用消息的过期时间和死信队列来 ...
- B 站和小红书又又又崩了,罪魁祸首竟然又是他。。。
大家好,我是凌晨. 今天上午10点左右,我打开B站发现无法刷新视频列表和评论区,收藏夹和弹幕也均不可用. 原以为是手机网络问题,换网络重启手机都还是不行,第一时间打开微博,果然,B站崩了的新闻荣登榜首 ...
- 基于NXP i.MX 6ULL——MQTT通信协议的开发案例
前 言 本指导文档适用开发环境: Windows开发环境:Windows 7 64bit.Windows 10 64bit Linux开发环境:Ubuntu 18.04.4 64bit 拟机:VMw ...
- Canavs在文字上绘制删除线/中划线
效果图: 思路: 绘制文字 绘制高度为1px的长方形,并用黑色填充 长方形的宽度为文字的长度 具体代码: let canvas = document.getElementById('canvas'); ...
- Centos7安装nacos详细步骤(配置开机自启)
Nacos 解压文件 创建数据库nacos,导入nacos的sql文件 创建数据库nacos,导入nacos的sql文件 修改启动文件(根据系统选择) [root@localhost bin]# cd ...
- 时间序列分析专题——利用SPSS专家建模器进行建模
SPSS的专家建模器可以自动识别数据,给出最适合的模型,本章通过三个例题介绍如何使用SPSS实现时间序列分析.由于本人对时间序列分析的理解尚浅,做出模型后在论文上的呈现形式需要取查阅资料,以便更好地在 ...