一、時間智能
1.1 日歷表要求
- 向模型中指定一張日歷表
- 包含至少一列是日期格式,且包含需要計算的日期
- 周、月份、年份可自由添加
- 日期列不能重復,但可以不連續,如果最小單位為月,可以只設置每月1號
標記為日期表
1.2常用時間計算指標
縮寫 | 英文 | 解釋 |
YTD | Year To Date | 年初至今的累積 |
QTD | Quarter To Date | 季度初至今的累積 |
MTD | Month To Date | 月初至今的累積 |
YOY | Year On Year | 同比去年 |
MOM | Month On Month | 環比上月 |
1.3常用時間智能函數
函數 | 說明 | 類似函數 |
TOTALYTD | 年累積 | DATESYTD |
TOTALQTD | 季度累積 | DATESQTD |
TOTAMTD | 月累積 | DATESMTD |
DATEADD | 日期推移 | SAMEPERIODLASTYEAR |
PARALLELPERIOD | 某一區間的總數 |
求同環比常與calculate搭配使用
二、鏈接回表
2.1 創建鏈接回表
2.2 Summarize
Summarize(表格,匯總列1,..."名稱1",表達式1)
數據匯總功能,相當於生成一張透視表,就是SQL中的group by
SELECT C1(匯總列1),C2(匯總列2),sum(C3)(表達式1) AS 'N1'(名稱1),COUNT(C4)(表達式2)as 'N2'(名稱2)
FROM T1(表格)
2.3Generate
generate(T1,T2)
生成笛卡爾積表
三、高級DAX函數
3.1高級聚合函數
函數 | 說明 |
SUMX | 求和 |
AVERAGEX | 求平均值 |
MAXX | 求最大值 |
MINX | 求最小值 |
COUNTX | 數值格式的計數 |
COUNTAX | 所有格式的計數 |
MEDIENX | 求中位數 |
RANKX | 排名 |
SUMX(Table,expression)
sumx(t1,單價*數量):表格t1中求銷售額(單價*數量),銷售額=單價1*數量1+...+單價n*數量n
3.2常用篩選器函數
函數 | 說明 |
FILTER | 按條件篩選數據 |
VALUES | 返回列或者表去重后的結果 |
TOPN | 返回前幾名的數據 |
ALL | 所有數據 |
ALLEXCEPT | 所有數據除了 |
ALLNONBLANKROW | 返回非空白的數據 |
FILTER(表,FilterExperssion)
ALLEXCEPT(表,ColumnName1,...)
FILTER實現對行的篩選,ALLEXCEPT實現對列的篩選。
VALUSE(TabelNameOrColumnName)等於只按一列進行SUMMARIZE
TOPN(N Value,表,[OrderBy_Expression1],[Order1]...)。在表中選擇前N項,按OrderBy_Expression排序,排序方式為Order(ASC,DESC)
SUMX經常與FILTER一起使用,能夠實現無關系的數據獲取(可能需要搭配RELATED使用)。
3.3earlier函數
與SUMX,FILTER連用。可以創建一個輔助列。
四、計值與上下文
4.1篩選上下文與行上下文
上下文:context、語境、環境。
篩選上下文:行區域、列區域、篩選、切片器。
行上下文:增加輔助列:銷售額 = 單價 * 數量。是一行一行計算的。
4.2使用filter、all進行上下文交互
當使用filter是,會將行上下文帶入到透視中,也會受篩選上下文的控制。
當使用all時,將強制取消篩選上下文。
當使用calculate:當外部的上下文與內部上下文沖突時,以內部為准,強制替換外部的上下文。
表達式 | 相同 | 區別 | |
SUMX | SUMX(Table,expression) | 都可以被篩選 | expression不同。比如求金額。sumx(table,金額)而calculate為calculate(sum(金額),filter) |
CALCULATE | CALCULATE(expression,filter) | 如果篩選條件不是filter中的限制條件,則結果相同 | 當外部的上下文與內部上下文沖突時,以內部為准,強制替換外部的上下文。 |
建議使用CALCULATE。
4.2使用CALCULATE進行上下文轉換(占比)
主要函數:CALCULATE、FILTER、ALL。
占比:占比:=DIVIDE(SUM([金額]),CALCULATE(SUM([金額]),ALL('產品分類'[產品分類])))
也可以寫成
占比:占比:=DIVIDE(SUM([金額]),CALCULATE(SUM([金額]),ALL('產品分類')))
五、多對多關系
首先要建立聯系。
USERELATIONSHIP(ColumnName1,ColumnName2)
ColumnName1一般為多段,ColumnName2一般為為一端。
六、常用分析
6.1、占比分析
主要是82分析和721分析。
用到的函數SUMX、FILTER、EARILIER、DIVIDE、SUM、IF
思路:
- 將占比列進行累加,並求出累計占比;
- 用IF函數判斷判斷占比所屬的范圍。
6.2、占比分析
用到的函數IF、HASONEVALUE、VALUSE。
思路:
- 創建鏈接表,添加到模型,方便更改匯率。
- 書寫函數。
6.3分組分析,可以看成是占比分析的模糊版
用到的函數VALUS、CALCULATE、FILTER、
思路:
- 將占比列進行累加,並求出累計占比;
- 用IF函數判斷判斷占比所屬的范圍。
6.4排名分析
將排名列進行排名,然后進行分析。
用到的函數:ALLSELECT、RANKX、HASONEVALUES(去除匯總列排名)
思路:
- 用RANKX進行排名
6.5排名分析進階
6.4排名分析
將排名列進行排名,然后進行分析。
用到的函數:ALLSELECT、RANKX、HASONEVALUES(去除匯總列排名)
思路:
- 用RANKX進行排名