powerbi - DAX 使用 IF 和 AND 函数
问题描述
我正在尝试创建一个带有值和预测的趋势表。预测需要从当前月份开始。我正在使用这个 dax 函数:
Spend Forecast =
IF (
OR (
DIVIDE (
CALCULATE (
SUM ( refv_Spend_Cap[Spend_2019] ),
FILTER ( refv_Spend_Cap, refv_Spend_Cap[Split] = "Spend Actual" )
),
1000000
)
< 1,
DIVIDE (
CALCULATE (
SUM ( refv_Spend_Cap[Spend_2019] ),
FILTER ( refv_Spend_Cap, refv_Spend_Cap[Ind_Monthend] = "x" )
),
1000000
)
< 1
),
DIVIDE (
CALCULATE (
SUM ( refv_Spend_Cap[Spend_2019] ),
FILTER ( refv_Spend_Cap, refv_Spend_Cap[Split] = "Spend Forecast" )
),
1000000
),
""
)
该公式正在计算以检查是否满足这两个条件:如果没有值,则填充预测,或者如果 ind monthend = 'x' 则应填充,如果不满足这两个条件则应将其留空。查询中没有语法错误,但我收到此错误:
True/False 表达式不指定列。用作表过滤器表达式的每个 True/False 表达式必须恰好引用一列
我哪里做错了?
解决方案
这么长的公式很难理解。将它们分解为多个度量是最佳实践。例如,您的代码可以重写如下:
创建基础度量:
Total Spend = SUM ( refv_Spend_Cap[Spend_2019] ) / 1000000
现在重新使用基本度量来创建 3 个条件度量。此处无需使用 FILTER:
Spend Actual = CALCULATE ( [Total Spend], refv_Spend_Cap[Split] = "Spend Actual" )
Spend X = CALCULATE ( [Total Spend], refv_Spend_Cap[Ind_Monthend] = "x" )
Spend Forecast = CALCULATE ( [Total Spend], refv_Spend_Cap[Split] = "Spend Forecast" )
那么最终的结果很简单:
Forecast = IF ( [Spend Actual] < 1 || [Spend X] < 1, [Spend Forecast], "")
很容易理解正在发生的事情,也更容易调试。您还将获得性能奖励,因为(通常)重复使用的度量只被缓存和计算一次。
试试这个代码,如果它仍然给你带来问题,描述新的错误,我会帮你修复它。
顺便说一句,有一个流行的免费工具可以格式化您的 DAX 代码: Dax Formatter
推荐阅读
- python - 如何在不将其作为参数传递给 python 类的情况下引用对象变量
- c++ - 这个星号 (*) 在 C++ 中的含义是什么?-- 指向成员的指针
- python - python:如何确定一个值是否包含在二维列表的某一列中?
- javascript - 更改 img 并保存 cookie html & javascript
- ubuntu - 如何使用 Ubuntu 在 electron.dialog.showOpenDialog 中查看自定义书签?
- meteor - Meteor + Apollo 订阅:Websocket 连接关闭
- android - 如何在两个布局上放置叠加图像视图?
- ansible - 是否可以在清单文件中使用“主机名”作为 uri 模块中的参数“url”?
- python - django-rest-framework 中的 PDF
- python - Python - 迭代两个 CSV 文件中的每一行并比较时间戳值