DAX 一般用于在PP中建模棠众,以時間為應用單元,對月日年季度不斷操作说庭,達到數(shù)據(jù)分析的目的然磷。可以百度其真正的應用場景刊驴。在實際應用之前最好是先創(chuàng)建一張日期格式表,并于要分析的數(shù)據(jù)源表進行關聯(lián),即創(chuàng)建對應的關系
先將excel中的數(shù)據(jù)添加到數(shù)據(jù)模型捆憎,如果數(shù)據(jù)已經(jīng)導入舅柜,則省略。然后就可以點開度量值的控件按鈕進行編寫了躲惰,哦度量值不同于字段致份,字段可以理解為數(shù)據(jù)的列,而度量值是在列的基礎上進行的某些操作础拨,比如說聚合函數(shù)氮块。其一般也不直接顯示在表里面,而是作為一個篩選條件存在于數(shù)據(jù)透視表里面诡宗,也就是說滔蝉,要先懂數(shù)據(jù)透視表,然后才能懂度量值塔沃,其更像sql語句一樣靈活蝠引,解決數(shù)據(jù)透視表無法表達的卻又有的內涵。
CLOSINGBALANCEMONTH():計算當前上下文中該月最后一個日期的expression語法CLOSINGBALANCEMONTH(表達式,日期格式[,篩選條件])
下面的公式示例創(chuàng)建一個度量值蛀柴,該度量值計算產(chǎn)品庫存的“月末庫存值”螃概。為了闡釋此示例的工作方式,創(chuàng)建一個數(shù)據(jù)透視表鸽疾,并且向該數(shù)據(jù)透視表的“行標簽”區(qū)域添加三個字段:CalendarYear吊洼、MonthNumberOfYear?和?DayNumberOfMonth。?然后使用在代碼部分中定義的公式制肮,將名為?Month?End?Inventory?Value?的度量值添加到該數(shù)據(jù)透視表的“值”區(qū)域冒窍。代碼
=CLOSINGBALANCEMONTH(SUMX(ProductInventory,ProductInventory[UnitCost]*ProductInventory[UnitsBalance]),DateTime[DateKey])
這個是文檔里面復制的,我不知道是不是我理解有問題弄企,這里的月末庫存值是指這個月月末那天庫存物的價值超燃,我把它和會計里面那個聯(lián)系起來,好像期末庫存余額(其實不是)拘领,對公式進行一下解讀意乓,漢語翻譯一下意思吧。表達式的名稱(所應用的表的名字约素,表名[字段名]運算操作符? 表名[表字段名])届良,表名[字段名])。圣猎。士葫。其實可以看出如果是設計多張表要在函數(shù)后面加X,如SUMX,AVERAGEX等送悔,在寫字段的時候一般寫出第一個字母就會有智能感知的提示慢显,鼠標雙擊就可以選取爪模,如果是對同一張表操作,可以省略字段前的表名荚藻,字段名被括在中括號里面屋灌,這是固定的表達式的書寫規(guī)范。寫好這個度量值之后应狱,在數(shù)據(jù)透視表里面勾選并拖到值共郭,就完成了其的使命,其實對于簡單的聚合函數(shù)疾呻,完全可以用透視表的鼠標來完成除嘹,沒必要搞得這么復雜,還專門寫個度量值岸蜗。我也是最近才初學尉咕,好多東西都是自己直觀的理解,完全達不到授業(yè)解惑的水平散吵,在簡書上記錄完全是為了以一種簡單永久方便的方式來保存自己的筆記龙考。以此類推,于此相似的函數(shù)還有CLOSINGBALANCEQUARTER(),''''''YEAR()矾睦,該值表示在當前上下文中該季度/ 年最后一個日期計算的晦款。(我做的時候,好像返回表枚冗,不知道哪里多了兩個表的數(shù)據(jù)出來缓溅,元數(shù)據(jù)的子數(shù)據(jù)表)
DATAADD()返回一個表,該表包含由日期構成的一列赁温,這些日期是在時間上從當前上下文中的日期前移或后移指定間隔數(shù)目的日
=DATEADD(DateTime[DateKey],-1,year)
沒弄成
DATESBETWEEN(數(shù)據(jù),開始,結束日期)
計算夏季銷售額例子
=CALCULATE(SUM(InternetSales_USD[SalesAmount_USD]), DATESBETWEEN(DateTime[DateKey],? ? DATE(2007,6,1),? ? DATE(2007,8,31)
在數(shù)據(jù)透視表里面單獨列顯示坛怪,要是能計算每年某個時間段的銷售額就好了,往下學吧股囊,或許接下來會遇到袜匿,或許可以用嵌套呢,反正我現(xiàn)在不懂稚疹。
類似的year居灯、quarter、month一樣
下面的公式為 2007 年 8 月 24 日之前的 21 天返回 Internet 銷售額内狗。=
CALCULATE(SUM(InternetSales_USD[SalesAmount_USD]),DATESINPERIOD(DateTime[DateKey],DATE(2007,08,24),-21,day))
DATESMTD 函數(shù)返回一個表怪嫌,該表包含當前上下文中本月截止到現(xiàn)在的日期列
計算本月截止到現(xiàn)在的總計的表達式范例=CALCULATE(SUM(InternetSales_USD[SalesAmount_USD]), DATESMTD(DateTime[DateKey]))。這個的意思就不用解釋了吧柳沙,第一個已經(jīng)詳細的說了岩灭,這些都是類似的,CALCULATE是指上下文赂鲤,他們這么說的噪径,我也不懂具體的啥意思柱恤,但我猜可能是為了為后面的函數(shù)增加一個外在的篩選條件吧。就像這一樣熄云,增加日期篩選條件
類似DATESQTD()當前截至到本季度總計 ? DATESYTD()
ENDOFMONTH函數(shù)
=ENDOFMONTH(DateTime[DateKey])
不懂和CLOSINGBALANCEMONTH()有什么區(qū)別
另ENDOF季度膨更,年
FIRSTDATE()
=FIRSTDATE('InternetSales_USD'[SaleDateKey])
和ENDOF()相對應妙真,返回第一個日期
更有LASTDATE()
我越來越懷疑前面所說的CLOSINGBALANCEMONTH()的理解是錯的缴允,畢竟上面這兩函數(shù)才是我理解的那意思,返回第一個或最后一個日期
NEXTDAY 函數(shù)
返回一個表珍德,該表包含的一列具有當前上下文中基于?dates?列中指定的第一個日期的下一天中的所有日期练般,今天6/9,即返回所有6/10的數(shù)據(jù)锈候,季度年薄料,月,亦如此泵琳。只是自己的電腦好卡摄职,實驗的數(shù)據(jù)沒出來
OPENINGBALANCEMONTH()
這才是與CLOSINGBANLANCEMONTH()相對應的,只是自己還不知道其具體的用法和意義是什么(月初庫存值获列,不懂啊谷市,咋計算的)
PARALLELPERIOD 函數(shù) (并行期間,好不容易看懂英文意思击孩,這兩單詞有印象)
返回一個表迫悠,該表包含由日期構成的一列,這些日期表示與當前上下文中指定的?dates?列中的日期并行的期間巩梢,該列中具有在時間中前移或后移某個數(shù)目的間隔的日期
上面我說過的DATESBETWEEN()的解決辦法就是這個東東了创泄。
實例上一年的銷售額=CALCULATE(SUM(InternetSales_USD[SalesAmount_USD]), PARALLELPERIOD(DateTime[DateKey],-1,year))
PREVIOUSDAY 函數(shù),返回當前日期的前一個日期 類似上一個月括蝠,季度鞠抑,年一樣
TOTALMTD(,[,])計算當前上下文中當月至今的 expression 的值
感覺和那datesMTD無異。類似Q YTD
實例=TOTALMTD(SUM(InternetSales_USD[SalesAmount_USD]),DateTime[DateKey])
今天的時間智能函數(shù)就到這把忌警,學知識有點小累啊搁拙。而且越學越知道自己的開始的理解有問題,下一篇的時候我寫一下慨蓝,自己在這篇文章里面的好多錯誤吧感混,一些最基本的理論都錯了,原來礼烈,知識是要去尊重權威的弧满,不能憑自己的想當然,所有的想當然都是帶著對自己知識局限條件下的無謂猜想罷了此熬。真的好多錯誤庭呜,但還是感謝自己今天做相應的筆記滑进,學習相關的知識∧蓟眩或許扶关,以后會有用處的,我 等待著数冬。