我不是 MSAS Cube 方面的专家,所以这可能很明显,但这阻碍了我们团队中的一个重要功能。
我们有一个“指标”(基本上来自计算器的值)的事实表,它是针对特定日期计算的。指标有一个 versionId,按照功能规则对它们进行分组。
它是这样的:
From Date, Value, NodeId, VersionId
D0 - 1.45 - N2 - V0
我们有一个“VersionsAssociation”事实表,其中列出了所有有效且可见的版本(与“Indicator”事实表中的版本完全相同)以及日期。
为了满足客户的需求,一些版本在多个日期可见。例如,为日期 D0 计算的版本可能对日期 D1、D2、... 可见/重新复制;因此对于特定版本 V0,我们将在 "VersionAssociation" 中:
VersionId , Date From (computed), Date To (Visible at what date)
V0 - D0 - D0
V0 - D0 - D1
V0 - D0 - D2
V0 - D0 - D3
...
在我们的多维数据集模型中,“Indicators”事实有一个“From Date”,即计算它们的日期,但没有“To Date”,因为它们何时可见并不取决于指标,而是由“VersionAssociation”决定.
这意味着在我们的“Dimension Usage”面板中,我们有一个从“Indicator”指向“To Date”维度上的“VersionAssociation”的多对多关系。
到目前为止,这部分按预期工作。当我们在 Excel 中选择 "To Date" = D1 时,我们会看到从 D0 复制的指标,具有正确的值(无重复)。
然后我们有一个叫做投影的东西,我们将指标值与特定维度分开。为此,我们有一个名为“Projection”的第三个测量组,其值称为“Weight”。
权重具有“截至日期”,因为权重是针对特定日期计算的,即使指标从 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
问题来了:
- 度量组“投影”和“指标”直接链接到维度“投影”。
- “Projection”与“From Date”和“To Date”维度有直接链接。
- “指标”与“起始日期”维度有直接链接,但通过“版本关联”度量组仅对“截止日期”维度进行 m2m 引用。
为了应用投影权重,我们在“指标”度量组的度量上使用度量表达式,类似于“[价值单位] * [重量]”。
由于某些原因,这会导致 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)
这会导致这些值没有任何意义并且不可读。
所以所有这些都是为了寻求一种方法来限制可以在度量表达式中应用的权重。我们尝试在 "From Date" 、 "To Date" 上使用 "Weight" 度量或 "Value" 度量的范围,但多维数据集从不介入我们的 SCOPE 指令。
这很长,也很复杂,但我们被困住了。