110_Power Pivot特殊结算日期及财年日期
博客:www.jiaopengzi.com
1、背景
前几天看到群里有朋友在搞特殊结算日期,主要不是按照正常日期里的整月,按照比如:上月21号至本月20号作为结算周期,由于这样的结算日期,无法使用pp里面的时间智能函数。
pp内置了很多时间智能函数,但是都无法满足需求,dax只要你创建上下文即可满足业务需求,今天就简单写个这样的度量值。
2、数据源
calendar表
2017/1/1-2018/12/31
fact表
2017/1/1-2018/12/31的随机value

关系建立

3、上DAX
total
total:=SUM('fact'[value])
ytd_1231
按照每年12月31号为结算年末的ytd,注意观察datesytd第二参数:"12-31"
ytd_1231:=CALCULATE('fact'[total],DATESYTD('calendar'[date],"12-31"))
ytd_0630
按照每年6月30号为结算年末的ytd,注意观察datesytd第二参数:"06-30"
ytd_0630:=CALCULATE('fact'[total],DATESYTD('calendar'[date],"06-30"))
mtd
按照正常整月的mtd
mtd:=CALCULATE('fact'[total],DATESMTD('calendar'[date]))
mtd2
1、按照结算周期(上月21日-本月20日,其中D是参数可以更改为自己需求)的mtd,可以看月维度及天维度;
2、考虑闰年2月29天因素
3、由于本案例中只存在2017年以后数据,2017年1月mtd即是1月1日-1月20日之间
mtd2:=
VAR D = 20//D设置为参数,D的范围应该在(1,28)
VAR MP =
COUNTROWS ( PREVIOUSMONTH ( 'calendar'[date] ) )
VAR MSD =
STARTOFMONTH ( 'calendar'[date] )
VAR N =
SWITCH (
TRUE (),
MP = 31, D - 31,
MP = 30, D - 30,
MP = 29, D - 29,
MP = 28, D - 28
)
VAR SD =
IF (
ISFILTERED ( 'calendar'[date] ),
IF (
DAY ( MAX ( 'calendar'[date] ) ) <= D,
DATEADD ( MSD, N, DAY ),
DATEADD ( MSD, D, DAY )
),
DATEADD ( MSD, N, DAY )
)
VAR ED =
IF (
ISFILTERED ( 'calendar'[date] ),
MAX ( 'calendar'[date] ),
DATEADD ( MSD, D - 1, DAY )
)
VAR T =
DATESBETWEEN ( 'calendar'[date], SD, ED )
RETURN
CALCULATE ( 'fact'[total], T )
结果图


