MDX的实例讲解(排名前15的小例子)
MDX語句的特點:
大小寫不分。members等于Members;downloads等于Downloads
維度的統(tǒng)計量指定要選擇準(zhǔn)確。downloads等于[Downloads]
[]可以少,不能多。members外部不能有[],否則報錯
TopCount函數(shù)格式。
members是屬性中所有成員的枚舉。
?
同一維度下的屬性組合,用Hierarchize:
SELECT
NON EMPTY {[Measures].[Downloads]} ON COLUMNS,
NON EMPTY {Hierarchize({{[appTag.default].[dimstore].Members}, {[appTag.default].[Class].Members}})} ON ROWS
FROM [aso]
不同維度的屬性組合,用CrossJoin:
SELECT
NON EMPTY {[Measures].[Downloads]} ON COLUMNS,
NON EMPTY CrossJoin([dimInterval.default].[Interval].Members, CrossJoin([dimStoreName.default].[storeName].Members, [dimDate.default].[year].Members)) ON ROWS
FROM [aso]
?
?
舉幾個具體的例子:
下面兩個語句是一樣的:
1.SELECT
NON EMPTY {downloads} ON COLUMNS,
TopCount([dimStoreName].[storeName].members,2,[downloads]) ON ROWS
FROM [aso]
2.SELECT
downloads ON COLUMNS,
{TopCount([dimStoreName].[storeName].members,2,[measures].[downloads])}ON ROWS
FROM [aso]
aso是一個cube,總體。如果需要在結(jié)果集中篩選出某個屬性取特定值的結(jié)果,用where 子句
略(有空再寫)
?
查看downloads的top 15:前15計算函數(shù)topcount(set,topK,依據(jù)統(tǒng)計量),排序后取前15
SELECT
NON EMPTY {downloads} ON COLUMNS,
TopCount([dimApp].[appName].members,15,[downloads]) ON ROWS
FROM [aso]
如果查詢跨越來兩個不同維度,需要crossjoin,
SELECT
NON EMPTY {downloads} ON COLUMNS,
TopCount(
????????? CrossJoin([dimStoreName.default].[storeName].Members,[dimApp].[appName].members),15,[downloads]
??) ON ROWS
FROM [aso]
先交叉,確定查詢結(jié)果集(交叉連接),再篩選
不能先統(tǒng)計,后交叉,錯誤:
SELECT
NON EMPTY {downloads} ON COLUMNS,
CrossJoin([dimStoreName.default].[storeName].Members,
????????? (topcount([dimApp].[appName].members,15,[downloads]))
??? )
ON ROWS
FROM [aso]
?
top5實例進(jìn)階:
SELECT
{[downloads]} ON COLUMNS,
Generate(
TopCount([dimStore].[store_name].Members, 5, [downloads]),
{ [dimStore].CurrentMember } * TopCount( [appName].[AppName].Members, 5, ([downloads],[dimStore].CurrentMember) )
) on ROWS
FROM [ASO]
?
?
標(biāo)準(zhǔn)格式的例子,猜猜什么意思:
SELECT
NON EMPTY {[Measures].[Downloads], [Measures].[AppCount]} ON COLUMNS,
NON EMPTY Hierarchize(
??? Union( CrossJoin({[appTag.default].[anzhi]}, [dimDate.default].[year].Members),
??????? Union( CrossJoin({[appTag.default].[anzhi]}, [dimDate.default].[day].Members),
??????????? Union( CrossJoin({[appTag.default].[hiapk]}, [dimDate.default].[year].Members),
?????????????????? CrossJoin({[appTag.default].[hiapk]}, [dimDate.default].[day].Members)
??????????? )
????? )
?)
) ON ROWS
FROM [aso]
?
?
?
罵娘了嗎?
解析一下,簡化的例子:
SELECT
NON EMPTY {[Measures].[Downloads]} ON COLUMNS,
NON EMPTY Hierarchize(
?????????????? Union(CrossJoin([dimDate.default].[year].Members, [appTag.default].[dimstore].Members),
???????????? Union(CrossJoin([dimDate.default].[month].Members, [appTag.default].[dimstore].Members),
???????????? CrossJoin([dimDate.default].[day].Members, [appTag.default].[dimstore].Members)
???????)
?????)
???? ) ON ROWS
FROM [aso]
執(zhí)行結(jié)果如下:
?
如果只是date維度的下的月日年,很簡單,Hierarchize就可以了,如
SELECT
NON EMPTY {[Measures].[Downloads]} ON COLUMNS,
NON EMPTY {Hierarchize({{[dimDate.default].[year].Members}, {[dimDate.default].[month].Members}, {[dimDate.default].[day].Members}})} ON ROWS
FROM [aso]
?
但是當(dāng)兩個維度下的多個維度組合在一起,就要進(jìn)行笛卡映射,分別crossjoin,在總體合并。兩個維度屬性集,分別crossjoin,然后再將所有crossjoin結(jié)果集進(jìn)行union。
union就是并集(合并兩個結(jié)果集)。
intersect是交集
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的MDX的实例讲解(排名前15的小例子)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 17、java.lang.Unsatis
- 下一篇: 三个极限定理与四种收敛性