首页 > 解决方案 > DAX - 复杂滚动平均线

问题描述

以最简单的形式,我试图实现“活动资产”/“事件数量”的 12 个月滚动平均值。

所需的计算以 Excel 形式更容易解释:

Year    Month     |  Average # Equipment  | Total Incidents
2018    January            100                    6
2018    February           101                    8
2018    March              101                    7
.................        ........             ........

Calculation = SUM(C2:C14)/SUM(D2:D14)

相关 Power BI 数据位于两个表中 -“数据 - 资产”和“数据 - WO”。

每个事件都有一个“DateIssued”,每个资产都有一个“CommissionDate”和“DecommissionDate”。

我应该仅在相关日期介于委员会和退役日期之间时计算资产,并且只计算当前处于活动状态的资产的事件(在日期之间)。

以下是我迄今为止最接近的尝试。但是,它是在 365 天的时间范围内描绘的,而不是 12 个月。此外,它不会按照所需计算的要求对资产计数进行求和。

Calculation =
CALCULATE (
    IF (
        COUNT ( 'DateTable'[Date] ) >= 365,
        COUNTROWS ( 'Data - Assets' ) / COUNT ( 'Data - WO'[ID] )
    ),
    FILTER (
        ALLSELECTED ( 'DateTable'[Date] ),
        'DateTable'[Date]
            > ( MAX ( 'DateTable'[Date] ) - 365 )
            && 'DateTable'[Date] <= MAX ( 'DateTable'[Date] )
    ),
    FILTER (
        ALLSELECTED ( 'Data - Assets' ),
        (
            'Data - Assets'[CommissionDate] <= MAX ( DateTable[Date] )
                || ISBLANK ( 'Data - Assets'[CommissionDate] )
        )
            && (
                'Data - Assets'[DecommissionDate] >= MAX ( 'DateTable'[Date] )
                    || ISBLANK ( 'Data - Assets'[DecommissionDate] )
            )
    )
)

我在正确的轨道上吗?非常感谢 DAX 的新手和任何建议。

标签: statisticspowerbidax

解决方案


与其编写复杂的度量计算,我更喜欢拆分计算,以便更容易操作。您可以使用类似于以下的内容:

Count = IF(Data[CommissionDate]>=DATEADD(DateTable[Date],-12,MONTH)&&Data[DeCommissionDate]<=DATEADD(DateTable[Date]),1,0)
Assets1 = IF(Data[CommissionDate]>=DATEADD(DateTable[Date],-12,MONTH)&&Data[DeCommissionDate]<=DATEADD(DateTable[Date]),Data[Assets],0)
12MonthCalc = SUM(Data[Assets1])/SUM(Data[Count])

您可以用您的确切细节替换日期条件,您应该有解决方案。希望这可以帮助。


推荐阅读