Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 如何根据选定的滤波器动态更改Power BI DAX中的滤波器_Powerbi_Dax - Fatal编程技术网

Powerbi 如何根据选定的滤波器动态更改Power BI DAX中的滤波器

Powerbi 如何根据选定的滤波器动态更改Power BI DAX中的滤波器,powerbi,dax,Powerbi,Dax,我有一个人们在过滤器中使用的表,并从中选择多个项目,例如,此表中的值为 美元 加元 第一类 第2类 用户将选择美元和日历年,我需要影响2 DAX度量。第一个度量应该是两个不同列的和1,类似于 Currency Amount = CALCULATE( if(SELECTEDVALUE('Filter'[Description])="USD", Sum(Test[USD Amount]), Sum(Test[CD Amount]) )) 第二个指标应该类似于

我有一个人们在过滤器中使用的表,并从中选择多个项目,例如,此表中的值为 美元 加元 第一类 第2类

用户将选择美元和日历年,我需要影响2 DAX度量。第一个度量应该是两个不同列的和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"))
)

问题是切片器是多选的,并且“选定值”函数似乎不能正确使用它。

我已经提出了以下与我所寻找的匹配的方法。如果有人能想出更好的解决办法,我会欣然接受。我最不喜欢的是整个事情的重复。正如我在评论中提到的,我将要使用的实际过滤器要复杂得多,如下所示

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"))
)
第一类

过滤器(
全部(‘日历’),

“日历”[会计年度中的月份]减少代码重复的一种方法是将一些计算封装在不同的度量中,这样,如果您需要相同的计算逻辑,您可以使用适当的度量(逻辑将集中在一个点上)

我使用开关(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)
)
货币金额=计算(
--您可能已经将其替换为与SELECTEDVALUE不同的内容
--如果存在两种以上的货币,使用SWITCH可能更好(上面的优点)
如果(SELECTEDVALUE('Filter'[说明])=“USD”,
金额(测试【美元金额】,
总和(测试[CD金额])
))
年初至今金额(会计核算)=
算计(
[货币金额]
,全部(‘日历’)

,“Calendar”[会计年度中的月份]SELECTEDVALUE仅在选择了一个值时返回所选值,如果选择了多个值,则可以返回默认值或不返回任何值。您要求的行为看起来“正常”对我来说,你可能不需要写这种度量。你能发布你的数据模型结构吗?上面是我真正想要做的过于简化的版本。我真正要做的是第1类/第2类是会计年度与日历年度,所以应用的过滤器在它们之间完全不同。我想要的是SelectedValue,但这适用于多个选定项,并确定我要查找的是否是所选项中的一项。上述问题是,它创建了大量度量,这是我试图避免的。然后我没有更好的解决方案。但我更喜欢具有依赖性的大量度量(通常高达3个级别)在虚拟表中相互关联并正确组织,以避免重复代码,特别是因为PBI缺乏查看公式或搜索所有度量值的集中方式。
FILTER (
        ALL ( 'Calendar' ),
        'Calendar'[Month In APY] <= MAX ( 'Calendar'[Month In APY] )
            && 'Calendar'[APY] = MAX ( 'Calendar'[APY] )
    )
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)
)