Средние расчеты по годам (исключая NULLS) - PullRequest
0 голосов
/ 22 мая 2019

Я хочу подсчитать средние оценки компаний за последние 5 лет.Исключая NULLS (однако включая 0) в расчетах.Ниже приведены данные:

Company    Year Score
Company A   2014    1
Company B   2014    1
Company C   2014    
Company D   2014    0
Company A   2015    1
Company B   2015    0
Company C   2015    
Company D   2015    0
Company A   2016    1
Company B   2016    1
Company C   2016    1
Company D   2016    1
Company A   2017    1
Company B   2017    1
Company C   2017    1
Company D   2017    1
Company A   2018    1
Company B   2018    1
Company C   2018    1
Company D   2018    1

По существу, если вы видите, что компании C и D выглядят одинаково.Тем не менее, оценка за 2014 и 2015 годы для компании C равна нулю, в отличие от компании D, для которой она равна 0.

Среднее значение для C составляет 100% (3/3), тогда как для компании D оно составляет 60% (3/5)

Я мог бы идеально достичь результатов для компаний, в которых отсутствуют NULL, используя следующий код:

_COL_Liquidity Score 2 = 
    VAR MaxSelectedYear = 'Data'[Year]
    VAR OnePriorYear = MaxSelectedYear - 1
    VAR TwoPriorYear = MaxSelectedYear - 2
    VAR ThreePriorYear = MaxSelectedYear - 3
    VAR FourPriorYear = MaxSelectedYear - 4
    VAR MinYearInData = MINX(ALL('Data'), 'Raw Data'[Year])
    RETURN
        DIVIDE(
            CALCULATE(SUM('Data'[Score]), FILTER(ALLEXCEPT('Data',Company), 'Raw Data'[Year] = MaxSelectedYear))
            +
            CALCULATE(SUM('Data'[Score]), FILTER(ALLEXCEPT('Data',Company), 'Raw Data'[Year] = OnePriorYear))
            +
            CALCULATE(SUM('Data'[Score]), FILTER(ALLEXCEPT('Data',Company), 'Raw Data'[Year] = TwoPriorYear))
            +
            CALCULATE(SUM('Data'[Score]), FILTER(ALLEXCEPT('Data',Company), 'Raw Data'[Year] = ThreePriorYear))
            +
            CALCULATE(SUM('Data'[Score]), FILTER(ALLEXCEPT('Data',Company), 'Raw Data'[Year] = FourPriorYear))
            ,
            IF(OnePriorYear < MinYearInData, 1, 
                IF(TwoPriorYear < MinYearInData,2,
                    IF(ThreePriorYear < MinYearInData, 3,
                        IF(FourPriorYear < MinYearInData, 4,5)
                    )
                )
            ),
            BLANK()
        )

Ожидаемый результат:

Company A - 100%
Company B - 80%
Company C - 100%
Company D - 60%
...