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 DAX:如何编写IF语句,以返回所选多个(特定)值的计算结果?_Powerbi_Dax - Fatal编程技术网

Powerbi DAX:如何编写IF语句,以返回所选多个(特定)值的计算结果?

Powerbi DAX:如何编写IF语句,以返回所选多个(特定)值的计算结果?,powerbi,dax,Powerbi,Dax,这让我快发疯了。假设我们想要使用一个切片器,它有两个不同的值可以从维度中选择。有A和B 我们还可以说,我的事实表连接到这个维度,但是它有相同的维度和更多的选项 我的切片器现在有A、B和(空白)。没什么大不了的 现在让我们假设我想通过在DAX公式中选择切片器列出所有可能的计算结果,但在我的可视化中,我需要在IF()分支公式中列出所有这些结果: 我可以列出: IF(MAX(SlicerDim[Column]) = "A", CALCULATE([Calculation], Sli

这让我快发疯了。假设我们想要使用一个切片器,它有两个不同的值可以从维度中选择。有A和B

我们还可以说,我的事实表连接到这个维度,但是它有相同的维度和更多的选项

我的切片器现在有A、B和(空白)。没什么大不了的

现在让我们假设我想通过在DAX公式中选择切片器列出所有可能的计算结果,但在我的可视化中,我需要在IF()分支公式中列出所有这些结果:

我可以列出:

IF(MAX(SlicerDim[Column]) = "A", CALCULATE([Calculation], SlicerDim[Column] = "A")
我可以列出B:

IF(MAX(SlicerDim[Column]) = "A", CALCULATE([Calculation], SlicerDim[Column] = "A")
我也可以列出(空白)计算:

CALCULATE([Calculation], SlicerDim[Column] = Blank())
即使在所有切片器元素都打开或关闭的情况下,我也成功地从中获得了一个计算结果,使用:

NOT(ISFILTERED(SlicerDim[Column])), CALCULATE([Calculation], SlicerDim[Column] = "A" || SlicerDim[Column] = "B")
注意,我需要这个IF()分支实际返回使用a&B值的计算,因此现在我有了选择a或B或(空白)或全部或无时的返回;但如果选择了A和B的多个值,则情况并非如此

如果同时选择A和B,如何写出IF()分支以使其返回相同的内容?由于切片器中只有两个real选项,因此我设法使用了MIN()和MAX(),通过使用它们的名称或索引号使其工作

IF((MIN(SlicerDim[Column]) = "A" && MAX(SlicerDim[Column]) = "B") || NOT(ISFILTERED(Paslauga[Paslauga])), CALCULATE([Calculation], SlicerDim[Column] = "A" || SlicerDim[Column] = "B")
但是-我想要一个更容易理解/健壮/可重用的公式,这样我就可以从切片器中列出许多可选值,并让它返回特定选定切片器值的计算结果

请帮忙。 我一直在上下搜索,似乎没有一个简单的方法来解决这个问题,尽管只需删除IF路径,然后使用该死的切片器来解决这类难题

TL;博士: 当选择全部/无或非空或特定切片器值时,如何使用DAX编写IF()分支计算以获得结果?

我的最大努力: 我希望改进第一个IF()分支,使其不必使用MIN/MAX,因为如果切片器中有两个以上的实物期权,我希望能够重用此类公式:

IF_branch = 
IF((MIN(SlicerDim[Column]) = "A" && MAX(SlicerDim[Column]) = "B" || NOT(ISFILTERED(SlicerDim[Column])), CALCULATE([Calculation], SlicerDim[Column] = "A" || SlicerDim[Column] = "B"),
IF(MAX(SlicerDim[Column]) = "A", CALCULATE([Calculation], SlicerDim[Column] = "A"),
IF(MAX(SlicerDim[Column]) = "B", CALCULATE([Calculation], SlicerDim[Column] = "B"),
CALCULATE([Calculation], SlicerDim[Column] = BLANK()))))

想想你要找的是什么

值将为您提供范围内的不同当前选择。 “包含”用于检查表中是否包含具有一组值的行

[]

公式:

selected Scenarios = CONCATENATEX(VALUES(DimScenario[ScenarioName]);[ScenarioName];";")

Contains Forecast and Budget? = 
    IF(
        CONTAINS(VALUES(DimScenario[ScenarioName]);[ScenarioName];"Forecast") &&
        CONTAINS(VALUES(DimScenario[ScenarioName]);[ScenarioName];"Budget")
        ;"Yes"
        ;"No"
    )

感谢您的解决方案,mxix!我会试试的。在我发布后不久,一位同事建议使用Contains(),但我们并没有将Values()合并到混合中。这看起来很合理,就像你描述的那样。在我看来,DAX中的IF()分支公式具有可重用性和较少的维护作用,尽管很难想象。我这么想没错吧?我可以很容易地写出每个分支作为它自己的公式,但接下来我必须进行许多度量。我现在确实看到,这在有/没有值的情况下是有效的-添加值的原因是什么()?