在我的PowerBI桌面上,我具有从其他表格计算而来的表格,其结构如下:
输入表:
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th>Firstname</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td>Scott</td>
<td>[email protected]</td>
</tr>
<tr>
<td>Bob</td>
<td>[email protected]</td>
</tr>
<tr>
<td>Ted</td>
<td>[email protected]</td>
</tr>
<tr>
<td>Scott</td>
<td>[email protected]</td>
</tr>
<tr>
<td>Scott</td>
<td>[email protected]</td>
</tr>
<tr>
<td>Bill</td>
<td>[email protected]</td>
</tr>
</tbody>
</table>
现在,我只想保留每个唯一电子邮件的第一条记录。使用DAX的预期输出表是:
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th>Firstname</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td>Scott</td>
<td>[email protected]</td>
</tr>
<tr>
<td>Scott</td>
<td>[email protected]</td>
</tr>
<tr>
<td>Scott</td>
<td>[email protected]</td>
</tr>
</tbody>
</table>
我试图使用RANKX和FILTER,但没有成功。
可悲的是,该问题的答案是DAX中没有办法引用相对于表中其他行的行位置。唯一的选择是使用某些列值进行排序。
我们可以使用现有的两列表格来获取每封电子邮件的MAX或MIN名字。因此,我们可以编写一个如下所示的计算表,其中T
输入表和T Unique
生成表。
T Unique =
ADDCOLUMNS(
ALL( T[Email] ),
"Firstname",
CALCULATE(
MAX( T[Firstname ] )
)
)
但这不能满足要求。
为了获得期望的结果,我们需要在输入表中添加带有索引或时间戳的列。
对于此示例,我在Power Query中使用以下M代码添加了索引列,该列是通过引用原始表然后单击添加列->索引列按钮自动生成的
let
Source = T,
#"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type)
in
#"Added Index"
于是我得到了T Index
桌子。
现在,我们可以编写以下计算表,该表使用新列来检索每个电子邮件的第一行
T Index Unique =
ADDCOLUMNS(
ALL( 'T Index'[Email] ),
"Firstname",
VAR MinIndex =
CALCULATE(
MIN( 'T Index'[Index] )
)
RETURN
CALCULATE(
MAX( 'T Index'[Firstname ] ),
'T Index'[Index] = MinIndex
)
)
生成请求的表
在实际情况下,添加新列的最佳位置是直接在生成输入表的代码中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句