• Power BI


    参考教程:

    https://www.jianshu.com/p/723dc3988fea
    https://zhuanlan.zhihu.com/p/88528732


    一,累计开业至今

    1历史至今 累计收入 = 
    CALCULATE(
    SUM('订单表'[销售额]),
    FILTER(
    ALL('日期表'),
    '日期表'[日期]<=MAX('日期表'[日期])))  //用MAX函数获取当前上下文的日期;然后返回小于等于当前日期的所有销售额的合计
    
    2历史至今 累计收入 优化 = 
    IF(
    MIN('日期表'[日期])<=[订单最大日期],
    CALCULATE(
    SUM('订单表'[销售额]),
    FILTER(
    ALL('日期表'),
    '日期表'[日期]<=MAX('日期表'[日期]))))    //大于最后一个订单日期的无须计算,因为结果并不会发生变化
    
    3历史至今 平均订单销售 = 
    IF(
    MIN('日期表'[日期])<=[订单最大日期],
    CALCULATE(
    AVERAGE('订单表'[销售额]),
    FILTER(
    ALL('日期表'),
    '日期表'[日期]<=MAX('日期表'[日期]))))

    二,本期至今

    #年度至今(YTD)
    [YTD Sales] := CALCULATE ( [Sales Amount], DATESYTD('Date'[Date] ) )
    
    以上表达式等价于:
    [YTD Sales]:=TOTALYTD([Sales Amount],'Date'[Date])
    
    #季度至今(QTD)
    [QTD Sales] := CALCULATE ( [Sales Amount], DATESQTD('Date'[Date] ) )
    
    以上表达式等价于:
    [QTD Sales]:=TOTALQTD([Sales Amount],'Date'[Date])
    
    #月度至今(MTD)
    [MTD Sales] := CALCULATE ( [Sales Amount], DATESMTD('Date'[Date] ) )
    
    以上表达式等价于:
    [MTD Sales]:=TOTALMTD([Sales Amount],'Date'[Date])
    
    #本周至今(WTD)
    [WTD] = 
    CALCULATE(
        [业务指标],
        FILTER(
            ALL('日期'),
            '日期'[Yearweek] = SELECTEDVALUE('日期'[yearweek]) 
            && '日期'[Date] <= SELECTEDVALUE('日期'[date]) )) 

    三,上期同期

    #上年同期PY
    PY= CALCULATE([SalesAmount],DATEADD('Date'[Date],-1,Year))
    
        以上表达式等价于#1[PY YTD Sales] := CALCULATE ( [Sales Amount], SAMEPERIODLASTYEAR ( DATESYTD ( 'Date'[Date] ) ) )
    
        等价于#2[PY YTD Sales] := CALCULATE ( [Sales Amount], DATESYTD ( SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) )
    
         等价于#3[YTD Sales] := CALCULATE ( [Sales Amount], DATESYTD('Date'[Date] ) )
      [PY YTD Sales] := CALCULATE ( [YTD Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )
    
        等价于#4[PY Sales] := CALCULATE ( [Sales Amount], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )  
      [PY YTD Sales] := CALCULATE ( [PY Sales], DATESYTD ( 'Date'[Date] ) )
    
    #上季同期PQ
    PQ= CALCULATE([SalesAmount],DATEADD('Date'[Date],-1,Quarter))
    
    #上月同期PM
    PM=CALCULATE([SalesAmount],DATEADD('Date'[Date],-1,Month))
    
    #上周同期PW(上周同日,七日前)
    PW= CALCULATE([SalesAmount],DATEADD('Date'[Date],-7,day))
    
    #计算任意期间的上一期
    1基础度量值:
    本期收入 = SUM('订单表'[销售额])
    2上期收入:
    VAR DateStart = MIN('Date'[Day_Date])   //当前期间的开始日期
    VAR DateEnd = MAX('Date'[Day_Date])    //当前期间的结束日期
    VAR DateRangeLength = DATEDIFF(DateStart,DateEnd,DAY)    //当前期间的天数
    VAR PreDateEnd = DateStart -1  //上期的结束日期
    VAR PreDateStart = PreDateEnd - DateRangeLength   //上期的开始日期
    VAR PreDareRange = DATESBETWEEN('Date'[Day_Date],PreDateStart,PreDateEnd)    //上个期间范围
    RETURN
        CALCULATE([本期收入],PreDareRange)

    四,上期全部

    #上年全部PYT(Previous Year Total)
    PYT= CALCULATE([SalesAmount],PARALLELPERIOD('Date'[Date],-1,Year))
    
    #上季全部(Previous Year Total)
    PQT= CALCULATE([SalesAmount],PARALLELPERIOD('Date'[Date],-1,Quarter))
    
    #上月全部(Previous Year Total)
    PYT= CALCULATE([SalesAmount],PARALLELPERIOD('Date'[Date],-1,Month))
    
    #上周全部(Previous Week Total)
    PWT = 
    IF(
        SELECTEDVALUE('DATE'[WEEKOFYEAR]) =1
        ||
        CALCULATE(
            COUNTROWS('DATE'),
            FILTER(ALL('DATE'),'DATE'[YEARWEEK] = SELECTEDVALUE('DATE'[YEARWEEK])-1)
        )<7,
        BLANK(),
        CALCULATE(
            [SALESAMOUNT],
            FILTER(ALL('DATE'),'DATE'[YEARWEEK] = SELECTEDVALUE('DATE'[YEARWEEK])-1))

    五,去年

    #去年同期
    #计算去年同期利润(精确至天)
    利润.新.YTD.PY.ByClaculateColumn=
    CALCULATE( [利润.新], 
         CALCULATETABLE( SAMEPERIODLASTYEAR ( '日期表'[日期] ), '日期表'[大于最后订单日期] = TRUE ))
    
    #计算去年的年度至今利润(精确至月)
    利润.新.PY.ByMeasure=
    VAR LastOrderDate =CALCULATE ( MAX ( '订单表.新'[订单日期] ), ALL ( '订单表.新' ) )
    VAR FirstDayInSelection =MIN ( '日期表'[日期] )
    VAR ShowData = ( FirstDayInSelection <= LastOrderDate )
    VAR Result =IF ( ShowData, CALCULATE ( [利润.新], SAMEPERIODLASTYEAR ( '日期表'[日期] ) ) )
    RETURN Result
    
    等价于:
    利润.新.PY.ByMeasure.Correct=
    VAR LastOrderDate =CALCULATE ( MAX ( '订单表.新'[订单日期] ), ALL ( '订单表.新' ) )
    VAR CurrentDates =FILTER ( VALUES ( '日期表'[日期] ), '日期表'[日期] <= LastOrderDate )
    VAR Result =CALCULATE ( [利润.新], SAMEPERIODLASTYEAR ( CurrentDates ) )
    RETURN Result
    
    #去年本季LY_QTD
    CALCULATE(
            [本季至今(QTD)],
            SAMEPERIODLASTYEAR('D_DATE'[DAY_DATE]))
    
    #去年本月LY_MTD
    CALCULATE(
            [本月至今(MTD)],
            SAMEPERIODLASTYEAR('D_DATE'[DAY_DATE]))
    
    #去年本周LY_WTD
    CALCULATE(
            [本周至今(WTD)],
            SAMEPERIODLASTYEAR('D_DATE'[DAY_DATE]))

    注:以上只是个公式汇总,未全部验证过。大概是这么个套路,应用时需要根据具体的数据和切片器做调整。


     实战 1 - 计算历史月份和将来月份的汇总值
    当前月份为202104,将历史月份(202101 - 202104)标为YTD,剩余月份(202105 - 202112 )标为YTG;对应去年历史(202001 - 202004)标为LY_YTD,去年剩余(202005 - 202012)标为LY_YTG

    注:取当前日期  = NOW()  , 取去年同期 = EDATE(NOW(),-12)
    ##DAX公式
    Tag =
    VAR current_yearmonth = VALUE(FORMAT(NOW(),"YYYYMM"))
    VAR lastyearmonth = VALUE(FORMAT(EDATE(NOW(),-12),"YYYYMM"))
    VAR current_year = VALUE(YEAR(NOW()))
    VAR lastyear = VALUE(YEAR(EDATE(NOW(),-12)))
    Return
    Switch(TRUE(),
    'YearMonth'[Year] = current_year && 'YearMonth'[YearMontNo] < current_yearmonth,"YTD",
    'YearMonth'[Year] = current_year && 'YearMonth'[YearMontNo] >= current_yearmonth,"YTG",
    'YearMonth'[Year] = lastyear && 'YearMonth'[YearMontNo] < lastyearmonth,"LY_YTD",
    'YearMonth'[Year] = lastyear && 'YearMonth'[YearMontNo] >= lastyearmonth,"LY_YTG"
    )

     实战 2  - 用Fiscal Month做维度时,计算值不对
    解决:参考财年计算,加上财年结束日期 - https://view.inews.qq.com/a/20210119A04WZG00 

     

     实战3 - 计算LY_MTD没值,日期表与事实表用Date_ID 关联
    解决:将Date 表标记为日期表,标记为日期表可以自动移除来自日期表其他列的筛选器,这种特性非常重要。
    参考标记日期标的作用:https://www.powerbigeek.com/mark-as-date-table/

  • 相关阅读:
    锁,你知多少呢?
    成长于我
    js write google广告
    项目三边六拍
    IT新人培养计划
    网站变灰色 代码
    职业人生
    ASP.NET 4 新特性之一二
    .net 例子
    A Better sp_who2 using DMVs (sp_who3)
  • 原文地址:https://www.cnblogs.com/xiaopc/p/14452158.html
Copyright © 2020-2023  润新知