## 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 => 屬性中設置

## 19.表格中的Dax函數、鏈接回表
作用:有的dax 函數需要返回的是一張表,如果直接在度量值里面寫,則會報錯,提示`“該表達式引用多列,多列不能轉換為標量值”`。意思就是返回的是一張表,無法在一個單元格內體現。

將模型中的表格導出到 excel:
數據=>現有連接=>表格 選中想要的表,即可。

這里的表格都是帶樣式的表,可在“設計”中修改表名稱。

在導出的表中隨意點擊單元格,右擊“表格=>編輯 DAX”,類型選擇 DAX。輸入`Evaluate`作為標記后,就可以輸入 DAX 語句了。下圖為最簡單的語句。


> 可以用這種方法得到與以前數據透視表一樣的內容,但更智能,因為鏈接回表以后,可以根據相關內容進行更新。
## 20. generate 笛卡爾積表

推薦使用
`generate(summarize(), summarize())`的形式
## 21. summarize 函數
其實跟數據透視表差不多,甚至可以在不同表中調用不同列,只要這幾個表是已經有關聯的。

## 22. 高級聚合函數
其實功能與之前的函數一樣,但是表達式不同,不用先加輔助列再進行求和,而是可以直接寫。

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

## 24. 篩選上下文和行上下文
使用filter 和all 進行上下文交互
或者使用calculate all 進行上下文轉換
## 24. SUMX + FILTER
兩個表格有多列值,無法關聯的時候,可以用這個組合得到想要的數據。
filter()第一個參數是說去哪個表格找(比如A表),第二個參數是說我現在這張表格(B 表)的哪個列與我要找的表格(A)的列對應,第三個參數是要返回搜索表格(A)的哪一列的值
如下例子可再結合related進行關聯

對比下圖。當無法關聯關系的時候,用sumx + filter的形式不會出錯,如果用一般的關系則會報錯。
`=sumx(filter('階段評估', '分院名稱'[項目部門]='階段評估'[項目部門]), '階段評估'[合同總計])`


## 25. earlier 函數※※※
用來求累計值。解決了無法進 行 行計算的問題。
`=sumx(filter('產品銷售表2',EARLIER('產品銷售表2'[銷售金額])<='產品銷售表2'[銷售金額]),'產品銷售表2'[銷售金額])`
意思就是:sumx 對 filter 表中的數據進行求和。filter這個表里面每一行值用 earlier 進行對比,如果是比自己本身小,那么就只顯示自己的值,如果是比自己大或等于自己,那么就 把自己以及比自己大的數進行 sumx 求和,然后得出的值填入該行的數據中。
可以理解為:earlier 中的表,是實實在在的表,但 小于等于的這個表格,是 filter 生成的一個虛擬的表格。
完美解決 excel 中需要先排序,再下一格加上一格,無法操作的問題。

earlier函數與filter配合使用,可以排序
`=countrows(filter('產品銷售表, earlier('產品銷售表'[銷售金額])<'產品銷售表'[銷售金額]))+1`
+1的意思是第一名沒有比它自己大的,所以要加1。
## 26. 最常用函數:求和
- sumx + all
- calculate + all
- all 返回的是一張表
- sumx + filter
## 27. 時間函數——同比環比

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`