如何根据所选过滤器在Power BI DAX中动态更改过滤器

时间:2020-03-07 00:17:42

标签: powerbi dax

我有一个供人们在过滤器中使用的表,并从中选择了多个项目,例如,该表中的值是 美元 加拿大元 第1类 类别2

用户将选择美元和日历年,这需要影响2个DAX度量。第一个度量应该是2个不同列的总和1,类似于

Currency Amount = CALCULATE(
    if(SELECTEDVALUE('Filter'[Description])="USD",
        Sum(Test[USD Amount]),
        Sum(Test[CD Amount])
))

然后第二种措施应该类似于下面的内容,但是下面的内容不起作用,并且我可以肯定地说,有一种更好的方法可以编写总体内容:

Currency Category Amount =
    if(SELECTEDVALUE('Filter'[Description])="Cat 1",
    CALCULATE(
        [Currency Amount],
        Filter(Test, Test[Category]="Cat 1")),
    CALCULATE(
        [Currency Amount],
        Filter(Test, Test[Category]="Cat 2"))
)

此问题是切片器为多选,并且“选定值”功能似乎无法与此配合使用。

2 个答案:

答案 0 :(得分:0)

我提出了以下与我要寻找的内容相匹配的内容。如果有人可以提出更好的解决方案,我会很乐意接受。我对此不满意的主要是整个过程的重复。正如我在评论中提到的那样,我将要使用的实际过滤器要复杂得多,如下所示。

Currency Category Amount = if(
    Contains(Values('Filter'[Description]), 'Filter'[Description], "Cat 1"),
    CALCULATE(
        [Currency Amount],
        Filter(Test, Test[Category]="Cat 1")),
    CALCULATE(
        [Currency Amount],
        Filter(Test, Test[Category]="Cat 2"))
)

猫1

FILTER (
        ALL ( 'Calendar' ),
        'Calendar'[Month In Fiscal Year] <= MAX ( 'Calendar'[Month In Fiscal Year] )
            && 'Calendar'[Fiscal Year] = MAX ( 'Calendar'[Fiscal Year] )
    )

猫2

FILTER (
        ALL ( 'Calendar' ),
        'Calendar'[Month In APY] <= MAX ( 'Calendar'[Month In APY] )
            && 'Calendar'[APY] = MAX ( 'Calendar'[APY] )
    )

答案 1 :(得分:0)

减少代码重复的一种方法是将一些计算封装在不同的度量中,这样,如果您需要相同的计算逻辑,则可以只使用适当的度量(该逻辑将集中在一点上)。

我使用了SWITCH(TRUE(),...)选择适当的度量,因为如果选项大于2,它可以使您获得更简洁的代码;如果没有,则可以设置默认结果选择或所选值无效/映射。

请注意,由于我没有验证公式的数据模型,因此可能会出现一些语法错误。

Currency Amount = CALCULATE(
--you probably have already replaced this with something different from SELECTEDVALUE
--If more than 2 currency exists, using SWITCH might be better (Pros above)
    if(SELECTEDVALUE('Filter'[Description])="USD", 
        Sum(Test[USD Amount]),
        Sum(Test[CD Amount])
))

Amount YTD (Fiscal Cal) =
CALCULATE(
    [Currency Amount]
    ,ALL ( 'Calendar' )
    ,'Calendar'[Month In Fiscal Year] <= MAX ( 'Calendar'[Month In Fiscal Year] )
        && 'Calendar'[Fiscal Year] = MAX ( 'Calendar'[Fiscal Year] )
)


Amount YTD (APY) =
CALCULATE(
    [Currency Amount]
    ,ALL ( 'Calendar' )
    ,'Calendar'[Month In APY] <= MAX ( 'Calendar'[Month In APY] )
        && 'Calendar'[APY] = MAX ( 'Calendar'[APY] )
)

Currency Category Amount = 
SWITCH(
    TRUE()
    ,Contains(Values('Filter'[Description]), 'Filter'[Description], "Cat 1")
        ,[Amount YTD (Fiscal Cal)]
    ,Contains(Values('Filter'[Description]), 'Filter'[Description], "Cat 1")
        ,[Amount YTD (APY)]
    ,BLANK() --If nothing match return blank (remove it if not needed)
)

我注意到您的“过滤器”表包含多个实体(货币,年/月),如果可行/适当,将其拆分为多个过滤器表“ FilterCurrency”,“ FilterPeriod”等...可能对您有所帮助通过启用切片器中的“总是被选中”,这在某些情况下非常有用。

相关问题