前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DAX 系列】PowerBI 日期表模型 - 支持财年与运营月运营周

【DAX 系列】PowerBI 日期表模型 - 支持财年与运营月运营周

作者头像
BI佐罗
发布2020-02-26 11:45:32
2.7K0
发布2020-02-26 11:45:32
举报
文章被收录于专栏:PowerBI战友联盟PowerBI战友联盟

首先,在使用本文的内容之前,请必须理解我们之前发布的日期表模型,但在实际企业环境中,我们肯定面对更复杂的场景,尤其是大型规范企业,有自己的标准,例如:财年,运营月,运营周。

于是,我们需要一张更牛的日期表,例如:

您可点击上述图片以便放大查看。

概念说明

非专业解释,但不影响本模型的正确计算。

财年

我国,一个财年是从每年的一月一日到十二月三十一日;

国际,有国家是从每年的六月一日到第二年的五月三十一日,以及从每年的九月一日到第二年的八月三十一日;

美国,政府的财年是从十月一日到九月三十日,但美国很多企业的财年是从七月一日到六月三十日。

至少说明,每个财年截止日期与自然年可能是不同的。

例如:如果某个企业的财年日期是 0630,则20190701到20200630是2020财年,或19/20财年。

例如:奥巴马向国会提交2011财年预算指出:报告预测2010年的财政赤字将达到创纪录的1.56万亿元;预计2011财年的赤字仍高达1.27万亿美元。这里的就是始于2010年10月1日、终于2011年9月30日的2011财经年度预算。

运营月截止日

由于运营的需要,一个月的月初或月末需要开会总结或做计划,这样就导致一个统计周期可能不是按照自然月,而是一个自定义的数字,如果每月25日开始到次月24日结束为一个运营月。

运营周截止日

由于运营的需要,一个周的周初或周末需要开会总结或做计划,这样就导致一个统计周期可能不是按照自然周,而是一个自定义的数字,如果每周5日开始到次周4日结束为一个运营周。

自然日期从属的区间

计算

通常,我们面对如下需求:

给定一个日期:

  • 返回该日期的上个运营周总销售额
  • 返回该日期的当前运营月总销售额
  • 返回该日期的上个完整财年销售额

日期表模板

以下直接给出日期表模板,直接使用:(限于篇幅,会员视频提供更多讲解)

代码语言:javascript
复制
Model.DatesTemplate =

VAR BeginDate   = MINX( {

    MIN( '订单'[订单日期] ) ,   // 【配置】根据实际修改
    MIN( '订单'[发货日期] )     // 【配置】根据实际修改

} , [Value] )

VAR EndDate     = MAXX( {

    MAX( '订单'[订单日期] ) ,   // 【配置】根据实际修改
    MAX( '订单'[发货日期] )     // 【配置】根据实际修改

} , [Value] )

VAR vFiscalDate             = "1231" // 文本"1231" 设置 "0630" 表示 6月30日

VAR vOperateEndDayInMonth   = 31 // 数字31 设置 1 ... 31

VAR vOperateEndDayInWeek    = 7  // 数字7 设置 1 ... 7

VAR vDateLine =

    CALENDAR(
        DATE( YEAR( BeginDate ) - IF( vFiscalDate <>"1231" , 1 )  ,   1  ,    1  ) ,
        DATE( YEAR( EndDate )   + IF( vFiscalDate <>"1231" , 1 )  ,   12 ,    31 )
    )

VAR vBeginDate = MINX( vDateLine , [Date] )

VAR vCalendar =
ADDCOLUMNS(
    vDateLine ,
    "索引" , VALUE( [Date] - vBeginDate ) ,
    "全局周序号" ,  INT( ( VALUE( [Date] - vBeginDate ) + 7 - WEEKDAY( [Date] , 2 ) ) / 7 ) ,
    "年序号" , YEAR( [Date] ) ,
    "年名称" , "Y" & YEAR( [Date] ) ,
    "季序号" , VALUE( FORMAT( [Date] , "Q" ) ) ,
    "季名称" , "Q" & FORMAT( [Date] , "Q" ) ,
    "年季序号" , YEAR( [Date] ) * 10 + QUARTER( [Date] ) ,
    "月序号" , MONTH( [Date] ) ,
    "月名称(英文)" , FORMAT( [Date] , "mmm" ),
    "月名称" , MONTH( [Date] ) & "月",
    "年月序号" , YEAR( [Date] ) * 100 + MONTH( [Date] ) ,
    "周序号" , WEEKNUM( [Date] , 2 ) ,
    "年周序号" , YEAR( [Date] ) * 100 + WEEKNUM( [Date] , 2 ) ,
    "月第几日" , DAY( [Date] ) ,
    "周第几日" , WEEKDAY( [Date] , 2 ),
    "星期几" , RIGHT( FORMAT( [Date] , "aaa" ) , 1 ),
    "年第几日" , VALUE( FORMAT( [Date] , "y" ) )
)

VAR vFiscalMonth = IF( LEN( vFiscalDate ) = 4 , VALUE( LEFT( vFiscalDate , 2 ) ) , ERROR( "财务日期必须是4位文本,如:0630表示6月30日" ) )
VAR vFiscalDay   = VALUE( RIGHT( vFiscalDate , 2 ) )

VAR vCalendarExtend =
ADDCOLUMNS( vCalendar ,
    "财务年序号" ,
         VAR vFiscalEndDatePY = DATE( [年序号], vFiscalMonth , vFiscalDay )
         RETURN IF( [Date] > vFiscalEndDatePY  , [年序号] + 1 , [年序号] )  ,

    "运营年月序号" ,
        IF( [月第几日] > vOperateEndDayInMonth  , YEAR( EOMONTH( [Date] , 1 ) ) * 100 + MONTH( EOMONTH( [Date] , 1 ) ) , [年月序号] )
        ,

    "运营周序号" ,
        IF( [周第几日] > vOperateEndDayInWeek  , [全局周序号] + 1 , [全局周序号] )
)

VAR vCalendarExtend2 =
ADDCOLUMNS( vCalendarExtend ,
    "财务年名称" , "FY" & RIGHT( [财务年序号] - 1 , 2 ) & RIGHT( [财务年序号] , 2 ),
    "上个财务年序号" , [财务年序号] - 1 ,
    "上个运营年月序号" , IF( MOD( [运营年月序号] , 10 ) > 1 , [运营年月序号] - 1 , ( VALUE( LEFT( [运营年月序号] & "" , 4 ) ) - 1 ) * 100 + 12 ) ,
    "上个运营周序号" , [运营周序号] - 1
)

RETURN vCalendarExtend2

没错,直接复制以上内容并在 PowerBI 中粘贴即可新建一个日期表。当然需要注意:在使用本文的内容之前,请必须理解我们之前发布的日期表模型

后续

通常,用户可能需要查看最近运营月或运营周的KPI,也就得到如下通用需求:

如果用户选择了某时间点,就按该时间点计算;否则,如果用户没有做选择,则按照最新日期计算相关内容。

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

本文分享自 PowerBI战友联盟 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念说明
    • 财年
      • 运营月截止日
        • 运营周截止日
        • 自然日期从属的区间
        • 计算
        • 日期表模板
        • 后续
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档