mdx 聚合函数
聚合函數Aggregation(set_express, numeric_express), Aggregation(http://msdn.microsoft.com/zh-cn/library/ms145524.aspx)執行求和函數, 如果和某些其他求和函數配合的話, 會有變化. 看一個例子
SELECT { ([Measures].[Reseller Sales Amount]), ([Measures].[Reseller Transaction Count]), ([Measures].[Reseller Order Count]) } ON COLUMNS, TopCount( {[Product].[Subcategory].[Subcategory].Members}, 5, ([Measures].[Reseller Sales Amount]) ) + {([Product].[Subcategory].[All Products])} ON ROWS FROM [Step-by-Step]很簡單. 按銷售量排序排名前五的銷售小類別的三個值的表現. 第一個是金額, 是sum, 第二個是交易數量, 是count(*), 第三個是distinctCount(*), 訂單數量.
想增加一行. 匯總一下這前五的信息. 于是, 我們寫一個計算列.如下
因為是添加一行, 那么肯定是用類似于上面的元組+元組. 所以計算列是屬于[Product].[Subcategory].元組的. 定義如下
with member [Product].[Subcategory].[top5] as sum( topcount([Product].[Subcategory].[Subcategory].Members, 5, [Measures].[Reseller Sales Amount] ) ,[Measures].[Reseller Sales Amount] )得到
哦, 錯了. 這只是得到是Sales Amount一個死的Sum值. 在這里我們忽視了一個東西, CurrentMember, 類似于游標指針似的一個玩意. 它不僅是用在Measures被Dim打亂上(列上被行的打亂), 還可以用在Dim在不同的Measures上的表現, (行被列限定. ).? 在這里, colomn上的measures有三個成員. 因此可以用
這樣得到的結果是可是最后一個值的5026明顯不是distinctCount, 而是一個簡單是sum運算. 這違背了我們的初衷. 這個時候, 就不能使用簡單是sum聚合了. 需要保持原來聚合的Aggregation函數. 最終結果如下
加一個有趣的東西
?
?
AVG函數.
這樣一個簡單的東西. 每年的銷售額的訂單數. 現在我們需要當年的月平均銷售額.
下面我們再來復習一下作用域的概念.
with member Measures.MonthValue as avg( [Measures].[Reseller Sales Amount] )現在是這樣. 沒有限定任何作用域. 那么這個度量值將會被行維度給打散. 結果如圖.
這是查詢出來了每一年的銷售額. 好無聊的操作. 呵呵.
假設給avg第一個參數賦值, set_express 設置為
with member Measures.MonthValue as avg( [Date].[Calendar].[Month].members , [Measures].[Reseller Sales Amount] ) 相當于得到一個死的值. 已經計算完的.? 這個值是所有的月份的銷售額之和/月數., 其實我們需要這個值和每個年份做關聯, 被打散. 這個時候, 就需要existing關鍵字出馬了.
existing強制在當前的區域內做運算. 理解為, 度量值強制在當前的區域內被切割.
得到
這個時候, 突然想到. 其實我們在指定月份的時候, 不也是可以指定他的區域嗎?
比如這樣寫.
這樣限定了. 月份的成員是屬于在行的當前的區域范圍內. 結果果然是正確得到了和使用existing一樣的.?
?
WITH MEMBER [Measures].[Products] AS Count( EXISTING {[Product].[Product].[Product].Members} ) MEMBER [Measures].[Products List] AS Generate( EXISTING {[Product].[Product].[Product].Members}, [Product].[Product].CurrentMember.Name, " .. " ) SELECT { ([Measures].[Products]), ([Measures].[Products List]) } ON COLUMNS, {[Product].[Subcategory].Members} ON ROWS FROM [Step-by-Step] ;一個很神奇的東西
轉載于:https://www.cnblogs.com/jianjialin/archive/2012/09/19/2694108.html
總結
- 上一篇: 精品教程--Android实战系列源码与
- 下一篇: ecshop在首页调用dedecms文章