Power BI Desktop 中 GROUP BY 的最小值
Min value with GROUP BY in Power BI Desktop
id datetime new_column datetime_rankx
1 12.01.2015 18:10:10 12.01.2015 18:10:10 1
2 03.12.2014 14:44:57 03.12.2014 14:44:57 1
2 21.11.2015 11:11:11 03.12.2014 14:44:57 2
3 01.01.2011 12:12:12 01.01.2011 12:12:12 1
3 02.02.2012 13:13:13 01.01.2011 12:12:12 2
3 03.03.2013 14:14:14 01.01.2011 12:12:12 3
我想创建新列,该列将具有按 ID 分组的每一行的最小日期时间值。
如何使用 DAX 查询在 Power BI 桌面中执行此操作?
使用这个表达式:
NewColumn =
CALCULATE(
MIN(
Table[datetime]),
FILTER(Table,Table[id]=EARLIER(Table[id])
)
)
在 Power BI 中使用 table 和你的数据会产生这样的结果:
更新: 说明和 EARLIER
函数用法。
基本上,EARLIER
函数可以让您访问不同行上下文的值。
当您使用 CALCULATE
函数时,它会创建整个 table 的行上下文,理论上它会遍历每个 table 行。当您使用 FILTER
函数时也会发生同样的情况,它将遍历整个 table 并根据过滤条件评估每一行。
到目前为止,我们有两个行上下文,CALCULATE
创建的行上下文和 FILTER
创建的行上下文。注意 FILTER
使用 EARLIER
来访问 CALCULATE 的行上下文。话虽如此,在我们的例子中,对于外部(CALCULATE 的行上下文)中的每一行,FILTER
returns 一组行对应于外部上下文中的当前 id
。
如果您有编程背景,它可能会给您一些意义。它类似于嵌套循环。
希望此 Python 代码指出其背后的主要思想:
outer_context = ['row1','row2','row3','row4']
inner_context = ['row1','row2','row3','row4']
for outer_row in outer_context:
for inner_row in inner_context:
if inner_row == outer_row: #this line is what the FILTER and EARLIER do
#Calculate the min datetime using the filtered rows
...
...
更新 2: 添加排名列。
要获得所需的排名,您可以使用此表达式:
RankColumn =
RANKX(
CALCULATETABLE(Table,ALLEXCEPT(Table,Table[id]))
,Table[datetime]
,Hoja1[datetime]
,1
)
这是 table 排名列:
如果有帮助请告诉我。
id datetime new_column datetime_rankx
1 12.01.2015 18:10:10 12.01.2015 18:10:10 1
2 03.12.2014 14:44:57 03.12.2014 14:44:57 1
2 21.11.2015 11:11:11 03.12.2014 14:44:57 2
3 01.01.2011 12:12:12 01.01.2011 12:12:12 1
3 02.02.2012 13:13:13 01.01.2011 12:12:12 2
3 03.03.2013 14:14:14 01.01.2011 12:12:12 3
我想创建新列,该列将具有按 ID 分组的每一行的最小日期时间值。
如何使用 DAX 查询在 Power BI 桌面中执行此操作?
使用这个表达式:
NewColumn =
CALCULATE(
MIN(
Table[datetime]),
FILTER(Table,Table[id]=EARLIER(Table[id])
)
)
在 Power BI 中使用 table 和你的数据会产生这样的结果:
更新: 说明和 EARLIER
函数用法。
基本上,EARLIER
函数可以让您访问不同行上下文的值。
当您使用 CALCULATE
函数时,它会创建整个 table 的行上下文,理论上它会遍历每个 table 行。当您使用 FILTER
函数时也会发生同样的情况,它将遍历整个 table 并根据过滤条件评估每一行。
到目前为止,我们有两个行上下文,CALCULATE
创建的行上下文和 FILTER
创建的行上下文。注意 FILTER
使用 EARLIER
来访问 CALCULATE 的行上下文。话虽如此,在我们的例子中,对于外部(CALCULATE 的行上下文)中的每一行,FILTER
returns 一组行对应于外部上下文中的当前 id
。
如果您有编程背景,它可能会给您一些意义。它类似于嵌套循环。
希望此 Python 代码指出其背后的主要思想:
outer_context = ['row1','row2','row3','row4']
inner_context = ['row1','row2','row3','row4']
for outer_row in outer_context:
for inner_row in inner_context:
if inner_row == outer_row: #this line is what the FILTER and EARLIER do
#Calculate the min datetime using the filtered rows
...
...
更新 2: 添加排名列。
要获得所需的排名,您可以使用此表达式:
RankColumn =
RANKX(
CALCULATETABLE(Table,ALLEXCEPT(Table,Table[id]))
,Table[datetime]
,Hoja1[datetime]
,1
)
这是 table 排名列:
如果有帮助请告诉我。