## 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`