我在PowerPivot(2016)中有一个事实表(MORT)和一个维度表(GEO)。在表之间有两个联接,其中MORT中的两列与GEO中的一列相关。我们可以将一个联接称为RES,将另一个联接称为REG。我有大量的指标,我希望允许用户使用RES和REG关系在查看指标之间快速切换-本质上,我希望能够切换活动关系(在广告客户中称为switch
码)。这可能是基于分离的切片器。
我尝试嵌套一个if语句和定义要在CALCUATE中使用的变量的各种方式,但是有一个错误,即USERELATIONSHIP只能在计算中使用(在if的情况下),或者USERELATIONSHIP仅接受一个列引用(对于var)。
IF语句
MEASURE:= CALCULATE(COUNT(MORT[ID]), GEO,
IF(LASTNONBLANK(SWITCH,1)="RES",
USERELATIONSHIP(MORT[RES], GEO[AREA]),
USERELATIONSHIP(MORT[REG], GEO[AREA]))
VAR
MEASURE:=
VAR switch = IF(LASTNONBLANK(Switch,1)="RES", MORT[RES], MORT[REG])
RETURN
CALCULATE(COUNT(MORT[ID]), GEO, USERELATIONSHIP(switch, GEO[AREA])
我可以在开始时使用if语句创建每个度量,以检查switch的值,但这会创建很多重复的代码。
我希望最终用户能够以某种方式更改主动关系,但理想情况下,无需大量重复代码。
答案 0 :(得分:1)
这样怎么样?
MEASURE :=
IF (
LASTNONBLANK ( Switch, 1 ) = "RES",
CALCULATE ( COUNT ( MORT[ID] ), GEO, USERELATIONSHIP ( MORT[RES], GEO[AREA] ) ),
CALCULATE ( COUNT ( MORT[ID] ), GEO, USERELATIONSHIP ( MORT[REG], GEO[AREA] ) )
)
编辑:
在您的评论中,您说您尝试过此操作:
M :=
VAR calc =
FILTER ( MORT, MORT[CAUSE] >= "I" && 'Remake Data'[CAUSE] <= "I9" )
VAR select =
IF (
HASONEVALUE ( 'SWITCH'[Switch] ),
LASTNONBLANK ( 'SWITCH'[Switch], 1 ),
"ERROR"
)
RETURN
IF (
select = "RES",
CALCULATE ( COUNTROWS ( calc ), USERELATIONSHIP ( MORT[RES], GEO[Area] ) ),
IF (
selection = "REG",
CALCULATE ( COUNTROWS ( calc ), USERELATIONSHIP ( MORT[REG], GEO[Area] ) ),
"ERROR"
)
)
这有一些问题,但是主要是,如果将某物定义为变量,则它是常数,不会受到CALCULATE
中其他事物的影响。请尝试以下方法。
定义一个新度量:
CountRowsMeasure =
COUNTROWS ( FILTER ( MORT, MORT[CAUSE] >= "I" && 'Remake Data'[CAUSE] <= "I9" ) )
然后在您的M
量度中使用该量度:
M =
VAR select = SELECTEDVALUE( 'SWITCH'[Switch], "ERROR" )
RETURN
SWITCH (
select,
"RES", CALCULATE ( [CountRowsMeasure], USERELATIONSHIP ( MORT[RES], GEO[Area] ) ),
"REG", CALCULATE ( [CountRowsMeasure], USERELATIONSHIP ( MORT[REG], GEO[Area] ) ),
"ERROR"
)