Power BI比较日期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Power BI比较日期相关的知识,希望对你有一定的参考价值。

我是功能BI的新手,需要你的帮助。

我有3列是:

  1. DATE1
  2. reviseDate
  3. Shipped_Date

我需要比较列reviseDateshipped_date,如果它是<>或=。

我怎么做,如果reviseDate列是空白的,必须参考Date1列与shipped_Date列进行比较?

Desired output

答案

您可以像这样定义一个新的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进行比较并返回适当的状态。

enter image description here

如果要使用Power Query Editor创建状态列,可以使用Add Column - > Conditional Column。制作一个名为ReferenceDate的辅助列,它将计算我们需要用于比较的日期:

enter image description here

然后像这样添加实际的Status列:

enter image description here

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查询)。

另一答案

尝试将其作为计算列:

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()的第一个条件的指定结果。

以上是关于Power BI比较日期的主要内容,如果未能解决你的问题,请参考以下文章

Power Bi 中如何实现跨表的大小比较筛选

在 Power Bi 中使用 Power Query M 的上一周日期

一起学微软Power BI系列-使用技巧自定义PowerBI时间日期表

power bi如何抓取连续的分秒

power bi HR 数据分析

使用Power BI计算随时间变化的百分比