我试图了解如何为一个场景设计SSAS表格模型,我在维度上有一个属性,可以修改相关事实表上的其他直接测量。
事实表目前为1.55亿行。该维度有6200行。我们需要的度量将单位体积事实相加,然后将该总和乘以属于维度的因子。用于此度量的上下文具有一些约束,那么:聚合永远不会包含相关维度中的多个行。这样做并没有任何商业意义。
我从这开始,我知道这是错误的:=SUM([Unit Volume])*Products[Foo Factor]
,当然设计师抱怨因为相关属性有很多没有特定上下文的值。
我现在的解决方法是创建一个计算列,将该因子放入事实表:=RELATED(Products[Foo Factor])
,然后我可以创建一个如下所示的度量:=SUM([Unit Volume])*AVERAGE([Foo Factor])
。
我不喜欢将计算列放在该事实表上的想法。这是巨大的,它只会变得更大。我也不喜欢看起来没有办法对特定措施的上下文施加约束,因此我可以确保我们不会在多个产品上卷积。或者有吗?
在我看来,我们的并不是一个不寻常的场景,但我对DAX来说太新了,不知道如何正确建模。如果我在熟悉的SQL世界中,我会使用这样的窗口函数:
select sum([Unit Volume]) over (partition by <context goes here>) as [Unit Volume Total]
我可以用DAX在一个小节中创建这样的东西吗?
UPDATE 看起来这应该有效,但设计师仍然咆哮道:
=CALCULATE(SUM('My Facts'[Unit Volume])*Products[Foo Factor],FILTER(Products,Products[Product Code]="0"))
我的想法是[产品代码] =&#34; 0&#34; filter将被当前上下文替换,并且由于[Product Code]被定义为相关表上的键,因此SSAS会知道我的意图。唉,它没有。
答案 0 :(得分:0)
我想我可能有。好像我可能无法在foo因子上使用AVERAGE聚合,但HASONEVALUE函数确实强制执行我想要的约束。
这应该有效:
=
IF (
HASONEVALUE ( Products[Product Code] ),
SUM ( 'My Facts'[Unit Volume] ) * AVERAGE ( Products[Foo Factor] ),
SUM ( [Unit Volume] )
)
答案 1 :(得分:0)
请试试这个: = CALCULATE((SUM(我的事实[单位体积])*产品[Foo Factor]),产品[产品代码] = 0)
另请确认产品代码格式。