在DAX中利用MAX或MAXX函数获取最新数据

MAX函数和MAXX函数是一对具有相同运算意义的聚合函数和迭代函数。

MAX函数的定义如下:

  • 函数语法 1:
MAX(<column>)
  • 函数语法 2:
MAX(<expression1>, <expression2>)
  • 参数:
    • column(列): 需要进行求和运算的数字列或者日期列,该列可以是原始列,也可是计算列。
    • expression(表达式):任何可以返回唯一数字或者日期的表达式。
    • 返回值:数字或日期。
    • 说明:如果参数列中没有数字或者日期,MAX函数的返回值是空。包含非数字类型数据,则返回指是空。当对两个表达式的返回值进行比较时,如果某一个表达式的返回值为空,则当做数字0进行比较。如果两个表达式的计算结果都为空,则MAX返回空。

MAX函数的运算过程以及特点与SUM函数一样,都不受行上下文影响。如果想让MAX函数依据行上下文内容进行计算,就需要再其外围添加CALCULATE函数将行上下转换成筛选上下文,或者在度量值中使用MAX函数。

MAXX函数定义:

  • 函数语法:
MAXX(<table>, <expression>)
  • 参数:
    • table(表):第二部分表达式需要计算的表单。该表单可以是一个原始数据表单,也可以是一个通过函数计算过后生成的表单。
    • expression(表达式):对第一部分表单中每一行进行计算的表达式。
    • 返回值:数字或者日期。
    • 说明:MAXX函数会忽略对空值,逻辑值或者文本值的比较。

MAXX函数的运算过程和特点与SUMX一样,绝大多数情况下都在度量值当中进行使用。如果想让MAXX的计算结果受到行上下文印象,可以通过对参数表单添加过滤条件来实现。

MAX函数或MAXX函数除了运用在对数字进行比较的场景中外,其最常见的应用实例是按照某一特定要求获取最新数据。例如下图是一张客户购买产品的记录信息。由于购买时间不同,客户购买某种商品所花的价格也不尽相同。如果想知道客户最近一次购买某种产品是该产品的单价就可以利用MAX来实现。
这里写图片描述
创建一个Measure利用MAX函数获取客户最近一次消费日期:

Latest_Date = MAX(Customer[Date])

创建另外一个Measure利用最后一次消费时间获取与之对应的产品单价

LatestPrice = LOOKUPVALUE(Customer[Unit Price],Customer[Date],MAX(Customer[Date]))

这里写图片描述

能否不创建上一个LatestPrice Measure直接获得与最新销售日期对应的产品单价呢?可以试一下,去掉LatestPrice列,直接添加Unit Price。
这里写图片描述
从PowerBI的返回结果看,Unit Price做了一个汇总计算,将Customer和Product值相同的数据的Unit Price进行了求和运算。之所以有这样的结果是因为当前的Unit Price是原始计算列,添加到表中只能做简单的汇总运算,无法根据当前筛选上下文设定进行动态计算。因此,直接添加Unit Price是无法满足要求的。

猜你喜欢

转载自blog.csdn.net/jessica_seiya/article/details/80934342