我想创建一个计算度量,它根据维度属性仅汇总事实表中的特定记录子集。
鉴于:
维度
措施
关系
* LedgerLineItem是FactLedger的退化维度
如果我通过LedgerLineItem.Type分解LedgerAmount我可以很容易地看到收费,支付,信用等多少,但是当我没有通过LedgerLineItem.Type分解时,我不能轻易添加信用,付款,信用,等进入数据透视表。我想创建单独的计算度量,只对特定类型(或多种类型)的分类帐事实求和。
所需输出的一个例子是:
| Year | Charged | Total Paid | Amount - Ledger |
| 2008 | $1000 | $600 | -$400 |
| 2009 | $2000 | $1500 | -$500 |
| Total | $3000 | $2100 | -$900 |
我曾试图通过几种方式创建计算度量,每种方法在某些情况下有效,但在其他情况下无效。现在在有人说在ETL中这样做之前,我已经在ETL中完成了它并且它工作得很好。作为学习更好地理解MDX的一部分,我想要做的是弄清楚如何复制我在MDX中的ETL中所做的事情,因为到目前为止我无法做到这一点。
这是我做过的两次尝试以及它们的问题。 仅当分类帐类型位于数据透视表中时,此方法才有效。它返回正确数量的分类帐条目(虽然在这种情况下它与[金额 - 分类帐]相同但是当我尝试删除类型并且只获得所有分类帐条目的总和时它返回未知。
CREATE MEMBER CURRENTCUBE.[Measures].[Received Payment]
AS CASE WHEN ([Ledger].[Type].currentMember = [Ledger].[Type].&[Credit])
OR ([Ledger].[Type].currentMember = [Ledger].[Type].&[Paid])
OR ([Ledger].[Type].currentMember = [Ledger].[Type].&[Held Money: Copay])
THEN [Measures].[Amount - ledger]
ELSE 0
END
, FORMAT_STRING = "Currency"
, VISIBLE = 1
, ASSOCIATED_MEASURE_GROUP = 'Ledger' ;
仅当分类帐类型不在数据透视表中时才有效。它总是返回总付款金额,这在我按类型切片时是不正确的,因为我只希望看到信用额度在信用额度下,付款部分,付款,0美元充电等等。
CREATE MEMBER CURRENTCUBE.[Measures].[Received Payment]
AS sum({([Ledger].[Type].&[Credit]), ([Ledger].[Type].&[Paid])
, ([Ledger].[Type].&[Held Money: Copay])}
, [Measures].[Amount - Ledger])
, FORMAT_STRING = "Currency"
, VISIBLE = 1
, ASSOCIATED_MEASURE_GROUP = 'Ledger' ;
有没有办法让这个返回正确的数字,无论Ledger.Type是否包含在我的数据透视表中?
答案 0 :(得分:7)
尝试现有:
CREATE MEMBER CURRENTCUBE.[Measures].[Received Payment]
AS sum(Existing({([Ledger].[Type].&[Credit]), ([Ledger].[Type].&[Paid])
, ([Ledger].[Type].&[Held Money: Copay])})
, [Measures].[Amount - Ledger])
, FORMAT_STRING = "Currency"
, VISIBLE = 1
, ASSOCIATED_MEASURE_GROUP = 'Ledger' ;
应该注意游戏中的成员。
答案 1 :(得分:1)
无法对Meff的答案发表评论,所以我会发表自己的答案。
您应该考虑使用Aggregate而不是Sum,因为结果可能并不总是您期望使用Sum的结果:
CREATE MEMBER CURRENTCUBE.[Measures].[Received Payment]
AS Aggregate(Existing({([Ledger].[Type].&[Credit]), ([Ledger].[Type].&[Paid])
, ([Ledger].[Type].&[Held Money: Copay])})
, [Measures].[Amount - Ledger])
, FORMAT_STRING = "Currency"
, VISIBLE = 1
, ASSOCIATED_MEASURE_GROUP = 'Ledger' ;
答案 2 :(得分:0)
我假设Ledger维度在FactLedger中有一个关键字但是它没有与第一个MDX计算成员汇总的问题让我相信你可能想重新考虑这个层次结构。
然后基于您的分类帐类型的简单SUM可以工作,这有意义吗?