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

问题描述

我有一个 Power BI 视觉对象,如下所示。有3个矩阵。我有一个名为 Dates2 的 DateDimension(或)日历表。

enter image description here

我使用两种度量,一种是常规度量(称为“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 年只有两个月 - 1 月和 2 月,我不想将 2021 年的两个月与 2020 年的所有 12 个月进行比较。相反,我希望将 2021 年的两个月与相应的 2 个月进行比较2020 年。

基本上我需要 {(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 = IF (

                       (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