有没有一种方法可以动态切换powerpivot中活跃的关系(基于切片器选择)?

时间:2019-04-17 15:51:37

标签: powerbi powerquery

我在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的值,但这会创建很多重复的代码。

我希望最终用户能够以某种方式更改主动关系,但理想情况下,无需大量重复代码。

1 个答案:

答案 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"
)