如何在 DAX 中编写条件 for 循环?
how to write a conditional for loop in DAX?
我正在使用 PowerBI 创建一个仪表板,用于汇总来自火车运动模拟的数据。 (我是一名心理学家,对 python 有一些基本了解,目前正在学习 DAX。)
这是一些背景:
- 我使用 [index] 来维护行的顺序
- [Notification] 是一个包含文本的列
- [Train Nr] 是一列,其中包含 [Notification] 所涉及的列车 ID
- [Standstill] 是包含 1 的列,如果通知是有关火车停止的信息(否则为 0)
- [Halt] 是一个包含 1 的列,如果通知是关于火车在车站停止的信息(否则为 0)
我不知道如何构建可以用作 for 循环的东西。在一个非常概念化的方式中,这看起来像这样:
if [standstill] = 1:
for [index] in range([index]+500):
if [halt] = 1 and [train nr] is the same as in the starting row:
[is there halt] = 1
else [is there halt] = 0
所以我想做的是找出 [stanstill] = 1 的任何行是否有接下来的 500 行中的任何行 [halt] = 1 以及 [halt] 是否涉及与[停顿].
有人可以帮忙吗?我试图修改这个想法:https://community.powerbi.com/t5/Community-Blog/For-and-While-Loops-in-DAX/ba-p/636314 但在这一点上我完全卡住了。如果需要任何进一步的信息,请告诉我。
示例数据:
index
notification
train nr
standstill
halt
is there halt
1
train nr 3345 gets status standstill
3345
1
0
1
2
train nr 3345 gets status halt
3345
0
1
0
3
train nr 122 position X -> Y 89076
122
0
0
0
4
train nr 122 gets status standstill
122
1
0
1
5
train nr 54732 gets status riding
54732
0
0
0
...
...
...
...
...
...
345
train nr 122 gets status halt
122
0
1
0
解决方案可以是度量或列 >> 最重要的目标是能够总结 [standstill] = 1 和 [is there halt] = 0 的实例总数,这意味着火车因红灯而停止。
好的,我会在找到解决方案后尝试回答我自己的问题。这是一个计算列:
how many halts =
var _index = LOOKUPVALUE('Table'[Index], 'Table'[Index], [Index])
var _train = LOOKUPVALUE('Table'[Train nr],'Table'[Train nr], [Train nr])
var _haltafter = FILTER('Table', [Halt]=1 && [Index] > value(_index) && [Train nr] = value(_train))
return
IF([Standstill]=1 && not ISEMPTY(_haltafter), SUMX(_haltafter, [Halt]),0)
结果是在包含有关列车即将停止的信息的当前通知之后,同一列车编号发生的多次停站。
也许这对某人有帮助
我正在使用 PowerBI 创建一个仪表板,用于汇总来自火车运动模拟的数据。 (我是一名心理学家,对 python 有一些基本了解,目前正在学习 DAX。) 这是一些背景:
- 我使用 [index] 来维护行的顺序
- [Notification] 是一个包含文本的列
- [Train Nr] 是一列,其中包含 [Notification] 所涉及的列车 ID
- [Standstill] 是包含 1 的列,如果通知是有关火车停止的信息(否则为 0)
- [Halt] 是一个包含 1 的列,如果通知是关于火车在车站停止的信息(否则为 0)
我不知道如何构建可以用作 for 循环的东西。在一个非常概念化的方式中,这看起来像这样:
if [standstill] = 1:
for [index] in range([index]+500):
if [halt] = 1 and [train nr] is the same as in the starting row:
[is there halt] = 1
else [is there halt] = 0
所以我想做的是找出 [stanstill] = 1 的任何行是否有接下来的 500 行中的任何行 [halt] = 1 以及 [halt] 是否涉及与[停顿].
有人可以帮忙吗?我试图修改这个想法:https://community.powerbi.com/t5/Community-Blog/For-and-While-Loops-in-DAX/ba-p/636314 但在这一点上我完全卡住了。如果需要任何进一步的信息,请告诉我。
示例数据:
index | notification | train nr | standstill | halt | is there halt |
---|---|---|---|---|---|
1 | train nr 3345 gets status standstill | 3345 | 1 | 0 | 1 |
2 | train nr 3345 gets status halt | 3345 | 0 | 1 | 0 |
3 | train nr 122 position X -> Y 89076 | 122 | 0 | 0 | 0 |
4 | train nr 122 gets status standstill | 122 | 1 | 0 | 1 |
5 | train nr 54732 gets status riding | 54732 | 0 | 0 | 0 |
... | ... | ... | ... | ... | ... |
345 | train nr 122 gets status halt | 122 | 0 | 1 | 0 |
解决方案可以是度量或列 >> 最重要的目标是能够总结 [standstill] = 1 和 [is there halt] = 0 的实例总数,这意味着火车因红灯而停止。
好的,我会在找到解决方案后尝试回答我自己的问题。这是一个计算列:
how many halts =
var _index = LOOKUPVALUE('Table'[Index], 'Table'[Index], [Index])
var _train = LOOKUPVALUE('Table'[Train nr],'Table'[Train nr], [Train nr])
var _haltafter = FILTER('Table', [Halt]=1 && [Index] > value(_index) && [Train nr] = value(_train))
return
IF([Standstill]=1 && not ISEMPTY(_haltafter), SUMX(_haltafter, [Halt]),0)
结果是在包含有关列车即将停止的信息的当前通知之后,同一列车编号发生的多次停站。
也许这对某人有帮助