Power BI сравнить даты - PullRequest
       12

Power BI сравнить даты

0 голосов
/ 13 февраля 2019

Я новичок в Power BI и мне нужна ваша помощь.

У меня есть 3 столбца:

  1. date1
  2. reviseDate
  3. Shipped_Date

Мне нужно сравнить столбец reviseDate с shipped_date, если он <> или =.

Как это сделать, если столбец reviseDate пуст,для сравнения с колонкой Date1 необходимо обратиться к колонке shipped_Date?

Desired output

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Попробуйте это как вычисляемый столбец:

Status = 
VAR DueDate =
    IF(ISBLANK(Table1[Revised]), [Date1], [Revised])
RETURN
    SWITCH(
        TRUE(),
        ISBLANK(DueDate), BLANK(),
        DueDate = Table1[Shipped_Date], "On Time",
        DueDate < Table1[Shipped_Date], "Late",
        DueDate > Table1[Shipped_Date], "Early"
    )

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

SWITCH(TRUE(),...) является полезная конструкция , которая возвращает указанный результат для первого условия в списке, которое оценивается как TRUE().

0 голосов
/ 13 февраля 2019

Вы можете определить новый вычисляемый столбец следующим образом:

Status = IF (AND(ISBLANK(Table1[Date1]); ISBLANK(Table1[ReviseDate])); BLANK();
    IF (Table1[Shipped_Date] = IF(ISBLANK(Table1[ReviseDate]); Table1[Date1]; Table1[ReviseDate]); "On Time";
        IF (Table1[Shipped_Date] > IF(ISBLANK(Table1[ReviseDate]); Table1[Date1]; Table1[ReviseDate]); "Late";
            IF (Table1[Shipped_Date] < IF(ISBLANK(Table1[ReviseDate]); Table1[Date1]; Table1[ReviseDate]); "Early"; BLANK())
        )
    )
)

Выражение IF(ISBLANK(Table1[ReviseDate]); Table1[Date1]; Table1[ReviseDate]) вернет значение Date1, если ReviseDate пусто.Затем необходимо сравнить эту контрольную дату с Shipped_Date и вернуть соответствующий статус.

enter image description here

Если вы хотите создать столбец состояния с помощью Power Query Editor, вы можете использовать Add Column -> Conditional Column.Создайте один вспомогательный столбец с именем ReferenceDate или чем-то еще, который будет вычислять дату, которую нам нужно использовать для сравнения:

enter image description here

Затем добавьте фактический Status столбец, подобный следующему:

enter image description here

Код М будет выглядеть следующим образом (данные встроены в него):

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("bY7RCQAhDEN36bcUUxTrLOL+aygenCkI/WjymtAxxKp2tQyXJHuunGnDFmFj+HldAQqUGzC89nPlsdYZuiITrL98PRRqQUkYCyqZCw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Date1 = _t, ReviseDate = _t, Shipped_Date = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date1", type date}, {"ReviseDate", type date}, {"Shipped_Date", type date}}),
    #"Added Conditional Column" = Table.AddColumn(#"Changed Type", "ReferenceDate", each if [ReviseDate] = null then [Date1] else [ReviseDate]),
    #"Added Conditional Column1" = Table.AddColumn(#"Added Conditional Column", "Status", each if [ReferenceDate] = null then "" else if [ReferenceDate] = [Shipped_Date] then "On Time" else if [ReferenceDate] < [Shipped_Date] then "Late" else if [ReferenceDate] > [Shipped_Date] then "Early" else null),
    Status = #"Added Conditional Column1"{2}[Status]
in
    Status

В зависимости от источника данных, вы даже можете изменить запрос и получить это значение из базы данных (например, с помощью запроса Transact-SQL, если источником данных является SQL Server).

...