加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 22:37:31 所属栏目:大数据 来源:网络整理
导读:06. 那些产品构成销量总量最少的20%? 查询Listing 6 用BottomPercent()返回仅构成Total unit sales 20%的最多的产品项,也就是说,这些产品的unit sales 最

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,([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])),

{[Store].[All Stores]

} ON rows from sales

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读