Расчетный столбец с текущими значениями строк и предыдущими датами в Power BI (DAX) - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь получить вычисляемый столбец (не меру), который получает сумму столбца на основе значений в текущей строке этой таблицы для дат, которые на 1 месяц отстают от даты в текущей строке. В моей таблице есть даты, которые относятся только к 1-му дню каждого месяца. Других дней в месяце нет. Я задаю вопрос о DAX; Тем не менее, у меня нет проблем с реализацией на M Language в Power Query (на самом деле, вероятно, я бы предпочел), если есть решение и таким способом.

Я смог заставить меру работать, используя что-то вроде этого ...

CALCULATE(SUM(AMT), DATEADD(DATECOLUMN, -1, MONTH))

Но я бы хотел стать новым столбцом.

Предположим, таблица выглядит примерно так ...

A    B        C          D     AMT
6    BAC456   5/1/2019   TEST  25
2    EPS123   4/1/2019   TEST  45
2    EPS123   3/1/2019   TEST  65
6    BAC456   4/1/2019   TEST  43
6    BAC456   4/1/2019   TEST  88
7    GRE123   4/1/2019   TEST  90
9    BAC456   4/1/2019   TEST  43

Я бы хотел, чтобы в этой таблице был еще один столбец, в котором первая строка была бы:

A    B         C          D      AMT   NEWCOL
6    BAC456    5/1/2019   TEST   25    131

Второй ряд будет:

A    B         C          D      AMT   NEWCOL
2    EPS123    4/1/2019   TEST   45    65

и т.д ..

В тех случаях, когда столбец месяца является первым месяцем во всей таблице, NEWCOL будет 0

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Чтобы получить 131, я предполагаю, что вам требуется совпадение для обоих столбцов A и B.

NewCol =
CALCULATE (
    SUM ( Table1[AMT] ),
    ALLEXCEPT ( Table1, Table1[A], Table1[B] ),
    PREVIOUSMONTH ( Table1[C] )
)

. Суммирует столбец AMT, сохраняя контекст строкистолбцов A и B и указывает предыдущий месяц в качестве фильтра для C.Обратите внимание, что это возвращает пробел для строк, которые не имеют предыдущего месяца.Если вы предпочитаете 0, добавьте + 0 после последней закрывающей скобки.


Если PREVIOUSMONTH не работает, попробуйте следующее:

NewCol =
CALCULATE (
    SUM ( Table1[AMT] ),
    ALLEXCEPT ( Table1, Table1[A], Table1[B] ),
    Table1[C] = EOMONTH ( EARLIER( Table1[C] ), -2 ) + 1
)

Для date = 5/1/2019, EOMONTH ( date, -2 ) возвращает 3/31/2019.Добавьте один день, чтобы получить 4/1/2019.

1 голос
/ 01 июля 2019

Чтобы легко добиться этого в вычисляемом столбце, вам нужно что-то вроде этого перед написанием окончательного DAX.

Month Num = MONTH(MyTable[C])
Month Diff = DATEDIFF(MyTable[C],MAX(MyTable[C]),MONTH)

И теперь, когда вы определили эти различия в месяцах и номера месяцев, вы можете написать DAX следующим образом -

Amount - New Column = 
Var selectedValue_B = MyTable[B]
Var SelectedValue_MonthDiff = MyTable[Month Diff]
Var out1 = CALCULATE(SUM(MyTable[AMT]), FILTER(ALL(MyTable), MyTable[Month Diff] = SelectedValue_MonthDiff+1 && MyTable[B] = selectedValue_B)) + 0
return out1

Это сделает мою таблицу похожей на

enter image description here

Я использовал Var (переменные) в своей формуле, чтобы помочь вам понять, что происходит внутри формулы.

Пожалуйста, примите ответ, если он решит вашу проблему.

...