DAX / PowerBI Min/Max 日期并查找第二个最新日期

DAX / PowerBI Min/Max Date and finding the 2nd Latest Date

我第一次处理一个数据集,每次从数据源导出 运行 时都会附加 [Export_Date_&_Time]。图解:

ID         Export_Date_&_Time    250 more data elements/fields....
01A       01/01/2015 24:00:00      
02B       01/01/2015 24:00:00      
01A       12/12/2015 24:00:00     
02B       12/12/2015 24:00:00    

我正在使用 [Export_Date_&_Time] 值创建一系列度量。例如:

MAXDate = MAX(REF_Opportunites[Export_Date_&_Time])
MINDate = MIN(REF_Opportunites[Export_Date_&_Time])
AbsoluteMAXDate = CALCULATE(MAX(REF_Opportunites[Export_Date_&_Time]), ALL(REF_Opportunites))
AbsoluteMINDate = CALCULATE(MIN(REF_Opportunites[Export_Date_&_Time]), ALL(REF_Opportunites))

然后是一堆帮助我过滤视觉效果的专栏:

IsEarliestExportDate = IF(REF_Opportunites[Export_Date_&_Time]= [AbsoluteMINDate], "Earliest", "Later")
IsLatestExportDate = IF(REF_Opportunites[Export_Date_&_Time] = [AbsoluteMAXDate], "Latest", "Not Current")
IsEarliestandLatestExportDates = IF(REF_Opportunites[Export_Date_&_Time] = [AbsoluteMINDate] || REF_Opportunites[Export_Date_&_Time]= [AbsoluteMAXDate], "Yes", "No")

我有两个问题... 为什么如果我尝试在我的 "IsLatestExportDate" IF 语句中使用 [MaxDate](相对于 [AbsoluteMaxDate])我得不到相同的结果?使用 [Max Date],我列中的所有内容都会更改为 "Latest"?如果我想在使用 [Export_Date_&_Time] 字段的仪表板上安装 slicer/filter,我希望能够使用 [Max Date]。在这个场景中,如果我在切片器中选择除 [AbsoluteMaxDate] 之外的任何其他选项,它将使所有可视化呈现空白(假设 "IsLatestExportDate" 是 visual/page 级过滤器)。

我将如何着手创建一个 measure/column 以允许选择最大日期和最大日期之前的时间段...? (我在这里尝试使用 LATEST,但它给了我一个关于列中有重复日期值的错误)......

如果这里有更好的方法,我很想听听,我发现 DAX 中的日期和时间函数非常令人沮丧。此外,在您询问之前,[Export_Date_&_Time] 字段不会以任何预定义的时间间隔生成,因此我认为任何时间智能功能都没有用。

Q1. 如果您在 Export_Date_&_Time 上使用切片器并过滤小于或大于 [AbsoluteMaxDate] 的日期,您将得到 Not Current IsLatestExportDate 列中的行。即使你使用 [MAXDate] 度量,也像这样:

IsLatestExportDate = IF([MAXDate] = [AbsoluteMAXDate], "Latest", "Not Current")

你会得到相同的结果,因为 [MAXDate] 是使用从切片器过滤的行计算的,在这种情况下,行与 [AbsoluteMAXDate] 不同,所以你当然会得到总是 Not Current.

Q2. 为了将上一个日期设为最大日期,我创建了一个列和一个使用该列的度量。

PreviousColumn = 
CALCULATE (
    LASTDATE ( REF_Opportunites[Export_Date_&_Time] ),
    FILTER (
        REF_Opportunites,
        [Export_Date_&_Time] < EARLIER ( REF_Opportunites[Export_Date_&_Time] )
    )
)

然后只需创建一个度量值来计算最大日期之前的最新值。

LatestPrevious =
LASTDATE ( REF_Opportunites[Previous] )

让我知道这是否对您有帮助,或者至少能使您朝着正确的方向前进。

Q1:为什么在 [IsLatestExportDate] 内部使用 [MAXDate] 总是 return 最新的原因是由计算列上下文引起的。当使用[MAXDate]度量时,它是在当前计算列上下文字段下计算的,它只拥有table的当前行,所以在MAXDate Measure中执行MAX()函数时,它总是与单个值本身,这就是为什么它总是 return "Lastest".

要解决此问题,可以在 [IsLatestExportDate] 计算列中使用 MAX(REF_Oppportunities[Export_Date_&_Time])(而不是包含此公式的度量)。但是,当您过滤或切片数据集时,(据我所知)无法根据过滤当前应用的过滤器重新评估计算列;因此,"Latest" 只会识别整个列的真实 MAX()。

问题 2:由于 LASTDATE() 函数无法处理具有重复日期的列,我创建了以下计算列来查找第二个最近的导出日期:

Is2ndLatestExportDate = IF(REF_Opportunites[Export_Date_&_Time] = CALCULATE(MAX(REF_Opportunites[Export_Date_&_Time]), filter(REF_Opportunites, REF_Opportunites[Export_Date_&_Time] <> MAX(REF_Opportunites[Export_Date_&_Time]))), "2nd Latest", "Not 2nd Latest")