您可以创建具有过滤器约束的 SSAS 表格度量吗?

Can you create an SSAS Tabular measure with filter constraints?

我正在努力思考如何为一个场景设计 SSAS 表格模型,在这个场景中,我在维度上有一个属性,该属性将修改相关事实的其他直接度量 table。

事实 table 目前有 1.55 亿行。该维度有 6200 行。我们需要的度量对单位体积事实求和,然后将该总和乘以属于维度的因子。用于此度量的上下文有一些限制,那么:聚合永远不能包含来自相关维度的多行。这样做没有任何商业意义。

我从这个开始,我知道这是错误的:=SUM([Unit Volume])*Products[Foo Factor],当然设计师会抱怨,因为相关属性有很多值,但没有特定的上下文。

我现在的解决方法是创建一个计算列,将因素纳入事实 table:=RELATED(Products[Foo Factor]),然后我可以创建一个如下所示的度量:=SUM([Unit Volume])*AVERAGE([Foo Factor]).

我不喜欢在该事实上放置计算列的想法 table。它很大,而且只会越来越大。我也不喜欢似乎没有办法对给定度量的上下文施加限制,因此我可以确保我们不会在多个产品中汇总数量。或者有没有?

在我看来,我们的情况并不少见,但我对 DAX 还太陌生,不知道如何正确建模。如果我在我熟悉的 SQL 世界中,我会使用这样的窗口函数:

select sum([Unit Volume]) over (partition by <context goes here>) as [Unit Volume Total]

我可以用 DAX 在度量中创建这样的东西吗?

更新 看起来应该可行,但设计师仍然咆哮:

=CALCULATE(SUM('My Facts'[Unit Volume])*Products[Foo Factor],FILTER(Products,Products[Product Code]="0"))

我的想法是 [Product Code]="0" 过滤器将被当前上下文替换,并且由于 [Product Code] 被定义为相关 table 上的键,SSAS 会知道我的意图。唉,没有。

我想我可能有。似乎我可能无法摆脱对 foo 因子使用 AVERAGE 聚合,但 HASONEVALUE 函数确实强制执行了我想要的约束。

这应该有效:

=
IF (
    HASONEVALUE ( Products[Product Code] ),
    SUM ( 'My Facts'[Unit Volume] ) * AVERAGE ( Products[Foo Factor] ),
    SUM ( [Unit Volume] )
)

请试试这个: =CALCULATE((SUM(我的事实[单位体积])*产品[Foo Factor]),产品[产品代码]=0)

另外请确认Product Code格式。