Как изменить выражение DAX, чтобы заполнить пробелы в итоговом счете Power BI - PullRequest
0 голосов
/ 25 января 2019

Цель - заполнить пробелы предыдущими значениями.

Благодарю @Alexis Olson Мне удалось достичь этого за год разработки.Сообщение можно найти здесь:

Как заполнить пробелы в Запуск Total Matrix Power BI

Но теперь мне нужно то же самое для development month, и это где язастрял.

Что я сделал:

- создана расчетная таблица 'Dev Months', которая возвращает все месяцы разработки.- пытался изменить выражение, манипулируя Дем Месяц

     Accident Month Losses1 = 
VAR CurrDevMonth = MAX('Dev Months'[DevMonth])
VAR MaxMonth = CALCULATE(MAX(fact_Losses[AccidentMonth]), ALLSELECTED(fact_Losses))
VAR CurentMonth = MAX(fact_Losses[AccidentMonth])
VAR CurentYear = MAX(fact_Losses[AccidentYear])
RETURN


IF(
    MONTH(
        EOMONTH(
            DATE(CurentYear - 1,12,31),
            CurrDevMonth)
     ) > MaxMonth,
    BLANK(),
    CALCULATE( 
        SUM(fact_Losses[PaymentAmount]),
        FILTER(ALL(fact_Losses[DevMonth]), fact_Losses[DevMonth] <= CurrDevMonth)
    )
)

- пытался использовать AccidentDate и разбить его на Year и Month - пытался преобразовать Year-Month в DATE По-прежнему безуспешно

Данные выглядят так:

![![enter image description here

Когда я использую матрицу для отображения данных, у меня есть пробелы.

Столбцы: месяц-год,

Строки: месяцы разработки.Может быть больше 12 с момента его разработки с течением времени.

Значения: Промежуточный итог

Если есть пробел (без потерь), то он должен быть заполнен предыдущим числом, исходя из месяца разработки.

Эксплуатация выражения Total Dax:

Accident Month Losses = 

    CALCULATE( 
    [Total Loss],
    FILTER(ALL(fact_Losses[DevMonth]),fact_Losses[DevMonth] <= MAX(fact_Losses[DevMonth])
    ))

enter image description here

Должно быть так:

enter image description here

.pbix можно найти здесь: https://www.dropbox.com/s/zujp6p9lbyqfez7/Test_LossTriangle.pbix?dl=0

Пожалуйста, помогите

1 Ответ

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

Таким образом, проблема заключается в том, что MAX(fact_Losses[DevMonth]) является нулевым для этих отсутствующих ячеек, потому что нет соответствующих транзакций.

Вы можете исправить мой фильтр удаления контекста, навязанный dim_Date.

Accident Month Losses =
VAR CurrDevMonth =
    CALCULATE ( MAX ( fact_Losses[DevMonth] ), ALL ( dim_Date ) )
VAR RunningLoss =
    CALCULATE (
        [Total Loss],
        FILTER ( ALL ( fact_Losses[DevMonth] ), fact_Losses[DevMonth] <= CurrDevMonth )
    )
RETURN
    RunningLoss

Все, что я сделал до сих пор, это поместил MAX в CALCULATE, чтобы я мог удалить контекст фильтра dim_Date и поместить вещи в переменные, чтобы легче понять, что происходит.

Проблема теперь в том, что вся таблица заполнена, а не является верхней треугольной.Чтобы исправить это, мы можем сказать, чтобы он возвращал пробел, если текущий месяц, перенесенный на DevMonth количество месяцев, больше максимального месяца.

Accident Month Losses =
VAR CurrDevMonth =
    CALCULATE ( MAX ( fact_Losses[DevMonth] ), ALL ( dim_Date ) )
VAR RunningLoss =
    CALCULATE (
        [Total Loss],
        FILTER ( ALL ( fact_Losses[DevMonth] ), fact_Losses[DevMonth] <= CurrDevMonth )
    )
VAR MaxYearMonth =
    CALCULATE (
        EOMONTH ( MAX ( fact_Losses[AccidentDate] ), 0 ),
        ALLSELECTED ( fact_Losses )
    )
VAR CurrYearMonth = MAX ( dim_Date[Date] )

RETURN
    IF (
        EOMONTH ( CurrYearMonth, CurrDevMonth - 1 ) > MaxYearMonth,
        BLANK (),
        RunningLoss
    )

Это также удалит некоторые промежуточные итоги,но вы можете получить их обратно, если добавите пару условий к своему условному условию IF.

    IF (
        EOMONTH ( CurrYearMonth, CurrDevMonth - 1 ) > MaxYearMonth
            && ISFILTERED( dim_Date[Year Month] )
            && ISFILTERED( fact_Losses[DevMonth] ),
        BLANK (),
        RunningLoss
    )
...