MDX 将维度与事实分组时出现问题-Table
MDX Problems grouping Dimension with Fact-Table
我是 SSAS 和 MDX 的新手。我们的数据结构如下:
事实表(医疗案例):
ID | Date | Result Test A | Result Test B | Patient ID
1 | 1.9.15 | 1 | -1 | Patient_1
2 | 1.9.15 | -1 | 1 | Patient_1
3 | 1.9.15 | 1 | -1 | Patient_2
4 | 1.9.15 | 0 | -1 | Patient_2
5 | 1.9.15 | -1 | 0 | Patient_2
每个案例都有测试 a 或测试 b 的结果。一个case有可能包含test a和test b的结果,但大多数情况下test a的结果是填充的,test b的结果是空的或相反的。
患者维度:
ID | Firstname | Lastname | Date of Birth
1 | Max | Mustermann | 1.9.1989
2 | Tina | Mustermann | 1.9.1989
已更新
我已经为结果添加了维度
结果测试维度:
ID | Name
-1 | Undefined
0 | Negative
1 | Positive
2 | Suspect
结果测试 B 维度:
ID | Name
-1 | Undefined
0 | Negative
1 | Positive
我们之间有一个外键关系
- [FactTable].[患者 ID] 和 [患者].[ID]
- [FactTable].[结果测试 A] 和 [结果测试 A].ID
- [FactTable].[结果测试 B] 和 [结果测试 B].ID
除了这个结构,我们还有列日期的维度。
我们的测量值:
- [测量].[案例数](以 [FactTable].[ID] 为准)
- [测量值]。[患者人数](以 [FactTable] 为准。[患者 ID])
我们的问题是我们想要为患者数量创建一个度量并将其与结果结合起来。这样我们在Filter vor Result Test A und Result Test B时得到如下结果。
Number of Patients (Filter: [Result Test A].Positive, [Result Test B].Positive) -> 1
Number of Patients (Filter: [Result Test A].Negative, [Result Test B].Negative) -> 1
Number of Patients (Filter: [Result Test A].Positive) -> 2
Number of Patients (Filter: [Result Test B].Positive) -> 1
我不知道如何实现此测量。这甚至可能吗,还是我必须为患者创建另一个 FactTable?
我对您的 FactTable 感到困惑,结果测试是措施吗?您如何处理 FactTables 中的字符串?
此代码未经测试,但您可以尝试一下:创建查询成员
编辑:添加了未经测试的代码,我对你的立方体结构一无所知所以我猜了一点。
WITH MEMBER [Measures].[Patients Results A] AS
Sum
(
[Patient].[PatientID].[PatientID]
, IIf
(
( [Measures].[Medical Case Ms], [Result A].[Name].CurrentMember ) = NULL
, NULL
, 1
)
)
MEMBER [Measures].[Patients Results B] AS
Sum
(
[Patient].[PatientID].[PatientID]
, IIf
(
( [Measures].[Medical Case Ms], [Result B].[Name].CurrentMember ) = NULL
, NULL
, 1
)
)
MEMBER [Positive A] AS
( [Measures].[Patients Results A], [Result A].[Name].&[1] )
MEMBER [Positive B] AS
( [Measures].[Patients Results B], [Result B].[Name].&[1] )
MEMBER [Positive A&B] AS
( [Positive A] + [Positive B] )
SELECT
{ [Positive A], [Positive B], [Positive A&B] } ON COLUMNS
FROM [Cube]
在上面的代码中,为正 A 和正 B 措施创建了成员,您必须为您在问题中指定的措施创建缺少的成员。让我知道这是否有帮助
我是 SSAS 和 MDX 的新手。我们的数据结构如下:
事实表(医疗案例):
ID | Date | Result Test A | Result Test B | Patient ID
1 | 1.9.15 | 1 | -1 | Patient_1
2 | 1.9.15 | -1 | 1 | Patient_1
3 | 1.9.15 | 1 | -1 | Patient_2
4 | 1.9.15 | 0 | -1 | Patient_2
5 | 1.9.15 | -1 | 0 | Patient_2
每个案例都有测试 a 或测试 b 的结果。一个case有可能包含test a和test b的结果,但大多数情况下test a的结果是填充的,test b的结果是空的或相反的。
患者维度:
ID | Firstname | Lastname | Date of Birth
1 | Max | Mustermann | 1.9.1989
2 | Tina | Mustermann | 1.9.1989
已更新
我已经为结果添加了维度
结果测试维度:
ID | Name
-1 | Undefined
0 | Negative
1 | Positive
2 | Suspect
结果测试 B 维度:
ID | Name
-1 | Undefined
0 | Negative
1 | Positive
我们之间有一个外键关系
- [FactTable].[患者 ID] 和 [患者].[ID]
- [FactTable].[结果测试 A] 和 [结果测试 A].ID
- [FactTable].[结果测试 B] 和 [结果测试 B].ID
除了这个结构,我们还有列日期的维度。
我们的测量值:
- [测量].[案例数](以 [FactTable].[ID] 为准)
- [测量值]。[患者人数](以 [FactTable] 为准。[患者 ID])
我们的问题是我们想要为患者数量创建一个度量并将其与结果结合起来。这样我们在Filter vor Result Test A und Result Test B时得到如下结果。
Number of Patients (Filter: [Result Test A].Positive, [Result Test B].Positive) -> 1
Number of Patients (Filter: [Result Test A].Negative, [Result Test B].Negative) -> 1
Number of Patients (Filter: [Result Test A].Positive) -> 2
Number of Patients (Filter: [Result Test B].Positive) -> 1
我不知道如何实现此测量。这甚至可能吗,还是我必须为患者创建另一个 FactTable?
我对您的 FactTable 感到困惑,结果测试是措施吗?您如何处理 FactTables 中的字符串?
此代码未经测试,但您可以尝试一下:创建查询成员
编辑:添加了未经测试的代码,我对你的立方体结构一无所知所以我猜了一点。
WITH MEMBER [Measures].[Patients Results A] AS
Sum
(
[Patient].[PatientID].[PatientID]
, IIf
(
( [Measures].[Medical Case Ms], [Result A].[Name].CurrentMember ) = NULL
, NULL
, 1
)
)
MEMBER [Measures].[Patients Results B] AS
Sum
(
[Patient].[PatientID].[PatientID]
, IIf
(
( [Measures].[Medical Case Ms], [Result B].[Name].CurrentMember ) = NULL
, NULL
, 1
)
)
MEMBER [Positive A] AS
( [Measures].[Patients Results A], [Result A].[Name].&[1] )
MEMBER [Positive B] AS
( [Measures].[Patients Results B], [Result B].[Name].&[1] )
MEMBER [Positive A&B] AS
( [Positive A] + [Positive B] )
SELECT
{ [Positive A], [Positive B], [Positive A&B] } ON COLUMNS
FROM [Cube]
在上面的代码中,为正 A 和正 B 措施创建了成员,您必须为您在问题中指定的措施创建缺少的成员。让我知道这是否有帮助