在某些特殊场景,我们往往需要去计算一些特定的组别的聚合数据

今天,就以计算门店开业前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天销售金额_计算列及度量值方法的更多相关文章

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

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

  2. 30 分钟学会 Flex 布局

    30 分钟学会 Flex 布局 有酒   617 人赞同了该文章 为什么我要写这一篇关于 Flex 布局的教程? 因为它十分简单灵活,区区简单几行代码就可以实现各种页面的的布局,以前我在学习页面布局的 ...

  3. 5分钟学会使用Less预编译器

    5分钟学会使用Less预编译器 Less是什么? LESS CSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法为CSS赋予了动态语言的特性,如变量.继承.运算.函数等,更方便 ...

  4. 【grunt第二弹】30分钟学会使用grunt打包前端代码(02)

    前言 上一篇博客,我们简单的介绍了grunt的使用,一些基础点没能覆盖,我们今天有必要看看一些基础知识 [grunt第一弹]30分钟学会使用grunt打包前端代码 配置任务/grunt.initCon ...

  5. 《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)

    http://www.matlabsky.com/thread-43937-1-1.html   <量化投资:以MATLAB为工具>连载(3)基础篇-N分钟学会MATLAB(下)     ...

  6. 《量化投资:以MATLAB为工具》连载(1)基础篇-N分钟学会MATLAB(上)

    http://blog.sina.com.cn/s/blog_4cf8aad30102uylf.html <量化投资:以MATLAB为工具>连载(1)基础篇-N分钟学会MATLAB(上) ...

  7. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  8. 10分钟学会Linux

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

  9. 【译】10分钟学会Pandas

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

  10. JS 时间差计算 XX秒前、XX小时前、XX天前

    //时间差 function GetTime(time) {//di作为一个变量传进来 //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了 var dateBegin = new Date ...

随机推荐

  1. rust程序设计(6)枚举与模式匹配

    rust中的枚举有什么用?枚举可以嵌入类型的好处是什么 你可以在同一个枚举中既有单个值,也有元组或结构体. 枚举的每个变体可以拥有不同数量和类型的关联数据. 这增加了类型的灵活性和表达力,使你能够更精 ...

  2. 燕千云 YQCloud 数智化业务服务管理平台 发布1.13版本

    2022年6月10日,燕千云 YQCloud 数智化业务服务管理平台发布1.13版本.本次燕千云1.13版本新增了远程桌面.知识库多人在线协作.移动端疫苗核酸信息管理.单据委托代理.技能管理.产品自助 ...

  3. 使用python脚本玩转古早TCAD软件(待更新)

    前言 TCAD(Technology Computer Aided Design),虽然原名中没有与半导体器件有关的词汇,但这种软件便是半导体工艺模拟及器件模拟的工具,可以说是EDA软件的一种.TCA ...

  4. BST-Treap名次树数组&指针实现板子 Ver1.0

    这里只有板子没有原理QWQ 可实现 1.插入 x 数 2.删除 x 数(若有多个相同的数,只删除一个) 3.查询 x 数的排名(排名定义为比当前数小的数的个数 +1) 4.查询排名为 x 的数 5.求 ...

  5. 使用 GPU 进行 Lightmap 烘焙 - 简单 demo

    作者:i_dovelemon 日期:2024-06-16 主题:Lightmap, PathTracer, Compute Shader 引言 一直以来,我都对离线 bake lightmap 操作很 ...

  6. Python str 转 b’二进制串

    用raw_unique_escape来编码无义意的二进制串 bytes(strtext, encoding='raw_unique_escape')

  7. Netty(二)线程模型

    1. Netty概述 虽然Java已经提供了NIO,但原生NIO仍存在部分问题: NIO的类库和API繁杂,使用麻烦.需要熟练掌握Selector.ServerSocketChannel.Socket ...

  8. NXP i.MX 8M Mini的视频开发案例分享 (下)

    本文主要介绍i.MX 8M Mini的视频开发案例,包含基于GStreamer的视频采集.编解码.算法处理.显示以及存储案例,GigE工业相机测试说明,H.265视频硬件解码功能演示说明等. 注:本案 ...

  9. 煤矿安全大模型:微调internlm2模型实现针对煤矿事故和煤矿安全知识的智能问答

    煤矿安全大模型----矿途智护者 使用煤矿历史事故案例,事故处理报告.安全规程规章制度.技术文档.煤矿从业人员入职考试题库等数据,微调internlm2模型实现针对煤矿事故和煤矿安全知识的智能问答. ...

  10. 新知识get,vue3是如何实现在style中使用响应式变量?

    前言 vue2的时候想必大家有遇到需要在style模块中访问script模块中的响应式变量,为此我们不得不使用css变量去实现.现在vue3已经内置了这个功能啦,可以在style中使用v-bind指令 ...