我在MDX中真的很新,并且无法计算结果。我正在使用SSAS 2012并在Visual Studio中设计我的多维数据集。这是我目前的查询:
WITH MEMBER [DocCount] AS
IIF(([Measures].[Responsible Count] > 0 AND [Measures].[Responsible2 Count] > 0),
[Measures].[DocName]*0.5, [Measures].[DocName])
SELECT {[DocCount]} ON 0, [Analysis Table].[Responsible].MEMBERS ON 1
FROM [database]
SQL表就是这个
ID DocName Responsible Responsible2
1 100001 John Doe Mary Jane
2 100001 Mary Jane John Doe
3 100002 Mike Doe NULL
4 100003 John Doe Mike Doe
5 100003 John Doe Mike Doe
6 100004 Mary Jane NULL
[Measures].[Responsible Count] is "count of non-empty values" selection in VS
[Measures].[Responsible2 Count] is "count of non-empty values" selection in VS
[Measures].[DocName] is "distinct count" selection in VS
我需要计算DISTINCTCOUNT DocName,但是当Responsible AND Responsible2不为null时,Count应为* 0.5。问题是聚合立方体数据,然后才评估我的[DocCount] IIF。目前的结果如下:
Responsible DocCount
John Doe 1 --(2*0.5) because it distinct counts DocName and then *0.5 it
Mary Jane 1 -- (2*0.5) it does not care that ID 6 responsible2 is null
Mike Doe 1 -- (1) this is correct
我想要这个最终结果:
Responsible DocCount
John Doe 1 --(0.5+0.5) ID 1,2 and 4,5
Mary Jane 1.5 --(0.5 + 1) ID 1,2 and 6
Mike Doe 1 --(1 ) ID 3
如何修改我的查询以计算正确的结果?
答案 0 :(得分:0)
解决这个问题的最佳方法是正确建模:
定义一个“负责任”维度,其中包含出现在Responsible2或Responsible2列中的每个人的一个条目,以及一个“Document”维度表,其中每个不同文档包含一行。这些维度表中的每一个都应该具有数字主键列,并且可以具有该人员的其他属性(可能是部门,性别,...)或文档的其他列(可能是名称,文件系统中的路径,创建日期,编号)页面,...)。
然后你会得到一个有三列的事实表:两个引用维表的主键的外键列,以及一个名为DocCount
的度量列,它可能是1 / number of authors referenced by the document id
(即一位作者为1,两位作者为0.5)。
然后你要做的就是基于此设置多维数据集。您不需要任何复杂的MDX计算,Analysis Services将根据多维数据集结构处理所有内容。这也允许使用任意数量的负责人,而不仅仅是一个或两个负责人。
可以使用您的设计在MDX中解决您的请求,但这需要一些稍微复杂的MDX。
答案 1 :(得分:0)
最后我自己做了解决方案。我用命名查询替换了我的事实表,其中我添加了额外的列,它将只找到DocName的不同行,并评估该行是否同时为Responsible和Responsible2为null。如果是 - 它将输入0.5,否则 - 1.然后,从该列中添加Measure并测试我的结果非常简单。