Microsoft Power BI - DAX 时间智能测量 - 更改上下文以反映适当的百分比变化;非年初至今措施

Microsoft Power BI - DAX Time Intelligence measure - change context to reflect proper % change; non-YTD measures

我有一个 Power BI 视觉对象,如下所示。有3个矩阵。我有一个名为 Dates2.

的 DateDimension(或)日历 table

我使用了两种措施,一种是常规措施(称为'Count'),另一种是措施的平行时期比较(称为'Count_PreviousYear')。我对后者使用 SAMEPERIODLASTYEAR DAX 函数。

1)

Count = COUNTA(TableX[ColumnY])

--测量名称'Count'--

2)

Count_PreviousYear = CALCULATE
  (
    [Count],
    SAMEPERIODLASTYEAR(Dates2[Date])
  )

--测量名称'Count_PreviousYear'

--此度量使用时间智能函数 - SAMEPERIODLASTYEAR--

'Count' 和 'Count_PreviousYear'(显然)都是 不是 YTD(YearToDate)值。

跨时期百分比变化的第三个度量计算如下:

3)

PercentageChange = IF(

    ISBLANK([Count]) || ISBLANK([Count_PreviousYear]),

    BLANK(),

    (([Count] - [Count_PreviousYear])/[Count])

)

请忽略关键字用作度量名称; 我使用名称 'Count' 只是为了清楚起见;在我的实际报告中, 我有专有名词

百分比变化度量工作正常,但有一个问题:

对于从 2020 年到 2021 年的周期变化,即在最后一个矩阵的第三行(对于行值 2021),总计(即百分比变化值)不合适。

我需要将 -737.21% 替换为 - 23.98%。

这是因为,我需要计算 2020 年的总数,只需将 1 月和 2 月的值相加,即 428 + 430 = 858。(不是 5794,它适用于所有 12 个月) .

由于2021年只有两个月-一月和二月,我不想将2021年的两个月与2020年的所有12个月进行比较。相反,我想将2021年的两个月与相应的两个月进行比较2020 年第 2 个月。

基本上我需要 {(692-858)/692} * 100 = -23.98%

目前,我看到 {(692-5794)/692} * 100 = -737.21%

有人可以帮我实现这个吗?

Count Previous Year =
IF (
    HASONEVALUE ( Dates2[Month] ),
    IF (
        [Count] <> BLANK (),
        CALCULATE ( [Count], SAMEPERIODLASTYEAR ( Dates2[Date] ) )
    ),
    IF (
        HASONEVALUE ( Dates2[Year] ),
        CALCULATE (
            [Count],
            DATESBETWEEN (
                Dates2[Date],
                EDATE ( MIN ( Dates2[Date] ), -12 ),
                EOMONTH ( MAX ( [FactTable[Date] ), -12 )
            )
        )
    )
)

    

Count_PreviousYear = 如果(

                       (HASONEVALUE(Dates2[Year]) = TRUE && HASONEVALUE(Dates2[MonthName]) = TRUE),

                        
                        CALCULATE
                             (

                               [Count],

                               SAMEPERIODLASTYEAR(Dates2[Date])

                             ),

                        IF (

                            (HASONEVALUE(Dates2[Year]) = TRUE && HASONEVALUE(Dates2[MonthName]) = FALSE),

                            CALCULATE (

                                       [Count],

                                       DATESBETWEEN (
                                                    Dates2[Date],
                                                    EDATE (MIN(Dates2[Date]), -12),
                                                    EOMONTH (MAX(SourceData[Date]), -12)
                                                  )

                                      ),

                             BLANK()

                           )

                       )

!Output obtained as desired]1