翻译介绍15个经典的MDX查询-06&07

06. 那些产品构成销量总量最少的20%?
查询Listing 6 用BottomPercent()返回仅构成Total unit sales 20%的最多的产品项,也就是说,这些产品的unit sales 最小。查询用关键字Non Empty排除了没有销售量的产品。需要注意的是,Non Empty跟Filter()与IsEmpty()的组合使用(见Listing 3)略有不同,因为Non Empty最用在某个轴(如rows)的所有项上。
  Listing_06.Determining Brands That Make Up the Bottom 20 Percent of Sales.txt
说明:按销售量排序,找出组成 20% 销售量的商品销售记录
select {[Unit Sales]} on COLUMNS ,
  Non Empty BottomPercent ([Product].[Brand Name] .Members , 20, [Unit Sales]) on ROWS
from Sales

查询结果表展示:


查询结果图展示:




    07. 销量最好的五个商店是哪五个?这五个商店中消费最高的五位顾客?
查询Listing 7 示范了很实用也比较复杂的Generate()函数。如果你有过开发经验,你会发现Generate()类似VB或则C#中的For each 语句。下面对Generate()做具体的说明:
  如: Generate( {Miami, Atlanta}, Customers.CurrentMember.Parent) Generate()对第二个参数Customers.CurrentMember.Parent进行计算,计算第一个参数{Miami, Atlanta}中的所有项。在本例,第二个参数的mdx表达式返回当前项的父成员,所以最终结果是{Florida, Georgia}---第一个参数中每一个项的父成员的集合。
(注:我们可以这样理解,第一参数是要计算的范围,第二个参数是要计算的对象)


本查询同时使用 Generate() 函数嵌套了递归。确定了五个销售最佳的商店,每个商店的消费最高的五个顾客后,Generate()合并了顾客集合从而创建了一份由25项store-customer组成的列表。
  Listing_07.Determining the Top Five Stores and the Top Five Customers.txt
说明:查出销售量最好的前 5 名店和每个店的前 5 个顾客 及其销售记录
 
select {[Unit Sales]} on COLUMNS ,
  Generate ( TopCount ([Store].[Store Name] .Members , 5, [Unit Sales]),
 { [Store] .CurrentMember } * TopCount ( [Customers].[Name] .Members , 5, ([Unit Sales],
[Store] .CurrentMember ) ) ) on ROWS
from Sales
查询结果表展示:



查询结果图展示:


注:

BottomPercent
对集合排序,并返回底端的 n 个元素,这些元素的累积合计至少为指定的百分比。
例子
select {[Unit Sales]} on COLUMNS ,
  Non Empty BottomPercent ([Product].[Brand Name] .Members , 10, [Unit Sales]) on ROWS
from Sales
Generate
将集合应用到另一集合的每个成员,然后用 union 运算合并所得的集合。
例子 1
SELECT  {[Measures].[Store Sales] } ON COLUMNS ,
 { Generate ({ USA, Canada }, Descendants (store .CurrentMember , [store state]))
}   ON rows from sales   
例子 2:
ca, wa是USA的,加all则简单复制
SELECT  {[Measures].[Store Sales] } ON COLUMNS ,
 { Generate ({USA, Canada}, {ca, wa} ,all)
}   ON rows from sales  
如果通过 CurrentMember«Set1» «set_expression» 无关,那么 Generate 生成 «set_expression» 所指的集合的简单复制,它包含的复制与 «Set1» 中的元组一样多。如果指定了可选的 ALL 标志,结果中将保留所有重复项。如果未指定 ALL,重复项将被删除。
例子 3:
合并字符串
with member [Measures].[ 合字符串] as ' Generate ({Time .allmembers }, Time .CurrentMember.name , " and " )'
SELECT  { [Measures].[ 合字符串] } ON COLUMNS ,
 {[Store].[All Stores]
}   ON rows from sales  
例子 4:
应用扩展
with member [Measures].[ 合字符串 ] as ' Generate ({Time.[1997] .children }, cstr((Time .CurrentMember , [Measures].[Unit Sales],store.[all stores])), " and " )'
SELECT  { [Measures].[ 合字符串 ] } ON COLUMNS ,
  {[Store].[All Stores]
}   ON rows from sales

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值