我是Power BI的新手,需要您的帮助。
我有3列,分别是:
如果列reviseDate
与shipped_date
是<>或=,则需要进行比较。
如果reviseDate
列为空白,该如何操作才能与Date1
列进行比较?
答案 0 :(得分:1)
您可以像这样定义新的calculated column:
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
进行比较,然后返回适当的状态即可。
如果要使用Power Query Editor创建状态列,可以使用Add Column
-> Conditional Column
。编写一个名为ReferenceDate
之类的辅助列,以计算我们需要用于比较的日期:
然后添加实际的Status
列,如下所示:
M代码如下所示(数据已嵌入其中):
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
根据您的数据源,您甚至可以修改查询并从数据库中检索该值(例如,如果您的数据源是SQL Server,则使用Transact-SQL查询)。
答案 1 :(得分:1)
尝试将其作为计算列:
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(),...)
是一个useful construction,它返回列表中第一个条件的指定结果,该条件的结果为TRUE()
。