首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含子项和父项的MDX计算(对总数的贡献)

包含子项和父项的MDX计算(对总数的贡献)
EN

Stack Overflow用户
提问于 2015-10-29 02:30:06
回答 3查看 1.1K关注 0票数 1

我得到了一个立方体,上面有城市一些社区的地籍信息。其中一个衡量标准是“地籍价值”:一个社区的土地价值。现在,城市被划分为区和一个区,分为社区(具有两级的层次结构)。

问题是:我需要计算每个邻域的值与父(区)和总(市)的百分比,以及区与市的百分比。

我该怎么做呢?

我试过了:

代码语言:javascript
复制
WITH MEMBER
[Measures].[Percentage] AS 
  ([Nbh].[Nbh].[Nbh],[Measures].[Cad value].CurrentMember
   /[Nbh].[Nbh].[Nbh],[Measures].[Cad value].CurrentMember.Parent)

SELECT 
 {[Measures].[Percentage]} ON 0,
 [Nbh].[Nbh].[Nbh].AllMembers ON 1
FROM Cadastre

其中尺寸是:

Nbh :邻居

Cad值:地籍值

我得到的是每个结果值中的“错误”,解释是“当前成员():参数(0)类型不匹配:期望:‘级别|层次结构|维度’,得到:‘度量’”

我做错了什么?

EN

回答 3

Stack Overflow用户

发布于 2015-10-29 05:53:41

尝试以下操作:

代码语言:javascript
复制
WITH MEMBER [Measures].[Parent %] AS 
   IIF(
    [Nbh].[Nbh].CURRENTMEMBER IS [Nbh].[Nbh].[All]
    ,1
    ,[Measures].[Cad value] /
     (
      [Measures].[Cad value],
      [Nbh].[Nbh].CurrentMember.Parent
     )
   ), FORMAT_STRING = 'Percent'
SELECT 
 {[Measures].[Parent %]} ON 0,
 [Nbh].[Nbh].[Nbh].AllMembers ON 1
FROM Cadastre;

包括IIF在内是一种防御性措施。如果切换到显示完整层次结构的AllMembers,则将包括All成员。下面是一个使用AdvWrks的示例

代码语言:javascript
复制
WITH 
  MEMBER [Measures].[Parent %] AS 
    IIF
    (
        [Product].[Subcategory].CurrentMember
      IS 
        [Product].[Subcategory].[All Products]
     ,1
     ,
        [Measures].[Internet Sales Amount]
      / 
        (
          [Measures].[Internet Sales Amount]
         ,[Product].[Subcategory].CurrentMember.Parent
        )
    ) 
   ,FORMAT_STRING = 'Percent' 
SELECT 
  NON EMPTY 
    {[Measures].[Parent %]} ON 0
 ,NON EMPTY 
    [Product].[Subcategory].ALLMEMBERS ON 1
FROM [Adventure Works];

上面的代码返回以下内容:

如果不使用IIF,则表达式如下:

代码语言:javascript
复制
WITH 
  MEMBER [Measures].[Parent %] AS 
      [Measures].[Internet Sales Amount]
    / 
      (
        [Measures].[Internet Sales Amount]
       ,[Product].[Subcategory].CurrentMember.Parent
      ) 
   ,FORMAT_STRING = 'Percent' 
SELECT 
  NON EMPTY 
    {[Measures].[Parent %]} ON 0
 ,NON EMPTY 
    [Product].[Subcategory].ALLMEMBERS ON 1
FROM [Adventure Works];

由于缺乏远见,我们得到了以下结果:

票数 1
EN

Stack Overflow用户

发布于 2015-10-29 15:40:53

成员Measures.Percentage为的

(Nbh.Nbh.Nbh,Measures.Cad value.CurrentMember /Nbh.Nbh.Nbh,Measures.Cad value.CurrentMember.Parent)

这有两个问题:

其一,您正在使用静态集合来计算计算成员的值,即: This is [Nbh].[Nbh].[Nbh] [Nbh].[Nbh].CURRENTMEMBER

第二个也是更大的错误:在度量上使用currentmember。你不能这么做。您可以使用Measures.CURRENTMEMBER,但仅此而已。它最适合在轴上使用的层次结构上使用。

也就是说,您的方法几乎是合法的。您需要获取父级的度量值。

这应该是可行的:

代码语言:javascript
复制
WITH MEMBER
[Measures].[Percentage] AS 
DIVIDE
        (
        [Measures].[Cad value], 
        ([Nbh].[Nbh].CURRENTMEMBER.PARENT,[Measures].[Cad value]) //Cad value for parent
        )

SELECT 
 {[Measures].[Percentage]} ON 0,
 [Nbh].[Nbh].[Nbh].AllMembers ON 1
FROM Cadastre
票数 1
EN

Stack Overflow用户

发布于 2015-10-29 05:33:20

这个错误肯定是因为下面的语句不正确:

代码语言:javascript
复制
WITH MEMBER
[Measures].[Percentage]
AS ([Nbh].[Nbh].[Nbh],[Measures].[Cad value].CurrentMember/[Nbh].[Nbh].[Nbh],[Measures].[Cad value].CurrentMember.Parent)

试着这样做

代码语言:javascript
复制
WITH MEMBER
[Measures].[Percentage]
AS ([Nbh].[Nbh].[Nbh],[Measures].[Cad value])/([Nbh].[Nbh].[Nbh],[Measures].[Cad value])
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33398890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档