您可以创建具有过滤器约束的 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格式。
我正在努力思考如何为一个场景设计 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格式。