Ssas 未筛选MDX成员

Ssas 未筛选MDX成员,ssas,mdx,Ssas,Mdx,我们正在尝试开发一些MDX查询,允许用户生成基于交易类型计算的利润数。以下是一个示例: WITH MEMBER [Measures].[Profit] AS '((Sum({[Transaction Type].[All Transaction Types].[SALE]}, [Measures].[Amount]) + Sum({[Transaction Type].[All Transaction Types].[MOTO]}, [Measures].[Amount]) + Sum({

我们正在尝试开发一些MDX查询,允许用户生成基于交易类型计算的利润数。以下是一个示例:

WITH MEMBER [Measures].[Profit] AS 
'((Sum({[Transaction Type].[All Transaction Types].[SALE]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[MOTO]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[FORCECAPTURE]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[FORCE]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[RECURRINGSALE2]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[SPECIALFORCE]}, [Measures].[Amount]) + 
Sum({[Transaction Type].[All Transaction Types].[VOICEAUTH]}, [Measures].[Amount]) +
Sum({[Transaction Type].[All Transaction Types].[VALIDATION]}, [Measures].[Amount]) +
Sum({[Transaction Type].[All Transaction Types].[REPEATCHECK]}, [Measures].[Amount]) +
Sum({[Transaction Type].[All Transaction Types].[CONVERSION]}, [Measures].[Amount]) +
Sum({[Transaction Type].[All Transaction Types].[GENERICCHECK]}, [Measures].[Amount]) +
Sum({[Transaction Type].[All Transaction Types].[CASHIN]}, [Measures].[Amount]) +
Sum({[Transaction Type].[All Transaction Types].[CHECKMANUALDEPOSIT]}, [Measures].[Amount]) -
Sum({[Transaction Type].[All Transaction Types].[RECURRINGCREDIT]}, [Measures].[Amount]) +
Sum({[Transaction Type].[All Transaction Types].[ACH]}, [Measures].[Amount]) +
Sum({[Transaction Type].[All Transaction Types].[GUARANTEEANDCHECK2]}, [Measures].[Amount]) +
Sum({[Transaction Type].[All Transaction Types].[RECURRINGACH]}, [Measures].[Amount]) +
Sum({[Transaction Type].[All Transaction Types].[GUARANTEE]}, [Measures].[Amount]) +
Sum({[Transaction Type].[All Transaction Types].[SUPERVISORAPPROVAL]}, [Measures].[Amount])) - 
Sum({[Transaction Type].[All Transaction Types].[RELOAD]}, [Measures].[Amount]) - 
Sum({[Transaction Type].[All Transaction Types].[CASHOUT]}, [Measures].[Amount]) - 
Sum({[Transaction Type].[All Transaction Types].[CREDIT]}, [Measures].[Amount]))' 
SELECT {{[Measures].[Profit],[Measures].[Transaction Number]}} ON COLUMNS, NON EMPTY {(DESCENDANTS([Location].[All Locations].&[1],1))} ON ROWS FROM ( SELECT ( -{[Voided].[Voided].[Voided].&[true]},
{[Transaction Response].[TransactionResponses].&[APPROVED]},{[Transaction Type].[All Transaction Types].[SALE],[Transaction Type].[All Transaction Types].[CREDIT]}) ON COLUMNS FROM [DashBoardCube]) 
WHERE  ([Time].[YEAR].&[2012])
当我们尝试使用事务类型过滤这些查询时,就会出现问题,正如您在上面的示例中所看到的。利润值总是相同的,我假设这是因为成员的定义不同

有没有一种方法可以根据我们定义的计算成员来存档


非常感谢,

正如您所注意到的,成员[Measures].[Profit]的定义超过了子多维数据集中[Transaction Type]的过滤。添加到[Profit]计算成员的元组的“地址”(例如,简写为(MOTO,Amount))针对整个多维数据集而不是子多维数据集(在您的示例中,没有MOTO成员)进行解析

这很奇怪,但这是MDX的工作方式(至少在SSAS中,我不知道其他平台)

构成“利润”(X+Z+Y-a-B)的类型公式与您在子多维数据集中指定的这些类型的子集之间存在矛盾

我不确定,因为我看不到您的需求:但这难道不是一个真正的矛盾,而不仅仅是MDX所做的一些奇怪的事情吗?根据您的子多维数据集,您正在尝试查看销售信用。这难道不是一个新的数字,而不是一种特殊类型的“利润”吗?当它忽略(-CASHOUT)元素时,它真的能被称为“利润”吗?如果忽略(-CASHOUT)在这种情况下是合适的,那么您能否保证它总是跨越多维数据集空间,也就是说,这种计算总是有意义的

一种解决方案可能是在这里明确指定(销售信用)作为您想要的衡量标准,而不会陷入[衡量标准][利润]

另一种可能是给[Transaction Type]维度的每个叶成员一个属性(贷方或借方),指定它应该进行利润计算的哪一方。一个计算成员,类似这样(伪代码)


然后可以在整个[Transaction Type]维度上进行聚合,并可以按交易类型进行切片。

问题仍然不清楚,您的上述MDX应该返回交易类型[SALE]和[CREDIT]的总和,对吗?正确,但它总是返回所有交易的总和。
Iif([Transaction Types].IsCreditOrDebit.CurrentMember IS [Transaction Types].IsCreditOrDebit.[Credit],Measures.Amount,-Measures.Amount)