Средние значения на конец периода - столбец против итогов строки - PullRequest
0 голосов
/ 03 января 2019

У меня есть требование вычислять средние значения для соглашений для среднего потребления на конец любого заданного момента времени.Если у них нет записи в моей таблице Agreement Data за последний день периода, они должны отображаться как пробелы.Среднее значение должно быть средним для всех соглашений на данный конечный момент времени.Иллюстрация токового выхода с указанием желаемого выхода.В приведенном ниже примере соглашения 1 и 2 закончились до 31 декабря 2015 и 2016 гг. Соответственно.

enter image description here

Желаемый результат:

enter image description here

У DAX есть значение ниже, и я думаю, что получаю, что итоговые значения строки показывают значение LASTNONBLANK(), однако для Соглашений 1 и 2 они в идеале показывали быкак пусто, так и пусто, поскольку они не активны по состоянию на 31 декабря 2016 года:

Average Consumption:=
CALCULATE(
    AVERAGEX('Agreement Data','Agreement Data'[ConsumptionPercentage])
    ,LASTNONBLANK('Calendar'[ActualDate]
            ,CALCULATE(
                AVERAGEX('Agreement Data','Agreement Data'[ConsumptionPercentage])
                )
            )
    )

Любые идеи с благодарностью приняты.Отношение от Agreement Data до Calendar находится в столбце DateKey в обеих таблицах.

Я также добавил бы, что годы также являются частью года / месяца / дняиерархия вдоль вершины, поэтому я бы хотел, чтобы этот принцип работал, если бы я углубился в дневной уровень.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Для потомков мой окончательный код закончился, как показано ниже.Значение LASTNONBLANK() все еще было необходимо, чтобы получить средние значения только в последний день любого отрезанного периода, но было гибридом между моим первоначальным предложением и отмеченным ответом.Это предполагает, что ваша таблица Календаря заходит так далеко, как вам нужно:

Average Consumption:=
IF(MAX('Agreement Data'[DateKey]) < MAX('Calendar'[DateKey]),
BLANK(),
CALCULATE(
    AVERAGEX('Agreement Data','Agreement Data'[ConsumptionPercentage])
    ,LASTNONBLANK('Calendar'[ActualDate]
                ,CALCULATE(
                    AVERAGEX('Agreement Data','Agreement Data'[ConsumptionPercentage])
                        )
                    )
    )
)
0 голосов
/ 03 января 2019

Я думаю, вы можете сделать это немного проще. Попробуйте что-то вроде этого:

Average Consumption :=
IF( LASTDATE( 'Agreement Data'[DateKey] ) < LASTDATE( 'Calendar'[DateKey] ),
    BLANK(),
    AVERAGE( 'Agreement Data'[ConsumptionPercentage] )
)

Если ваши столбцы представляют собой иерархию таблицы календаря, то последняя дата для любого периода, к которому вы пробурены, должна быть LASTDATE('Calendar'[DateKey]), тогда как последняя дата транзакции для этого периода - LASTDATE('Agreement Data'[DateKey]). Если они не совпадают, бросьте пробел, в противном случае усредните проценты.


Редактировать: В ответ на ваш комментарий ...

Если DateKey не является форматом даты, то вы, вероятно, можете использовать MAX вместо LASTDATE или использовать столбец в формате даты.

...