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

本文源于微博上一位朋友的问题,在计算同比增长率时,以下两种DAX代码有什么不同?

--------------------

YOY% 1 =

VAR sales=SUM('订单'[销售额])

VAR lysales=

CALCULATE(

SUM('订单'[销售额]),

SAMEPERIODLASTYEAR('日期表'[日期]))

RETURN DIVIDE(sales-lysales,lysales)

--------------------

--------------------

YOY% 2 =

VAR sales=SUM('订单'[销售额])

VAR lysales=

CALCULATE(

sales,

SAMEPERIODLASTYEAR('日期表'[日期]))

RETURN DIVIDE(sales-lysales,lysales)

--------------------

这两种方式,只是在计算上年销售额lysales时,CALCULATE的第一个参数有区别,第一种方式是使用SUM('订单'[销售额]),而第二种方式是利用了上一步VAR定义好的sales来进行运算。

你可以先思考一下,上述两种方式哪一种可以返回期望的结果呢?


将这两个度量值放进矩阵中看看结果,

因为2016年没有上年数据,所以YOY%1 2016年的结果为空,也属正常,2017年正常计算出结果。

但是YOY%2 的每个值都是零,为什么是这个结果呢?

并且这种写法还是参考了微软官方文档中VAR的使用示例:

https://docs.microsoft.com/zh-cn/dax/var-dax

所以官方的资料中也会有失误的情况,而我之前的文章中(学会VAR,你就离掌握DAX更近了一步)也介绍了这个写法,当时没有细想,也没有实际验证,现在看来,也是很有问题的,这里给大家道个歉。

第二种写法到底有什么问题呢?

还是要回到VAR的特征,它定义的是一个变量,但是它一旦定义完成,在当前的计算中就变成了一个固定值,不会再发生变化,所以在计算lysales时,无论是否有 SAMEPERIODLASTYEAR的条件,它都会等于sales,因此导致结果都等于0。

如果还不明白,我们可以再分别验证一下sales和lysales的结果,

再建两个度量值:

--------------------

sales =

VAR sales=SUM('订单'[销售额])

RETURN sales

--------------------

--------------------

lysales =

VAR sales=SUM('订单'[销售额])

VAR lysales=

CALCULATE(

sales,

SAMEPERIODLASTYEAR('日期表'[日期]))

RETURN lysales

--------------------

结果如下,

lysales的计算结果和sales完全一样!

以2017年为例,VAR定义的变量sales的结果是1666736,在计算lysales时,就变成了:

CALCULATE(

1666736,

SAMEPERIODLASTYEAR('日期表'[日期]))

结果当然还是1666736.

如何解决这个问题呢,就是使用本文开头的第一种写法,定义的sales和lysales都要独立根据上下文运算,分别得出正确的结果以后,再进行增长率运算。

通过这个例子,是不是对VAR的理解又加深了一层呢。

