我不是MSAS Cube的专家,所以这可能是显而易见的,但这阻碍了我们团队的一个重要功能。
我们有一个"指标"(基本上是计算器中的值(的事实表,这些指标是为特定日期计算的。指标有一个versionId,以便按照函数规则对其进行分组。
它就像:
From Date, Value, NodeId, VersionId
D0 - 1.45 - N2 - V0
我们有一个"VersionsAssociation"的事实表,它列出了所有有效和可见的版本(与"Indicator"事实表中的版本完全相同(以及日期。
为了满足客户的需求,某些版本在多个日期可见。例如,为日期D0计算的版本对于日期D1、D2、…可以是可见的/重新复制的。。。;因此,对于特定版本V0,我们将在"版本关联"中使用
VersionId , Date From (computed), Date To (Visible at what date)
V0 - D0 - D0
V0 - D0 - D1
V0 - D0 - D2
V0 - D0 - D3
在我们的多维数据集模型中,"指标"事实有一个"起始日期",即它们的计算日期,但没有"截止日期",因为它们何时可见并不取决于指标,而是由"版本关联"决定。
这意味着在我们的"维度用法"面板中,我们有一个从"指标"指向维度"截止日期"上的"版本关联"的多对多关系。
到目前为止,这部分工作如预期。当我们在Excel中选择"截止日期"=D1时,我们会看到从D0重新复制的指标,具有正确的值(没有重复(。
然后我们有一个叫做投影的东西,我们把一个指标值和一个特定的维度分开。为此,我们有一个称为"投影"的第三个度量组,其值称为"权重"。
权重有一个"截止日期",因为权重是为特定日期计算的,即使指标从D0复制到D1,在投影时,也会使用D1权重进行投影。
此外,我们复制了迄今为止所有可用的权重,这很奇怪,但如果没有它,结果将是纯粹的混乱。
这意味着我们将在权重中:
NodeId,From Date, To Date, Projection Axis, Weight
N2 , D0 , D0 , P1 , 0.75
N2 , D0 , D0 , P2 , 0.25 (a value on node N2 would be split into 2 different values, where the sum is still the same)
N2 , D0 , D1 , P1 , 0.70
N2 , D0 , D1 , P2 , 0.30
问题来了:
- 测量组"投影"one_answers"指示器"直接链接到维度"投影">
- "投影"直接链接到"起始日期"one_answers"截止日期"维度
- "指标"通过"版本关联"度量值组直接链接到"起始日期"维度,但只有m2m引用到"截止日期"维度
要应用投影权重,我们对"指标"度量值组中的度量值使用度量值表达式,该表达式类似于"[Value Unit]*[Weight]"。
由于某些原因,这导致MSAS没有正确地排除有资格应用于"指标"度量组中某个值的权重。
例如,如果我们查看excel并要求D1日期(所有日期的行为相同(,在Projection Axsi P1上,我们得到:
Value Weight
1.45 * 0.75 (Weight: From Date D0, To Date D0, P1)
+ 1.45 * 0.70 (Weight: From Date D0, To Date D1, P1)
对于D1和P2,我们有:
Value Weight
1.45 * 0.25 (Weight: From Date D0, To Date D0, P2)
+ 1.45 * 0.30 (Weight: From Date D0, To Date D1, P2)
这会导致这些值毫无意义并且不可读。
因此,所有这些都是为了寻求一种方法来限制可以应用于度量表达式中的权重。我们试图将"起始日期"、"截止日期"的scope与"权重"度量或"值"度量一起使用,但多维数据集从未介入我们的scope说明。
这很长,也很复杂,但我们陷入了困境。
我不确定我是否完全理解了你的问题,但我所理解的是,由于事实指标中没有投影轴,因此对于类似的FromDate和ToDate,当选择projection时,它们会重复值。来自您的数据的示例
D0,D0,P1,0.75D0,D0,P2,0.25
为此,指示符值对于两行重复1.45,其中对于第一行应该是1.45*0.75,对于第二行应该是1.45*0.25。
如果是这个问题,请尝试以下查询
with member Measures.IndicatorTest
as
([DimFromDate].[FromDate].CurrentMember,
[DimToDate].[ToDate].CurrentMember,
[Value Unit])
member Measures.ProjectionTest
as
([DimFromDate].[FromDate].CurrentMember,
[DimToDate].[ToDate].CurrentMember,
[DimProjection].[Projection].CurrentMember
[Weight])
member Measures.WeightedIndicator
as
Measures.IndicatorTest*Measures.ProjectionTest
select Measures.WeightedIndicator
on columns,
nonempty
(
[DimFromDate].[FromDate].[FromDate],
[DimToDate].[ToDate].[ToDate],
[DimProjection].[Projection].[Projection]
)
on rows
from yourCube
对于闭包,事实证明预期的行为是不可能的(就我们团队所尝试的而言(。因此,我们恢复到将3个表中的两个合并在一起,并且只允许一个多对多联接到度量组中。