powerbi - DAX:如何编写 IF 语句以返回所选多个(特定)值的计算?
问题描述
这让我发疯了。假设我们想使用一个切片器,它有两个不同的值可以从一个维度中选择。有A和B。
让我们也说我的事实表连接到这个维度,但是它具有相同的维度和更多的选项。
我的切片器现在有 A、B 和(空白)。没什么大不了的。
现在假设我想通过在 DAX 公式中选择切片器来列出所有可能的计算结果,但在我的视觉中,我需要在IF()分支公式中列出所有这些结果:
我可以列出A:
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 或 (Blank) 或 All 或 None 的返回值;BUT NOT when multiple values of A & B are selected!
我如何写出这个 IF() 分支让它返回相同的东西,但是当同时选择 A 和 B 时?由于切片器中只有两个实际选项 - 我设法使用 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; dr:如何在选择全/无,非或特定的切片器值时使用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()))))
解决方案
VALUES 将为您提供范围内不同的当前选择。CONTAINS 允许您检查表是否包含具有一组值的任何行。
[ ]
公式:
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"
)
推荐阅读
- ruby - 如何在 ruby 中设置 Selenium MS Edge 驱动程序的选项?
- sql - SQL:选择具有最大值的行并按单列分组
- java - 如何将 Firebase SDK 添加到 JAVA 应用程序?
- android - 与属性 allowBackup (attr) 不兼容 boolean
- jquery - jQuery UI 对话框 dialogExtend 最大化;进入浏览器全屏模式并最大化对话框
- python - 使用 pytest 和 pytest-mock 使用 json 参数模拟 Flask POST 请求
- reinforcement-learning - 有谁知道为什么我会在使用“import pybulletgym”时出现这个错误
- django - 如何将函数应用于 values_list 查找中的字段
- css - 在物化 CSS 上更改日期选择器颜色
- java - OpenCSV + RestTemplate:数组类型