数据可视化之DAX篇(九) 关于DAX中的VAR,你应该避免的一个常见错误的更多相关文章

  1. 数据可视化之PowerQuery篇(四)二维表转一维表,看这篇文章就够了

    https://zhuanlan.zhihu.com/p/69187094 数据分析的源数据应该是规范的,而规范的其中一个标准就是数据源应该是一维表,它会让之后的数据分析工作变得简单高效. 在之前的文 ...

  2. 数据可视化之 图表篇(二)如何用Power BI制作疫情地图?

    丁香园制作的这个地图可视化,相信大家每天都会看好几遍,这里不讨论具体数据,仅来探讨一下PowerBI地图技术. 这个地图很简洁,主要有三个特征: 1,使用着色地图,根据数据自动配色 2,只显示中国地图 ...

  3. 【WaaCaa】一款开源科学作图/数据可视化工具 —— 诞生篇

    作为一个理工男.用过了形形色色能够用于科学作图/数据可视化软件:从大学时做实验课推荐用于分析简单採集数据的 Origin; 毕业论文时用来呈现实验时序信号和离线分析脑电信号的 MATLAB.后面还发现 ...

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

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

  5. 数据可视化之PowerQuery篇(七)Power Query应用技巧:批量更改列名

    https://zhuanlan.zhihu.com/p/130460772 ​今天分享一个PowerQuery的小技巧,导入到PowerBI中的数据,如果想要更改数据的列名,可以在PQ编辑器中直接双 ...

  6. 数据可视化之PowerQuery篇(十九)PowerBI数据分析实践第三弹 | 趋势分析法

    https://zhuanlan.zhihu.com/p/133484654 ​本文为星球嘉宾"海艳"的PowerBI数据分析工作实践系列分享之三,她深入浅出的介绍了PowerBI ...

  7. 数据可视化之分析篇(九)PowerBI数据分析实践第三弹 | 趋势分析法

    https://zhuanlan.zhihu.com/p/133484654 以财务报表分析为例,介绍通用的分析方法论,整体架构如下图所示: (点击查看大图) 我会围绕这五种不同的方法论,逐步阐述他们 ...

  8. 数据可视化之PowerQuery篇(九)巧用Power Query,Excel也可以轻松管理文档

    https://zhuanlan.zhihu.com/p/111674088 ​来自知乎一个朋友的问题,如何在Excel中批量插入文件的超链接,以便在Excel中对文档进行有序的目录管理? 这个问题的 ...

  9. 数据可视化之分析篇(八)Power BI数据分析应用:结构百分比分析法

    https://zhuanlan.zhihu.com/p/113113765 PowerBI数据分析02:结构百分比分析法 作者:海艳 结构百分比分析法,又称纵向分析,是指同一期间财务报表中不同项目间 ...

随机推荐

  1. Swift Core Data 图片存储与读取

    1.首先推出选择拍照还是相册的alert,代码如下: UIAlertController *alert = [UIAlertController alertControllerWithTitle:ni ...

  2. 驱动开发 —— 从零开始(1) 配置vs20xx+wdkxx环境

    网上教程很多.如何去安装如何去配置 但是也有些坑感觉并不是那么的完善 wdk+vs下载链接:https://docs.microsoft.com/zh-cn/windows-hardware/driv ...

  3. Docker学习 ,超全文档!

    我们的口号是:再小的帆也能远航,人生不设限!!        一.学习规划: Docker概述 Docker安装 Docker命令 Docker镜像 镜像命令 容器命令 操作命令 容器数据卷  Doc ...

  4. CENTOS的备份和恢复

    CENTOS的备份和恢复其实非常简单,我们只要把全部文件用TAR打包就行,下次需要恢复的适合再解压开覆盖就可以了 下面详解CENTOS备份和还原的过程 tar打包命令的特点:1.保留权限2.适合备份整 ...

  5. pip未找到

    命令终端运行 sudo easy_install pip 安装成功后最后会显示 Installed /Library/Python/2.7/site-packages/pip-9.0.1-py2.7. ...

  6. 使用三台云服务器搭建真正的Redis集群

    三台云服务器搭建redis集群# 今天花了一天的时间弄集群redis:遇到了很多坑,从头开始吧 环境讲解: 两台配置:1核2G,另一台:1核1G: 操作系统:Centos 7.6 Redis:3.2. ...

  7. Redis系列(四):数据结构String类型中基本操作命令和源码解析

    1.介绍 string类型本质上是char[]数组的封装  中文网:http://www.redis.cn/commands.html#string  2.常用命令 set 命令 set命令的时间复杂 ...

  8. phpmyadmin系列渗透思路连载(一)

    当拿到phpmyadin的站点后,我一般会尝试一下几种攻击手法: 1.通过弱口令进入后台,尝试into outfile写入一句话 条件:(1)有写的权限    (2)知道web绝对路径    (3)w ...

  9. 3.kubernetes的CNI网络插件-Flannel

    目录 1.1.K8S的CNI网络插件-Flannel 1.1.1.集群规划 1.1.2.下载软件.解压.软链接 1.1.3.最终目录结构 1.1.4.拷贝证书 1.1.5.创建配置 1.1.6.创建启 ...

  10. 强大的IntelliJ IDEA怎么破解?

    IntelliJ IDEA是非常好用的一个开发工具,怎么样才可以破解也是非常关键的问题,本文简单介绍破解方法. 第一种方式,我们进入以下网站http://idea.lanyus.com/ 这里要注意一 ...