PowerBI - EARLIER 函数

先查一下概念,Earlier 返回的是哪个值。

 

仍没太理解,先试一下。。

#1 - 计算LQ的互动人数
数据:

 实践1:

 实践2:

 从以上结果得出, 实践1的结果是正确的,也就说明Earlier 定位的是要计算的这一行的当前列的值,再用filter 返回的范围内的其他值与之做比较,计算能匹配上的行的数值。

sumx(
    FILTER(
        '维护情况by季度',
        '维护情况by季度'[编号] = EARLIER('维护情况by季度'[编号])
        && '维护情况by季度'[b_EN] = EARLIER('维护情况by季度'[b_EN])
        && '维护情况by季度'[年份季度] = EARLIER('维护情况by季度'[年份季度_LQ])
    ),
    '维护情况by季度'[互动人数]
)

#2 - 将多行按照编号合并到一行

方法一  Power Query 实现
 # 根据Code 将Code下的多个Name更新为一行

参考教程:https://blog.csdn.net/qq_18256185/article/details/107151849

  Step1 - 保留Code 列和 Name列,一个Code 有多个Name
  Step2 - 进入PQ编辑页面
  Step3 - 主页,分组依据 =  Code,列名 = 分组,操作 = 所有行,确定
  Step4 - 添加列 ,自定义列,插入 【分组】
  Step5 - 修改添加自定义列的函数
    原本是 = Table.AddColumn(分组的行, “自定义”, each [分组])
    修改成 = Table.AddColumn(分组的行, “自定义”, each Table.Column( [分组],“Name”))
  Step6 - 点击自定义列,点击“提取值”
  Step7 - 分隔符随便点
  Step8 - 主页 - 拆分列 - 按分隔符
  Step9 -  删除多余列,完成。


方法二  使用DAX新建列

 # 根据Code 将Code下的多个值更新为一个值。

VAR x = 
    FILTER(
        'Table', 
        'Table'[SAP Code] = EARLIER('Table'[SAP Code]))
RETURN
MAXX(
    x,
    'Table'[Forecasting Line])

 


#3 判断当前工作日是本月第几个工作日

数据:
  

 添加计算列:

本月工作日序号 = 
 if('D_Date'[Is_WorkDay] = 1,
    calculate(
        sum('D_Date'[Is_WorkDay]),
        FILTER(ALL(D_Date),'D_Date'[DATE]<=EARLIER(D_Date[DATE]) && 'D_Date'[本月第一天] = EARLIER('D_Date'[本月第一天]))
))

 

输出结果:(粗暴地将 'D_Date'[DATE] <= EARLIER(D_Date[DATE]) 理解为,EARLIER(D_Date[DATE])为当前 [DATE] 列每行的值,'D_Date'[DATE] <= EARLIER(D_Date[DATE] 表示遍历比当前每行小的所有日期值作为结果返回)

 

posted @ 2021-09-11 20:14  未必是小小  阅读(206)  评论(0编辑  收藏  举报