當前位置:編程學習大全網 - 編程語言 - PBI之模擬ABC 分析矩陣的建模(二)

PBI之模擬ABC 分析矩陣的建模(二)

1、任何圖表都需要有時間維度,否則圖表無意義(此案例沒有設置時間維度,佐羅老師失誤了。)

2、圖表兩個要素:1、元素(非運算字段、列、度量值);2、度量值;如果沒有,就用DAX生成;

3、為制作圖表,會用DAX生成新表,生成新表(table)不與?base table?建立聯系,而是通過?TREATAS?函數建立聯系,原因:不讓新表汙染原數據模型。

1、X軸為變量,變量分別為省份、行業、職業和產品四類,它們分屬於不同的維度表,如何將這四類維元素整合到壹起?? (佐羅老師:構建ABC?元素表?)

對於沒有的表、列、度量值,有且只有壹條路可以走,用DAX做出來 。

問題壹:如何將省份、行業、職業和產品四類元素整合到壹起?

答案: 把四個元素從不同的表中提出來,合成壹張表。

問題二:如何提出來和合成新表??

需要用到4個函數:?ADDCOLUMNS 、SELECTCOLUMNS、DISTINCT和?UNION?四個函數。

以下是這4個函數的功能:

1、DISTINCT(ColumnNameorTableExpr)?針對壹個列參數,返回由壹列組成的壹個表,列中包含不同(唯壹)值。或針對壹個表表達式參數,返回包含不同(唯壹)值組合的多個列。

? 參數? ColumnNameorTableExpr ?列名或表的表達式 ?參數性質:必填項

2、ADDCOLUMNS( table , name , expression )?返回具有 DAX 表達式指定的新列的表。

?參數?table :The table to which new columns to be add 參數性質:必填項 不可重復

?參數?name : the name of new colunms to be add ?參數性質:必填項 可重復

?參數?expression : the expression for the new columns to be add 參數性質:必填項 可重復

? 例如: ADDCOlLUMNS( '客戶表 ,"相貌" , "美麗" )?在客戶表中增加“相貌”列,新增列以“美麗”文本填充。

3、SELECTCOLUMNS()?返回具有從表中選擇的列以及 DAX 表達式指定的新列的表。

?參數?table :The table from? which? columns are? selected 參數性質:必填項 不可重復

?參數?name : the name of new colunms to be add 參數性質:必填項 可重復

?參數?expression : the expression for the new columns to be add ?參數性質:必填項 可重復

4、UNION(Table , ……)返回其列相匹配的兩個表格的聯合。

?參數 table : a table that? will participate? in the? union 參數性質:必填項 可重復

構建客戶職業表(其他表可以復制後,改變參數):

第壹步 VAR?客戶職業 =? DISTINCT ( '客戶表'[?職業] )?//?找出客戶有什麽不同的職業 ,返回只有壹個列的表。

第二步 VAR?客戶職業 =? ADDCOLUMNS(?DISTINCT ( '客戶表'[職業] ), "元素類型" , "客戶職業" )?

//?在?distint?返回表中,增加壹列名為"元素類型" ,內容"客戶職業",?"客戶職業"為表達式,如果再增加列,也依照"元素類型" , "客戶職業"樣式增加,為可復用。

第三步 VAR?客戶職業 =? SELECTCOLUMNS(?ADDCOLUMNS(?

? DISTINCT ( '客戶表'[職業] ),?

? "元素類型" ,?

? "客戶職業" ),

"元素名稱" , [職業] ,

// 對ADDCOLUMNS返回的表 選取列 職業列 取名 “元素名稱” [職業]為表達式,

"元素類型" , [元素類型] // 對ADDCOLUMNS返回的表選取列元素類型 取名 “元素類型”[元素類型]為表達式 ,此行為第二參數和第三參數的復用

? )

問題三:如何計算累計百分比?如何根據不同的類別正確累計百分比?

累計百分比=?不同類別的銷售額 /?總銷售額 * 100%?

分解: 1、總銷售額 :即無論外部環境上下文如何變化,?銷售額不受影響,是壹個絕對常量,首先想到ALL ()函數或是?REMOVEFILTERS()函數,清除環境上下文的篩選;

?DAX : 總銷售額 =?CALCULATE( sum('訂單[銷售額]) ,?ALL( 'ABC?元素表 ))

2、累計銷售額 :累計銷售額,壹定是壹個叠加的過程,需要用到叠加函數,到底是哪個函數?

如果沒有看到答案,我很難想到是用FILTER函數篩選而叠加!FILTER函數的第二參數為?Expression ,運用度量值進行篩選符合條件元素名稱,再進行加計匯總。?叠代函數的神奇之處就是會在表內的每壹行數據都會篩選壹遍,找到符合條件的行而形成子集,進行計算。遺憾的是我的腦力實在不夠,所以,只能就答案來解答案:

?VAR ? totalsale =?CALCULATE ('sum ( '訂單[銷售額] ) , ALL('ABC?元素表) )

//?計算銷售額的絕對值 ,用ALL函數做CALCULATE的篩選器時,清除環境上下文的影響,進行全集運算。

VAR ? currentevalue =? sum( '訂單[銷售額] )

//?指定視圖層(環境上下文)某壹類別的銷售額,就是當前行的銷售額。

VAR ? cumulativevalue = CALCULATE(?sum( '訂單[銷售額] ) , FILTER(?'ABC?元素表 ,?sum( '訂單[銷售額] ) >=?currentevalue ) )

//?這個是最難想的點:運用FILTER篩選器的叠加功能,在每壹個當前值的位置上,通過ABC?元素表中每壹個類別都進行壹次篩選,尋找表中每壹行的銷售額>=當前行的銷售額的行,將這些行篩選為壹張表(計算的子集),再按CALCULATE函數的第壹參數進行運算。

RETERN? DIVIDE (cumulativevalue ,?totalsale )

//?返回累計占總額的百分比。

未完待續…………

  • 上一篇:套接字[計算機網絡]
  • 下一篇:《仙境傳說RO守護永恒愛情》又添英雄職業【海拉】
  • copyright 2024編程學習大全網