powerbi笔记
lookupvalue
related
relatedtable
度量值: sum
calculate引擎 =>基础表和业务表会有不一样的表现
多条件calculate和筛选表
度量值独立表 ->处理度量值比较方便
高级筛选器filter : 逐行扫描并输出一个新的矩阵.可以套在其他公式里.
filter: 从唯一值表可以筛选(第1参数必须是唯一值的表). 但是从多值的业务表就无法筛选. 这个时候就需要用到人工造表:
values人工造表: values提取唯一值.
度量值天生具有筛选功能, 即天生带有隐含的calculate函数
新建列是行上下文, 每行都是一个全部汇总数, 如果要实现每行针对当前值的汇总(类似度量值), 则再套个calculate即可.
all 清除度量值的筛选, 返回: 清除筛选后的表格或者列. 有点像qlik里的TOTAL关键字.
(calculate筛选, all取消筛选)
allexcept
allselected
当ALL函数参数为表时, 忽略所有的筛选条件, 无论是该图表内还是外的切片器.
(内部筛选: 拉个新矩阵表, 每行的主键相当于是内部筛选, 外部筛选: 独立建立一个筛选切片器)
All, allexcept, allselected可以组合使用, 对部分排除部分选择
当all参数为列时, 忽略该列的筛选, 其他图表字段或者外部筛选对其产生作用.
all的参数, 行和列必须在同一个矩阵表里. 所以要做的时候一般先 lookupvalue先把需要的信息抓过来.
allnoblankrow 返回表中除空白行以外的所有行.
聚合函数,
sum, distinctcount, countrows,
counta, countblank, product, min, max,
average: 计算范围里的所有数字和/所有数字个数
averagea: 计算范围内所有数字和/所有数字+字符个数
迭代函数
sumx
calculate
calculate(sumx([xxx])) =>sumx汇总, 在calculate添加筛选功能
averageX,maxX,minX,countX,countaX,productX.... 与filter一样都是行上下文函数
earlier函数, 错行处理.
values, distinct区别: 参照完整性不匹配 => 销售表上有的数据, 基础表上没有.(卖了A004, 但是A004在基础表没有)
条件判断: iferror, if,
switch (非常重要, 避免if嵌套地域); switch(true(), 1,2,3,4, )这个用法非常巧妙,1,2,3,4可以构造多条件.
安全除法: divide
isinscope =>本节例子有点特别, 后续复习.
iscrossfiltered: 判断是否受到交叉筛选影响. 需要进行判断的表或者列; => 判断某一个表中是否含有筛选字段.
isfiltered: 是否受到直接筛选影响. 只能针对列. => 判断某一个字段是否有筛选关系
==>案例里有个特殊的筛选方式.
roundup, weeknum, year, month, day, date,
创建表: biao = addcolumns()
firstnonblank, lastnonblank.
进阶版函数
hasonfilter: 当指定的列有且仅有一个由直接筛选产生的值时,返回true. 特别注意: !!!参数必须使用物理列,不支持返回列的表达式.
hasonvalue: 通常和if搭配, 判断某列是否只有一行数据. 淘汰了, 有新的 selectedvalue.
selectedvalue = if + hasonvalue, selectedvalue更简洁,
场景: 选中某列, 则输出某列的计算结果. (有一个值时返回该值, 否则返回空; 只能选择一个值才会返回)
人工建表: datatable()
转换函数
currency, datetime, convert, date, datevalue, int, mround, timevalue, value, trunc, round,
mround(数, 哪个数的倍数), 比如 mround(1.3, 0.2) 按0.2的倍数一直取到刚刚超过1.3,即1.4. mround(-10,-3)=-9 ; 特别注意,小数位数必须一致, 符号也必须一致.
format格式函数
concatenate文本函数: 将2个字符串连接.
exact: 判断字符是否相同
find:不支持通配符, 区分大小写
search: 支持通配符, 不区分大小写
截取函数: left, right, mid, len
fixed: 数字转字符
大小写转换: lower, upper,
删除空格: trim删除前后, 不删除中间.
重复字符串: rept
替换函数: substitute按字符替换, replace按位置替换
isblank
iserror
islogical
isnontext
isnumber
istext
isempty
取余 mod
[重要] 分组和连接函数
summarizecolumns(为空不显示)是一个表函数, 不支持度量值, 比summarize(为空依然显示)好用.
summarizecolumns = summarize + addcolumns
summarizecolumns: 分组,筛选后去重, 多列全重复才去除.分组后聚合.
addmissingitems: 就是一个开关, 显示summarizecolumns里为空的数字
summarize = summarizecolumns + addmissingitems
交叉 intersect, 除去except, 全部 union => 非常重要, 对2个表的联合处理.
笛卡尔积: crossjoin
查找匹配函数
contains: 多条件查找
contains只检查精确匹配, 如果需要更复杂的筛选, 必须用calculatetable, filter或者混合使用,不过contains允许组合多列作为条件.
contains 可以套个 calculate来作为列, 单独contains不能作为列.
treatas: 无关系情况下查找匹配的最佳选择: 通过第一参数筛选第二参数, 把什么当作什么.
Row: 建立一个单行表.
var: 申明变量,
containsstring : 检查是否包含字符串(不找位置), 支持通配符, 不区分大小写.
containsstringexact: 检查是否包含字符串(不找位置), 不支持通配符, 区分大小写.
rankx: 排名函数
绝对排名用all, 相对排名用 allselected
TOPN: 提取满足条件的前N条记录.
concatenatex: 多字符连接在一起再排名.