如何"convert" M代码中的DAX代码:删除计算列中的行
How to "convert" DAX code in M code: delete rows in calculated colum
我正在使用 Power Bi Desktop,我正在尝试将 DAX 代码“转换”为 M 代码。我知道这实际上是不可能的,因为 M 的结构和意图。但是我看到其他程序员通过 M 代码中的一些变通方法实现了他们的 DAX 代码。
关于我的问题:
我需要找到一种方法,在我计算之后删除 Power Query 编辑器中的行,如果该行已经在 table 中。具体来说:如果 [FIN] 列相同且 [Laufleistung in km] 列不高于 +=30,我将该行视为重复行,因此要删除该行。我需要在查询编辑器中实现以下 DAX 列:
Count Doppelte = CALCULATE(
COUNT('Table A'[FIN]);
FILTER('Table A'; 'Table A'[FIN] = EARLIER('Table A'[FIN])) ;
FILTER('Table A'; 'Table A'[Laufleistung in km] <= EARLIER('Table A'[Laufleistung in km])+30) ;
FILTER('Table A'; 'Table A'[Laufleistung in km] >= EARLIER('Table A'[Laufleistung in km])
)
)
只要我有重复的行,我就用这个列来计数(所以列中的结果是 2)。
结果如下所示:
FIN
Laufleistung in km
Doppelte
ID001
500
1
ID004
200
1
ID001
529
2
ID004
205
2
ID001
700
1
所以,我想删除 [Doppelte]=2 的行。
我目前不知道如何在 Power Query Editor 中实现这种计算。你们知道如何做到这一点吗?
谢谢,
马塞尔 :)
已编辑答案。看看这是否适合你
对于每个 [FIN],它从所有先前行中找到最大的 [Laufleistung in km],并将该值与当前 [Laufleistung in km] 进行比较,看看它们是否至少有 30 个不同
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index","MaxD",(i)=>List.Max(Table.SelectRows(#"Added Index", each [FIN]=i[FIN] and [Index]<i[Index]) [Laufleistung in km]), type number ),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Doppelte", each try if [Laufleistung in km]-[MaxD] < 30 then 2 else 1 otherwise 1),
in #"Added Custom1"
这里我附上了.pbix文件供大家参考,因为所有的步骤都很难提及和解释。
简而言之-
- 我先把你的TableA复制成TableA(2)
- 然后对新的table进行了一些改造TableA(2)
- 合并新的 table Table A (2) 到你的 Table A
- 然后在Table A
中执行了一些步骤
如有不明之处欢迎随时提问。下面是最终输出-
我正在使用 Power Bi Desktop,我正在尝试将 DAX 代码“转换”为 M 代码。我知道这实际上是不可能的,因为 M 的结构和意图。但是我看到其他程序员通过 M 代码中的一些变通方法实现了他们的 DAX 代码。
关于我的问题: 我需要找到一种方法,在我计算之后删除 Power Query 编辑器中的行,如果该行已经在 table 中。具体来说:如果 [FIN] 列相同且 [Laufleistung in km] 列不高于 +=30,我将该行视为重复行,因此要删除该行。我需要在查询编辑器中实现以下 DAX 列:
Count Doppelte = CALCULATE(
COUNT('Table A'[FIN]);
FILTER('Table A'; 'Table A'[FIN] = EARLIER('Table A'[FIN])) ;
FILTER('Table A'; 'Table A'[Laufleistung in km] <= EARLIER('Table A'[Laufleistung in km])+30) ;
FILTER('Table A'; 'Table A'[Laufleistung in km] >= EARLIER('Table A'[Laufleistung in km])
)
)
只要我有重复的行,我就用这个列来计数(所以列中的结果是 2)。 结果如下所示:
FIN | Laufleistung in km | Doppelte |
---|---|---|
ID001 | 500 | 1 |
ID004 | 200 | 1 |
ID001 | 529 | 2 |
ID004 | 205 | 2 |
ID001 | 700 | 1 |
所以,我想删除 [Doppelte]=2 的行。
我目前不知道如何在 Power Query Editor 中实现这种计算。你们知道如何做到这一点吗?
谢谢, 马塞尔 :)
已编辑答案。看看这是否适合你
对于每个 [FIN],它从所有先前行中找到最大的 [Laufleistung in km],并将该值与当前 [Laufleistung in km] 进行比较,看看它们是否至少有 30 个不同
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index","MaxD",(i)=>List.Max(Table.SelectRows(#"Added Index", each [FIN]=i[FIN] and [Index]<i[Index]) [Laufleistung in km]), type number ),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Doppelte", each try if [Laufleistung in km]-[MaxD] < 30 then 2 else 1 otherwise 1),
in #"Added Custom1"
这里我附上了.pbix文件供大家参考,因为所有的步骤都很难提及和解释。
简而言之-
- 我先把你的TableA复制成TableA(2)
- 然后对新的table进行了一些改造TableA(2)
- 合并新的 table Table A (2) 到你的 Table A
- 然后在Table A 中执行了一些步骤
如有不明之处欢迎随时提问。下面是最终输出-