请关注
1、mtd中2017年1月(1月1日-1月31日),即蓝色单元格;
2、mtd2中2017年1月(1月1日-1月20日),即黄色单元格;
3、mtd2中2017年2月(1月21日-2月20日),即橙色单元格(颜色如果不是橙色也暂且叫做橙色吧);
4、2017年6月中ytd_1231、ytd_0630都是相等,即红色字体单元格;
5、2017年7月中ytd_1231、ytd_0630不相等,即
绿色单元格:datesytd第二参数中,ytd_1231按照12月31日为结算年末,
红色单元格:datesytd第二参数中,ytd_0630按照6月30日为结算年末。
4、总结
1、好像没啥总结的;
2、datesytd注意第二参数的使用,主要是结算或者财年使用;
3、特殊结算周期,根据业务特点创建DAX上下文即可;
by 焦棚子
110_Power Pivot特殊结算日期及财年日期的更多相关文章
- 一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表
1.日期函数表作用 经常使用Excel或者PowerBI,Power Pivot做报表,时间日期是一个重要的纬度,加上做一些钻取,时间日期函数表不可避免.所以今天就给大家分享一个自定义的做日期表的方法 ...
- [MSSQL]採用pivot函数实现动态行转列
环境要求:2005+ 在日常需求中常常会有行转列的事情需求处理.假设不是动态的行,那么我们能够採取case when 罗列处理. 在sql 2005曾经处理动态行或列的时候,通常採用拼接字符串的方法处 ...
- Sql2008的行列转换之行转列
今天在工作的时候遇到了行列转换的问题,记得去年有一段时间经常写,但是许久不用已经记不太得了.好记性不如烂笔头,忙完之后赶紧记录一下. 关键字:PIVOT(行转列),UNPIVOT(列转行) 先说说 P ...
- Oracle根据【日期】组,其他条件根据PIVOT行转列。使每个日期条件关联的其他数据只有一行。
select OPER_TIME, MICROPAY, REFUND from ( select trunc(oper_time) oper_time, class_name, sum(total_f ...
- 122_Power Pivot&Power BI不连续日期的日环比
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 这两天有朋友在交流,dax中使用时间智能函数写日环比,一个 dateadd 就可以了.但是有些业务不是每天都连续 ...
- 如何用Pivot实现行列转换
在Oracle中,如果要实现行列转换,较为常见的是用DECODE和CASE语句.对于简单的行列转行,DECODE和CASE语句尚能应付.在逻辑比较复杂,分组聚合较多的场景中,DECODE和CASE语句 ...
- 在Sqlserver下巧用行列转换日期的数据统计
在Sqlserver下巧用行列转换日期的数据统计 前言 在SQLSERVER 中有很多统计函数的基础语法,有使用Group By 或 partition by 后配合Sum,Count(*) 等用法. ...
- 中等难度SQL语句(存储过程,分页,拼接字段、游标,日期类型转换,动态行转列,视图)汇总
一.创建存储过程 if Exists(select name from sysobjects where NAME = 'sp1LoginUser' and type='P')drop procedu ...
- 每日学习心得:SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)
2013-8-20 1. SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析) 在实际的项目开发中有很多项目都会有报表模块,今天就通过一个小的SQL ...
随机推荐
- 前端性能优化(JavaScript篇)
正巧看到在送书,于是乎找了找自己博客上记录过的一些东西来及其无耻的蹭书了~~~ 小广告:更多内容可以看我的博客 优化循环 如果现在有个一个data[]数组,需要对其进行遍历,应当怎么做?最简单的代码是 ...
- 《深入理解ES6》笔记—— Promise与异步编程(11)
为什么要异步编程 我们在写前端代码时,经常会对dom做事件处理操作,比如点击.激活焦点.失去焦点等:再比如我们用ajax请求数据,使用回调函数获取返回值.这些都属于异步编程. 也许你已经大概知道Jav ...
- Vue3生命周期的理解
beforeCreate():在实例生成之前 created():在实例生成之后 beforeMount():在模板已经被编译成函数之后,组件内容被渲染到页面之前 mounted():在组件内容被渲染 ...
- hibernate数据源
Hibernate的描述文件可以是一个properties属性文件,也可以是一个xml文件.下面讲一下Hibernate.cfg.xml的配置.配置格式如下:1. 配置数据源 在Hibernate ...
- dotnet new 命令笔记
让dotnet new使用平台特定的目标,例如net6.0-windows10.0.19041.0 dotnet new console --name CallWinRTConsole --frame ...
- ubuntu修复找不到sudo命令
1.首先,您需要安装该sudo命令.你可以使用 apt 包管理器来做到这一点.您需要以有权安装软件包的用户身份运行此命令,例如root: apt-get install sudo 2.下一步是为您自己 ...
- Typecho文章设置永久链接
说明 想要给Typecho文章一个独立的url,或按照自己的格式来 这时候我们就要设置永久链接 Typecho设置文章永久链接 设置伪静态 伪静态设置要取决于是nginx还是apache,详情请参考& ...
- 论文解读(MCGC)《Multi-view Contrastive Graph Clustering》
论文信息 论文标题:Multi-view Contrastive Graph Clustering论文作者:Erlin Pan.Zhao Kang论文来源:2021, NeurIPS论文地址:down ...
- Java-GUI编程之处理位图
如果仅仅绘制一些简单的几何图形,程序的图形效果依然比较单调 . AWT 也允许在组件上绘制位图, Graphics 提供了 drawlmage() 方法用于绘制位图,该方法需要一个Image参数一一代 ...
- Android四大组件——Activity——Activity数据回传
既然可以传递数据给下一个Activity,自然也可以返回数据给上一个Activity.返回上一个Activity时只需要点击back键就好,并没有一个用于启动Activity的Intent来传递数据, ...