首页 > 解决方案 > MDX:如何为每个元组添加一个度量,然后如何获得这个度量

问题描述

我想从数据集中计算百分位数,我已经有公式可以做到这一点,但我一直在获取数据集。这是层次结构:

等级制度

这是mdx代码:

with
MEMBER b AS filter(Descendants([Dim misc].[SpePats].CurrentMember,2), [Measures].[Is Anemie]=1).count / filter(Descendants([Dim misc].[SpePats].CurrentMember,2),true).count 
SET c AS ([Dim misc].[SpePats].[Speciality Id].MEMBERS ,b)

SELECT {} ON 0
,{c} ON 1
FROM [BDD PBM]

我从一组“专业 ID”开始,对于每个专业,我得到一个名为 b 的比率(每个专业都包含患者,其中一些是贫血的,b 是贫血患者的比率)。我与会员进行专业的交叉连接,希望得到每个专业的一组费率。不幸的是,我明白了:

结果不好

我想获得给定专业的费率,而不是每行上的“b”。而且,还有一些我不明白的事情,如果我计算成员 b,它会产生一个数字,我怎么能得到这个数字,有元组?在以下示例中,我通过表达式 '[Measure].Weight:' 获得数字,重量

这是一个百分位数计算的工作示例:

WITH 
SET OrderedData AS ORDER(
NONEMPTY([Dim misc].[Patients].[IEP], [Measures].[Weight]),[Measures].[Weight], BASC)
MEMBER [Measures].[RowCount] AS COUNT (OrderedData)

MEMBER [Measures].[i0p02] AS ( .02*  ( [RowCount] - 1 ) ) + 1
MEMBER [Measures].[i0p02Lo] AS FIX([i0p02]) - 1
MEMBER [Measures].[i0p02Rem] AS ([i0p02] - FIX([i0p02]))
MEMBER [Measures].[n0p02Lo] AS (OrderedData.Item([i0p02Lo]), [Measures].[Weight])
MEMBER [Measures].[n0p02Hi] AS (OrderedData.Item([i0p02Lo] + 1), [Measures].[Weight])
MEMBER [Measures].[PCT0p02] AS [n0p02Lo] + ( [i0p02Rem] * ( [n0p02Hi] - [n0p02Lo] ))


MEMBER [Measures].[i0p2] AS ( .2*  ( [RowCount] - 1 ) ) + 1
MEMBER [Measures].[i0p2Lo] AS FIX([i0p2]) - 1
MEMBER [Measures].[i0p2Rem] AS ([i0p2] - FIX([i0p2]))
MEMBER [Measures].[n0p2Lo] AS (OrderedData.Item([i0p2Lo]), [Measures].[Weight])
MEMBER [Measures].[n0p2Hi] AS (OrderedData.Item([i0p2Lo] + 1), [Measures].[Weight])
MEMBER [Measures].[PCT0p2] AS [n0p2Lo] + ( [i0p2Rem] * ( [n0p2Hi] - [n0p2Lo] ))

MEMBER [Measures].[i0p5] AS ( .5*  ( [RowCount] - 1 ) ) + 1
MEMBER [Measures].[i0p5Lo] AS FIX([i0p5]) - 1
MEMBER [Measures].[i0p5Rem] AS ([i0p5] - FIX([i0p5]))
MEMBER [Measures].[n0p5Lo] AS (OrderedData.Item([i0p5Lo]), [Measures].[Weight])
MEMBER [Measures].[n0p5Hi] AS (OrderedData.Item([i0p5Lo] + 1), [Measures].[Weight])
MEMBER [Measures].[PCT0p5] AS [n0p5Lo] + ( [i0p5Rem] * ( [n0p5Hi] - [n0p5Lo] ))
--MEMBER [Measures].[PCT0p5] AS Median(OrderedData,  [Measures].[Weight])

MEMBER [Measures].[i0p8] AS ( .8*  ( [RowCount] - 1 ) ) + 1
MEMBER [Measures].[i0p8Lo] AS FIX([i0p8]) - 1
MEMBER [Measures].[i0p8Rem] AS ([i0p8] - FIX([i0p8]))
MEMBER [Measures].[n0p8Lo] AS (OrderedData.Item([i0p8Lo]), [Measures].[Weight])
MEMBER [Measures].[n0p8Hi] AS (OrderedData.Item([i0p8Lo] + 1), [Measures].[Weight])
MEMBER [Measures].[PCT0p8] AS [n0p8Lo] + ( [i0p8Rem] * ( [n0p8Hi] - [n0p8Lo] ))

MEMBER [Measures].[i0p98] AS ( .98*  ( [RowCount] - 1 ) ) + 1
MEMBER [Measures].[i0p98Lo] AS FIX([i0p98]) - 1
MEMBER [Measures].[i0p98Rem] AS ([i0p98] - FIX([i0p98]))
MEMBER [Measures].[n0p98Lo] AS (OrderedData.Item([i0p98Lo]), [Measures].[Weight])
MEMBER [Measures].[n0p98Hi] AS (OrderedData.Item([i0p98Lo] + 1), [Measures].[Weight])
MEMBER [Measures].[PCT0p98] AS [n0p98Lo] + ( [i0p98Rem] * ( [n0p98Hi] - [n0p98Lo] ))


member Ecart1 as [Measures].[PCT0p2]-[Measures].[PCT0p02]
member Ecart2 as [Measures].[PCT0p5]-[Measures].[PCT0p2]
member Ecart3 as  [Measures].[PCT0p8] - [Measures].[PCT0p5]
member Ecart4 as [Measures].[PCT0p98] -[Measures].[PCT0p8]

SELECT
{ PCT0p02, Ecart1, Ecart2, Ecart3, Ecart4  ,PCT0p98  } on 0
FROM [BDD PBM]

标签: reporting-servicesssasmdx

解决方案


推荐阅读