我想定义一个member,意义是每月销售额超过100万的客户的统计。请问MDX如何写?

ly_0205 2009-06-07 12:55:12
因为每个月都是变动的,1月和2月销售额超过100万的客户可能并不相同。
所以这个Member并非一个固定的集相加。不知道该怎么做。。
比如说查询一年的销售统计,销售额总计对应于这个Member来说就是:1月超过100万的合计+2月超过100万的合计+...+12月超过100万的合计。
谢谢!
...全文
122 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
华芸智森 2009-06-24
  • 打赏
  • 举报
回复
写错了,应该是这样吧.红色部分写错了.

WITH
SET [AAA] AS ' FILTER([Product].Members, IsLeaf([Product].CurrentMember)=1) '
MEMBER [MEASURES].[BBB] AS ' IIF([Measures].[Store Sales] >10,[Measures].[Store Sales],0) ',solve_order=1
MEMBER [MEASURES].[CCC] AS 'SUM( { Descendants( [Time].[1997],2 )},[BBB] )',solve_order=2
MEMBER [MEASURES].[DDD] AS 'SUM( {[AAA]},[CCC] )',solve_order=3

SELECT { [DDD] } ON 0
FROM SALES
华芸智森 2009-06-24
  • 打赏
  • 举报
回复
或者这样?

WITH
SET [AAA] AS ' FILTER([Product].Members, IsLeaf([Product].CurrentMember)=1) '
MEMBER [MEASURES].[BBB] AS ' IIF([Measures].[Store Sales] >10,[Measures].[Store Sales],0) ',solve_order=1
MEMBER [MEASURES].[CCC] AS 'SUM( { Descendants( [Time].[1997],2 )},[Measures].[Store Sales] )',solve_order=2
MEMBER [MEASURES].[DDD] AS 'SUM( {[AAA]},[CCC] )',solve_order=3

SELECT { [DDD] } ON 0
FROM SALES

华芸智森 2009-06-24
  • 打赏
  • 举报
回复
你想要什么?
这样?

WITH
--取产品叶
SET [AAA] AS ' FILTER([Product].Members, IsLeaf([Product].CurrentMember)=1) '
--如果 Store Sales >10,则 为Store Sales,否则,0
MEMBER [MEASURES].[BBB] AS ' IIF([Measures].[Store Sales] >10,[Measures].[Store Sales],0) '
--统计1997年 Store Sales >10 的总和
MEMBER [MEASURES].[CCC] AS 'SUM( { Descendants( [Time].[1997],2 )},[BBB] )'

SELECT { [AAA] } ON 0,
{ CCC } ON 1
FROM SALES
华芸智森 2009-06-24
  • 打赏
  • 举报
回复
这个也可以在前台动态生成 MDX 语句来完成.
华芸智森 2009-06-24
  • 打赏
  • 举报
回复
明白了
好象只能用定义子立方来解决了.子立方也可以动态地建立.分析完后删除.
ly_0205 2009-06-24
  • 打赏
  • 举报
回复
不是,不是要查一个值,而是定义一个分析对象。
这个对象由多个子成员组成,就像层次结构中的父成员与子成员一样。
比如产品维度的类别和产品。每一个产品是一个分析对象,每一个类别也是一个分析对象。
类别实际上就是其下面所有产品的统计,比如销售总计就是类别下所有产品的销售总计相加,环比就是类别下所有产品本期的销售总计/类别下所有产品上期的销售总计,诸如此类。

我需要的就是一个"类别"。但是它下面的"产品"(客户)不是固定的,而是与时间维度相关。今年这个客户属于这个类别,去年却不属于这个类别。。
ly_0205 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 MSTOP 的回复:]
WITH MEMBER 是对度量的.
WITH SET 是对维的.
按你标题的意思,统计的是客户维,当然是 SET 了.
[/Quote]

这种说话我认为不对, 度量也是一个维, WITH MEMBER并不只是能够针对这个维度.
WITH MEMBER 只是定义一个成员,虽然大多数情况下用以定义计算成员,在Measures维度下面。但是他也可以定义其他维下面的成员。
WITH SET 是定义一个集,成员集元组集都行,他也可以应用于度量维。
比如这个查询:

with
member [Customer].[Customer Geography].[北美] as [Customer].[Customer Geography].[Country-Region].&[Canada] + [Customer].[Customer Geography].[Country-Region].&[United States], SCOPE_ISOLATION = CUBE
set [xxx] as {[Measures].[Total Sales Amount], [Measures].[Total Product Cost]}
select
[xxx] on 0,
{[Customer].[Customer Geography].[北美],
[Customer].[Customer Geography].[Country-Region].&[Canada], [Customer].[Customer Geography].[Country-Region].&[United States]} on 1
from [Analysis Services Tutorial]

[Customer].[Customer Geography].[北美]是在[Customer].[Customer Geography]层次结构下定义的一个成员,意义是加拿大和美国合在一起的统计。
[xxx]是一个成员集,包含两个度量成员。

我的问题实际上就是定义一个类似[Customer].[Customer Geography].[北美]这样的成员,
但不像他这样固定是加拿大和美国这两个成员的统计。
他和时间维度相关,不同的时间需要选择不同的成员进行统计。
华芸智森 2009-06-22
  • 打赏
  • 举报
回复
WITH MEMBER 是对度量的.
WITH SET 是对维的.
按你标题的意思,统计的是客户维,当然是 SET 了.
ly_0205 2009-06-22
  • 打赏
  • 举报
回复
呃, 我说的不是Members(), "所有"成员, 不是"所有成员". 很晕.. 不知道怎么说..
可以说是Members(0)吧, 就是哪个LevelNumber为0的那个成员.

另外一种方式来讲就是, 需要一个WITH MEMBER, 不是一个WITH SET
ly_0205 2009-06-18
  • 打赏
  • 举报
回复
不是一个集,是一个成员,像Hierarchy的AllMember那个成员一样
华芸智森 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ly_0205 的回复:]
不是一个集,是一个成员,像Hierarchy的AllMember那个成员一样
[/Quote]
Members 返回的就是一个集合。
华芸智森 2009-06-13
  • 打赏
  • 举报
回复
用Filter函数,例如:

SELECT
{ Filter( { [TIME].[1997].[Q1],[TIME].[1997].[Q2],[TIME].[1997].[Q3],[TIME].[1997].[Q4] }, [Measures].[Unit Sales]>=9000) } ON Columns,
{ [PRODUCT].[PRODUCT FAMILY].[DRINK], [PRODUCT].[PRODUCT FAMILY].[FOOD], [PRODUCT].[PRODUCT FAMILY].[NON-CONSUMABLE] } ON ROWS
FROM [SALES]
WHERE ([Measures].[Unit Sales])
claro 2009-06-08
  • 打赏
  • 举报
回复
顾问Peng 2009-06-08
  • 打赏
  • 举报
回复
select amount on 0,customer.allmembers on 1
from cube1
where product.member>100……
格式如同上面这样的

合计的话直接用sum()

如果在SQL 里写的话,可以用Opendatasource()函数引用

存储过程格式如常规
lkqijian 2009-06-08
  • 打赏
  • 举报
回复
学习下
oldCanISoftware 2009-06-08
  • 打赏
  • 举报
回复
UP
ly_0205 2009-06-07
  • 打赏
  • 举报
回复
MDX就是多维数据集查询表达式啊。 环境Sql Server Analysis Services 2005
bsh_ly 2009-06-07
  • 打赏
  • 举报
回复
请问 MDX 是什么?
怎么维护这个member?
哪种环境下?

7,388

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 数据仓库
社区管理员
  • 数据仓库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