是否可以创建带有筛选约束的SSAS表格度量?

是否可以创建带有筛选约束的SSAS表格度量?,ssas,tabular,dax,Ssas,Tabular,Dax,我正试图了解如何为一个场景设计SSAS表格模型,在这个场景中,我在维度上有一个属性,该属性将修改相关事实表上的其他直接度量 事实表目前有1.55亿行。该维度有6200行。我们需要的量度是对单位体积事实求和,然后将该和乘以一个属于维度的因子。用于此度量的上下文有一些约束,因此:聚合不能包含来自相关维度的多行。这样做没有任何商业意义 我从这个开始,我知道这是错误的:=SUM[Unit Volume]*Products[Foo Factor],当然设计师会抱怨,因为相关属性有很多值,没有特定的上下文

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

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

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

我现在的工作是创建一个计算列,将因子带入事实表:=RELATEDProducts[Foo factor],然后我可以创建一个如下的度量:=SUM[Unit Volume]*AVERAGE[Foo factor]

我不喜欢将计算列放在事实表上的想法。它很大,而且只会越来越大。我也不喜欢这样,似乎没有一种方法可以对给定度量的上下文施加约束,这样我就可以确保我们不会在多个产品之间累积数量。还是有

在我看来,我们的场景并不罕见,但我对DAX来说太陌生了,不知道如何正确建模。如果我在熟悉的SQL世界中,我会使用如下窗口功能:

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

我的想法是,[Product Code]=0筛选器将被当前上下文替换,并且由于[Product Code]被定义为相关表上的键,因此SSAS将知道我的意图。唉,它没有。

我想我可能有它。看起来我可能无法避免在foo因子上使用平均聚合,但是HASONEVALUE函数确实执行了我想要的约束

这应该起作用:

=
IF (
    HASONEVALUE ( Products[Product Code] ),
    SUM ( 'My Facts'[Unit Volume] ) * AVERAGE ( Products[Foo Factor] ),
    SUM ( [Unit Volume] )
)
请试试这个: =计算摘要事实[单位体积]*产品[食品系数],产品[产品代码]=0

另外,请确认产品代码格式

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