Evg*_*eny 1 group-by calculated-columns dax powerbi
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
Run Code Online (Sandbox Code Playgroud)
我想创建新列,该列将具有按 id 分组的每一行的最小日期时间值。
如何在 Power BI 桌面中使用 DAX 查询来完成此操作?
使用这个表达式:
NewColumn =
CALCULATE(
MIN(
Table[datetime]),
FILTER(Table,Table[id]=EARLIER(Table[id])
)
)
Run Code Online (Sandbox Code Playgroud)
在 Power BI 中使用包含数据的表,它将生成以下内容:
更新:解释和EARLIER函数用法。
基本上,EARLIER函数将使您能够访问不同行上下文的值。
当您使用CALCULATE函数时,它会创建整个表的行上下文,理论上它会迭代每个表行。当您使用函数时,也会发生同样的情况,FILTER它将迭代整个表并根据过滤条件评估每一行。
到目前为止,我们有两个行上下文,由 创建的行上下文CALCULATE和 由 创建的行上下文FILTER。注意FILTER使用EARLIER来访问 CALCULATE 的行上下文。话虽如此,在我们的例子中,对于外部(CALCULATE 的行上下文)中的每一行,都会返回与外部上下文中的FILTER当前行相对应的一组行。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
...
...
Run Code Online (Sandbox Code Playgroud)
更新2:添加排名栏。
要获得所需的排名,您可以使用以下表达式:
RankColumn =
RANKX(
CALCULATETABLE(Table,ALLEXCEPT(Table,Table[id]))
,Table[datetime]
,Hoja1[datetime]
,1
)
Run Code Online (Sandbox Code Playgroud)
这是带有排名列的表:
让我知道这是否有帮助。
| 归档时间: |
|
| 查看次数: |
27060 次 |
| 最近记录: |