MDX查询需求:计算当前成员所属同区域所有配送中心的库存总件数
MDX查询实现同区域配送中心库存总和计算
前提假设
基于你提供的SQL逻辑,默认Cube包含以下对象,可根据实际情况调整:
- 维度
DimObjects:包含属性ObjectID、ObjectType、Region,和SQL的维度表结构一致 - 度量值组
FactInventory:包含度量[Measures].[Pcs],对应库存件数
完整MDX查询
WITH -- 计算成员:当前对象所属区域内所有配送中心的总库存 MEMBER [Measures].[pcsRegion] AS SUM( -- 获取当前行对象对应的Region成员 EXISTING [DimObjects].[Region].CurrentMember, -- 过滤该Region下所有配送中心,求和库存 ( [DimObjects].[ObjectType].&[Distribution Center], [Measures].[Pcs] ) ) SELECT -- 列维度返回自身库存、区域配送中心总库存两个指标 { [Measures].[Pcs], [Measures].[pcsRegion] } ON 0, -- 行维度返回所有对象的ID、类型、所属区域 NON EMPTY [DimObjects].[ObjectID].[ObjectID].Members * [DimObjects].[ObjectType].[ObjectType].Members * [DimObjects].[Region].[Region].Members ON 1 FROM [替换为你的实际Cube名称]
逻辑说明
和你提供的SQL逻辑完全对应:
EXISTING关键字实现了按当前对象所属Region关联过滤的效果,对应SQL中两个CTE通过Region字段左连接的逻辑- 固定
ObjectType为配送中心后求和的逻辑,对应SQL中第二个CTE过滤配送中心后按Region分组求和pcs的逻辑- 最终输出字段和SQL的输出完全匹配,每行返回单个对象的基础信息、自身库存、对应区域配送中心总库存
注意事项
- 请将代码中的
[替换为你的实际Cube名称]修改为你自己的Cube名称 - 如果维度属性的唯一命名、
ObjectType的成员键和示例不一致,请根据你的Cube实际配置调整对应属性值 - 若仅需要查询单个对象的结果,可以在
FROM子句后增加WHERE切片条件,比如WHERE ([DimObjects].[ObjectID].&[WH_1])
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

