Рассчитать последнюю дату для каждого ID с DAX - PullRequest
1 голос
/ 24 июня 2019

У меня есть набор данных в Power BI, например:

ID      FirstDate    LastDate
214443  07/06/2016  07/06/2017
214443  09/11/2016  09/11/2017
214443  28/09/2018  11/06/2019
214443  31/05/2019  11/06/2019

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

Вывод должен быть таким:

ID      FirstDate   LastDate    FirstDate2  LastDate2
214443  07/06/2016  07/06/2017      
214443  09/11/2016  09/11/2017  07/06/2016  07/06/2017
214443  28/09/2018  11/06/2019  09/11/2016  09/11/2017
214443  31/05/2019  11/06/2019  28/09/2018  11/06/2019

Спасибо !!

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Я начал с таких данных, как

enter image description here

А затем добавил столбец индекса с помощью редактора запросов

enter image description here

И затем создал столбец для проверки количества раз, когда один идентификатор присутствует: -

Number of ID's Present = COUNTROWS(FILTER('MyTable', 
     (EARLIER('MyTable'[ID]) = 'MyTable'[ID])))

А затем хотел узнать начальный индекскаждый ID, чтобы упростить его: -

Starting Index = CALCULATE(MIN(MyTable[Index]),FILTER('MyTable', 
     (EARLIER('MyTable'[ID]) = 'MyTable'[ID])))

И теперь вы можете делать то, что вы ищете, с помощью нескольких простых способов,

First Date 2 = 
    Var NumberofIDsPresent = MyTable[Number of ID's Present]
    Var StartingIndex = MyTable[Starting Index]
    Var CurrentIndex = MyTable[Index]

    Var Only_OneTime_ID_Present = IF(OR(NumberofIDsPresent = 1,CurrentIndex = StartingIndex),1,0)
    Var Multiple_Times_ID_Present = CALCULATE(MIN(MyTable[First Date]),FILTER(MyTable, MyTable[Index] = CurrentIndex - 1))
    var result = IF(Only_OneTime_ID_Present = 1, BLANK(),Multiple_Times_ID_Present)
    return result


Last Date 2 = 
    Var NumberofIDsPresent = MyTable[Number of ID's Present]
    Var StartingIndex = MyTable[Starting Index]
    Var CurrentIndex = MyTable[Index]

    Var Only_OneTime_ID_Present = IF(OR(NumberofIDsPresent = 1,CurrentIndex = StartingIndex),1,0)
    Var Multiple_Times_ID_Present = CALCULATE(MIN(MyTable[Last Date]),FILTER(MyTable, MyTable[Index] = CurrentIndex - 1))
    var result = IF(Only_OneTime_ID_Present = 1, BLANK(),Multiple_Times_ID_Present)
    return result

Теперь, мои данные выглядят как-товот так:

enter image description here

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

0 голосов
/ 24 июня 2019

Максимум для столбца FirstDate принимается только с учетом строк с совпадающими ID и датами до даты текущей строки.

Previous Date =
CALCULATE (
    MAX ( Table1[FirstDate] ),
    FILTER (
        ALLEXCEPT ( Table1, Table1[ID] ),
        Table1[FirstDate] < EARLIER ( Table1[FirstDate] )
    )
)
...