## 1. distinctcount
不重复计数
## 2. medlan
中位数
## 3. 大单比例——统计多少金额占比
## 4. 多端数据不能直接调用1端的数据,需要中间一个唯一值
## 5. switch 函数
`switch('[客户名称], "广东", "北上广", "上海", "北上广", "北京", "北上广")`
或者是
`switch(true(), [客户省份]="广东"||[客户省份]="北京"||[客户省份]="上海", "北上广","非北上广")`
## 6. rept 函数——重复计数
`rept("北上广", 3)`
## 7. relatedtable 从多端到1端
比如与 countrows 配合使用,计算多端共有多少行:
`countrows(relatedtable('订单明细表'))`
## 8. ★★★★★lookupvalue函数
与 excel 中的vlookup类似
## 9. ★★★★★calculate 函数
可以搭配filter()函数 不能写在列上,而是写在度量值上。
> 条件是写死的,对切片器无效
## 10. divide 安全除法
运算速度快,并且把分母为0的情况直接排除,类似
`if(iserror())`
## 11. 时间报表
一般都有单独一个作为参照,对应从某一天开始的各个日期
可以用`month()`函数辅助,提取月份以后,按月排序。在“设计”里面,将表格标记为“日期报表”
> **也可以在Azure Market Place获取外部数据**
## 12. 值显示方式
加字段以后,用“值显示方式”点击“差异百分比”就可以同比或环比
> 或者用时间智能函数
## 13. 模型预测的准确性KPI
可用 KPI 数据来做度量值函数。部分数据符合钟型结构,即两边少,中间多。
## 14. 产品层次结构
从大类到小类,可避免报告结构被不知情的使用者拖拽。
在“关系视图”中,右击某个表格,即可创建。
> 一旦建立了层次结构,建议把层次结构外部的字段在客户端隐藏
## 15. 数据类别
同上 “powerpivot 选项” views 选项中,默认字段集设置后,双击就能按顺序排列。
插入图片:
1 人员照片:用字段类型=> 图像 url => 选择位置
2 表行为:会员id(设置行标识符); 会员姓名(保持唯一行),因会员名称中有重复名的现象。
## 16. 透视表 => 分析 => 集合
## 17. ★★★cubevalue 生成非数据透视表结构的报告
用于无法统一用数据筛选进行处理的情况。比如
产品分类中有服装、自行车;销售区域中有北京、上海。想查看北京地区的自行车销售情况,以及上海地区的服装销售情况。一般数据筛选无法分开筛选,除非弄两个数据透视表。
这种情况下可用cubevalue度量值解决。
直接在 excel 中写公式即可。
`cubevalue = ("This model", [产品].[分类].[All].[服装]", "[销售金额].[All].[……]", [地区].[All].[上海], 切片器_年份)`
- 上述一般通过度量值调动;
- 如果不写“切片器”,则切片器对其无效。
> 也可直接数据透视表 => 公式 => 生成Olap 即可复制黏贴
> cubemember 同理
## 18. 钻通
与 excel 数据透视表中双击生成一张表一个意思
需要注意的是钻通的结果可能只有前1000行,超过1000行的时候如何设置:
可在数据 => 连接 => thisworkbookdatemodel => 属性中设置
![](https://box.kancloud.cn/388287115674703bb157d0bae47057df_673x655.png)
## 19.表格中的Dax函数、链接回表
作用:有的dax 函数需要返回的是一张表,如果直接在度量值里面写,则会报错,提示`“该表达式引用多列,多列不能转换为标量值”`。意思就是返回的是一张表,无法在一个单元格内体现。
![](https://box.kancloud.cn/8d634476aab6ca6a9d9848611774756f_531x32.png)
将模型中的表格导出到 excel:
数据=>现有连接=>表格 选中想要的表,即可。
![](https://ws1.sinaimg.cn/large/006tNbRwgy1fudpcdc4nkj30gt0hldi6.jpg)
这里的表格都是带样式的表,可在“设计”中修改表名称。
![](https://ws2.sinaimg.cn/large/006tNbRwgy1fudpdlad14j30t304k3zy.jpg)
在导出的表中随意点击单元格,右击“表格=>编辑 DAX”,类型选择 DAX。输入`Evaluate`作为标记后,就可以输入 DAX 语句了。下图为最简单的语句。
![](https://box.kancloud.cn/4a5f12ab0a9e7b4e8ce4f2963f7e6c9b_371x220.png)
![](https://box.kancloud.cn/a09019ca4cc7ac27d3953f8c68e3414e_435x295.png)
> 可以用这种方法得到与以前数据透视表一样的内容,但更智能,因为链接回表以后,可以根据相关内容进行更新。
## 20. generate 笛卡尔积表
![](https://box.kancloud.cn/adf640eb62f09e4aa3b08f3f70ae7fbd_774x465.png)
推荐使用
`generate(summarize(), summarize())`的形式
## 21. summarize 函数
其实跟数据透视表差不多,甚至可以在不同表中调用不同列,只要这几个表是已经有关联的。
![](https://box.kancloud.cn/d4e3973cfd6634bcf44d8382da0cb869_664x324.png)
## 22. 高级聚合函数
其实功能与之前的函数一样,但是表达式不同,不用先加辅助列再进行求和,而是可以直接写。
![](https://box.kancloud.cn/949646ba00762bd8c2099c12cf7442e6_712x343.png)
## 23. 常用筛选器函数
- filter √
- values √
- TOPN √ `topn:= TOPN(3, '阶段评估', '阶段评估'[立项金额], ASC)` 第一个参数表示前3名,哪张表,哪一列,正序ASC还是逆序DESC
- all :但ALL 函数会强制所有行数据求和,无法进行切片(比如,A B C D四个种类的物品,共计20个,对A切片时,应该是A里面的3条记录相加为100%。但如果用all函数,则还是对20条记录加总求百分比,而不会只对A一类求百分比。此时可以用calculate函数,对应的列应选“产品分类”,而不是所有的“销售记录”)。
- allexcept 不要某一列
- allnonblankrow
![](https://box.kancloud.cn/004c8a761fe589527953f8786ee6c721_701x279.png)
## 24. 筛选上下文和行上下文
使用filter 和all 进行上下文交互
或者使用calculate all 进行上下文转换
## 24. SUMX + FILTER
两个表格有多列值,无法关联的时候,可以用这个组合得到想要的数据。
filter()第一个参数是说去哪个表格找(比如A表),第二个参数是说我现在这张表格(B 表)的哪个列与我要找的表格(A)的列对应,第三个参数是要返回搜索表格(A)的哪一列的值
如下例子可再结合related进行关联
![](https://box.kancloud.cn/b3f893cdb0ff1b01f874cf86c025a7e4_857x511.png)
对比下图。当无法关联关系的时候,用sumx + filter的形式不会出错,如果用一般的关系则会报错。
`=sumx(filter('阶段评估', '分院名称'[项目部门]='阶段评估'[项目部门]), '阶段评估'[合同总计])`
![](https://box.kancloud.cn/3f19a642062d2e930144b95a473b31f0_843x288.png)
![](https://box.kancloud.cn/5f6d874214ff2ff8a90c024ccb3e66c9_1100x473.png)
## 25. earlier 函数※※※
用来求累计值。解决了无法进 行 行计算的问题。
`=sumx(filter('产品销售表2',EARLIER('产品销售表2'[销售金额])<='产品销售表2'[销售金额]),'产品销售表2'[销售金额])`
意思就是:sumx 对 filter 表中的数据进行求和。filter这个表里面每一行值用 earlier 进行对比,如果是比自己本身小,那么就只显示自己的值,如果是比自己大或等于自己,那么就 把自己以及比自己大的数进行 sumx 求和,然后得出的值填入该行的数据中。
可以理解为:earlier 中的表,是实实在在的表,但 小于等于的这个表格,是 filter 生成的一个虚拟的表格。
完美解决 excel 中需要先排序,再下一格加上一格,无法操作的问题。
![](https://box.kancloud.cn/c30cacebd6957c9b46a510804f052764_934x412.png)
earlier函数与filter配合使用,可以排序
`=countrows(filter('产品销售表, earlier('产品销售表'[销售金额])<'产品销售表'[销售金额]))+1`
+1的意思是第一名没有比它自己大的,所以要加1。
## 26. 最常用函数:求和
- sumx + all
- calculate + all
- all 返回的是一张表
- sumx + filter
## 27. 时间函数——同比环比
![](https://box.kancloud.cn/d8bb144de1e3c8478574e75fc3fddd26_821x529.png)
YTD 年初至今累计
`YTD: = YTD()`
QTD 季度初至今累计
MTD 月初至今累计
YOY 去年同期——同比
MOM 与上月变动比——环比
TOTALYTD 年累计 = datesytd
TOTALQTD 季度累计 = datesqtd
TOTALMTD 月累计 = datesmtd
DATEADD 日期推移 = sameperiodlatsyear
PARALLELPERIOD 某一区间的总数
计算上一年度的销售额,可以用到dateadd函数
`上年度销售额: = calculate([销售金额],dateadd('日历年'[日期], -1, year))`
-1 的意思是往前,year的意思是,往前算一年,如果是算一个月份,就写`-1, month`