DAX / PowerBI最低/最高日期并找到第二个最新日期

时间:2016-08-03 14:47:37

标签: powerbi dax

我第一次使用每次从数据源运行导出时追加[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")

我有2个问题...... 如果我尝试在我的" IsLatestExportDate"中使用[MaxDate](vs [AbsoluteMaxDate]),为什么呢? IF声明,我没有得到相同的结果?使用[最大日期],我的列中的所有内容都更改为"最新"?如果我想在使用[Export_Date_& _Time]字段的仪表板上安装切片器/过滤器,我希望能够使用[Max Date]。在这个场景中,如果我在切片器中选择除[AbsoluteMaxDate]之外的任何其他选项,它会将所有可视化渲染为空白(假设" IsLatestExportDate"是可视/页面级过滤器)。

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

如果有更好的方法,我很乐意听到它,我在DAX中发现日期和时间功能非常令人沮丧。此外,在您要求[Export_Date_& _Time]字段未在任何预定义的时间间隔生成之前,我不相信任何时间智能功能都可以使用。

2 个答案:

答案 0 :(得分:0)

Q1。如果您在Export_Date_&_Time上使用切片器并过滤日期小于或大于[AbsoluteMaxDate],则Not Current的每一行都会获得IsLatestExportDate 1}}列。即使您使用[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] )

enter image description here

请告诉我这是否有助于您或至少让您朝着正确的方向前进。

答案 1 :(得分:0)

Q1:在[IsLatestExportDate]中使用[MAXDate]总是返回最新值的原因是由Calculated列上下文引起的。使用[MAXDate]测量时,它是在当前计算的列上下文字段下计算的,该字段仅拥有表的当前行,因此在MAXDate测量中执行​​MAX()函数时,它总是与单个值本身进行比较,这就是为什么它总是回归&#34;最快&#34;。

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

Q2:因为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")