相关文章推荐
发呆的洋葱  ·  使用JDBC连接与开发PolarDB ...·  1 周前    · 
爱搭讪的红金鱼  ·  安卓测试。等待视图层次结构的根部拥有窗口焦点·  2 年前    · 
发财的山寨机  ·  如何从我的电脑访问远程HDFS集群·  2 年前    · 
大鼻子的鸡蛋  ·  利用vue-video-player插件自定 ...·  2 年前    · 
傻傻的警车  ·  Ajax及其应用 - XZGNVPY - 博客园·  2 年前    · 
Code  ›  错误案例分析:自动日期表到底是怎么工作的? | DAX原理开发者社区
date date函数
https://cloud.tencent.com/developer/article/2154111
很拉风的荒野
2 年前
作者头像
大海Power
0 篇文章

错误案例分析:自动日期表到底是怎么工作的? | DAX原理

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 用户8950297的专栏 > 错误案例分析:自动日期表到底是怎么工作的? | DAX原理

错误案例分析:自动日期表到底是怎么工作的? | DAX原理

作者头像
大海Power
发布 于 2022-11-07 19:52:56
750 0
发布 于 2022-11-07 19:52:56
举报

- 1 -

最近一位朋友在用Power BI做一项与日期相关的分析时,出现了一些看起来很奇怪的情况:

用DATESBETWEEN函数求上半年的销售合同金额,结果每年得到的数据除了最后的2022年外,都是全年的(紫色框部分)。

具体如下图所示:

这,到底怎么回事儿呢? (配套数据下载链接见文末)

经过仔细观察,发现这个DAX公式里有个很特别的地方,就是对日期使用了.[Date]的日期引用形式:

可能比较多朋友在写DAX公式,引用日期时,看到过.[Date]的情况,比如在写公式时,输完某个日期列的时候,就会自动弹出来.[Date]、.[MonthNo]……一堆选项:

此时,直接回车就会把.[Date]带入公式中,最后写成上面的公式的样子。但是,这个到底是什么?可能很多朋友就没有想过或者不清楚。

- 2 -

此前,我写过文章《 开始用Power BI?别急!这几个选项配置值得注意!| PBI实战 》,其中提到,要先把“自动日期”的设置取消掉,因为这个自动日期会产生很多不良的影响:

除了我在那个文章中讲的生成自动日期结构外,与本篇文章的奇怪计算结果也有密切关系!

Power BI自动日期表的原理,可以这样理解—— Power BI会对于每一个日期列(包括日期表的日期),生成一个隐藏的日期表,并与这个日期列形成1对多的关系:

同时在原表中生成一个基于隐藏日期表的日期结构。 如下图所示:

这个时候, 在日期表里看到的两个“年”、两个“季度”、两个“月”……但他们的层次是不一样的。

基于原始日期表的日期列生成的隐藏日期表位于1端,而原始日期表位于多端,即: 层次结构里的年、月等对原始日期表里的数据有筛选作用,而原始日期表里的年、月等列,对层次结构里的数据却没有筛选作用。

- 3 -

这时,我们再回头看前面的例子,矩阵中用的“年”,是原始日期表中的“年”,它并不能对生成的隐藏日期表中的数据进行筛选,所以,它对于使用 【‘日期表’[Date].[Date]】进行计算的度量,其中的 【‘日期表’[Date].[Date]】的取值范围并没有受到矩阵中“年”维度的影响 :

  • 在每一行(年)里,它的取值范围都是整个日期表的范围
  • Min(‘日期表’[Date].[Date])就是日期表中的最小日期,取年份即都是2018;
  • Max(‘日期表’[Date].[Date])就是日期表中的最大日期,取年份即都是2022;

所以,上图中的DatesBetween的筛选条件,对于每一个年份,它的范围都是2018年1月1日至2022年6月30日,这时,再叠加“年”的筛选,除2022年外,得到的都是全年的数据。

这里,假设我们 将矩阵中的“年”,调整为日期结构(隐藏的日期表)中的“年”,每年的上半年金额就完全正确:

但是,这里使用DatesBetween计算其实还是不合适的,因为 总计行一定会出错!

总计行的原理,就是自动删除矩阵中的分组维度的筛选作用,比如这里的“年”维度。 所以,当删除了年维度的筛选作用后,无论用[Date]还是[Date].[Date],得到的结果都是从2018年1月1日至2022年6月30日的合同金额之和!

那么,正确的写法是什么呢?其实很简单,不需要时间智能函数,只需要通过月份进行筛选即可:

这个例子很值得大家认真看一下,进一步理解日期、日期表以及时间智能函数的一些原理。目前,发现很多朋友在用Excel的思路去用DAX里的这些函数,一不小心就出错了,因为,这些函数虽然长得一样,但实际上差异很大!

DAX不难,但一定要沉下心来,好好把基本的原理和基础打好,一心想着看几个函数就匆忙用到工作上,不仅几乎等同于抓虾,而且还是很容易出错的。

本文参与 腾讯云自媒体分享计划 ,分享自微信公众号。
原始发表:2022-08-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除
腾讯云开发者社区

本文分享自 Excel到PowerBI 微信公众号, 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

腾讯云开发者社区
评论
登录 后参与评论
0 条评论
热度
最新
登录 后参与评论
关于作者
大海Power
0
文章
0
累计阅读量
0
获赞
前往专栏
领券
  • 社区

    • 专栏文章
    • 阅读清单
    • 互动问答
    • 技术沙龙
    • 技术视频
    • 团队主页
    • 腾讯云TI平台
  • 活动

    • 自媒体分享计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2023 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
发呆的洋葱  ·  使用JDBC连接与开发PolarDB PostgreSQL版(兼容Oracle)-云原生数据库 PolarDB-阿里云
1 周前
爱搭讪的红金鱼  ·  安卓测试。等待视图层次结构的根部拥有窗口焦点
2 年前
发财的山寨机  ·  如何从我的电脑访问远程HDFS集群
2 年前
大鼻子的鸡蛋  ·  利用vue-video-player插件自定义制作视频功能 - 程序员-壯 - 博客园
2 年前
傻傻的警车  ·  Ajax及其应用 - XZGNVPY - 博客园
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号