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

今天,就以计算门店开业前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. 每天打卡一小时 第三十一天 PTA520钻石 争霸赛

    第一题 源代码 #include<iostream> using namespace std; int main() { int n; cin>>n; cout<< ...

  2. skywalking启动配置agent及数据储存对数据源(mysql,es)版本要求

    skywalking启动配置agent及数据储存对数据源(mysql,es)版本要求 # skywalking-agent.jar的本地磁盘路径-javaagent:D:\SkyWalking\sky ...

  3. Java api zookeeper

    package com.redis.demo.zookeeper; import java.io.Serializable; public class User implements Serializ ...

  4. MinIO 图片转文件的分界线RELEASE.2022-05-26T05-48-41Z

    前言:本人想用MinIO存储文件,但是不想最新版本Mete文件,于是各种寻找于是终于找到办法了,原来是官方版本更新导致的.需要我们去寻找相应的版本. 1.官网下载网站 https://dl.min.i ...

  5. k8s安装prometheus

    安装 在目标集群上,执行如下命令: kubectl apply -f https://github.com/512team/dhorse/raw/main/conf/kubernetes-promet ...

  6. RedHat 6.9 操作系统安装

    重启服务器--按F11--bios boot manager ---选择自己的U盘 通过U盘启动RedHat6.9系统,如图安装界面: 选择Install or upgrade an exising ...

  7. Android ADB命令集锦

    Android ADB命令集锦 原文(有删改):https://blog.csdn.net/dianziagen/article/details/57400723 本文包括: adb基本指令 Shel ...

  8. 为什么Linux不能在中断中睡眠

    中断分析 首先来看中断的流程: 1.进入中断处理程序---> 2.保存关键上下文----> 3.开中断(sti指令)---> /* 硬中断:对应于1.2.3步骤. 在这几个步骤中,所 ...

  9. 自己写一个 NODE/ATTR 的结构

    ## python 3.8 以上 from typing import Dict, List, TypeVar, Tuple, Generic, get_args import json T = Ty ...

  10. SpringBoot目录文件结构和官方推荐的目录规范、静态资源访问

    目录讲解 src/main/java:存放代码 src/main/resourcces static:存放静态文件,比如css.js.image,(访问方式:http://localhost:8080 ...