powerbi - 在 DAX(不是 powerquery)中,根据列删除重复项
问题描述
在我的 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>ABC@XYZ.com</td>
</tr>
<tr>
<td>Bob</td>
<td>ABC@XYZ.com</td>
</tr>
<tr>
<td>Ted</td>
<td>ABC@XYZ.com</td>
</tr>
<tr>
<td>Scott</td>
<td>EDF@XYZ.com</td>
</tr>
<tr>
<td>Scott</td>
<td>LMN@QRS.com</td>
</tr>
<tr>
<td>Bill</td>
<td>LMN@QRS.com</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>ABC@XYZ.com</td>
</tr>
<tr>
<td>Scott</td>
<td>EDF@XYZ.com</td>
</tr>
<tr>
<td>Scott</td>
<td>LMN@QRS.com</td>
</tr>
</tbody>
</table>
我试图使用 RANKX 和 FILTER,但没有任何成功。
解决方案
可悲的是,这个问题的答案是 DAX 中无法引用相对于表中其他行的行位置。唯一的选择是使用某些列值进行排序。
我们可以使用现有的两列表来获取每封电子邮件的 MAX 或 MIN Firstname。所以我们可以写一个如下的计算表,其中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
)
)
生成请求的表
在真实案例场景中,添加新列的最佳位置是直接在生成输入表的代码中。
推荐阅读
- git - 如果将 Jenkins 管道作为代码提交(用于 SCM 设置的管道脚本),如何停止构建触发器
- python - “utf-8”编解码器无法解码位置 39 中的字节 0x85:无效的起始字节(怎么办?)
- javascript - 在终端中使用 vscode 命令没有这样的文件或目录
- php - 无法启动 PHP 7.2 FastCGI 进程管理器
- php - Nginx fastcgi 总是在响应中包含请求正文
- python - 如何获取段树查询的索引?
- c# - 在 .Net 应用程序可执行文件中嵌入多个图标
- microsoft-dynamics - 带有 x++ 电子邮件附件的 Dynamics AX 4 问题
- firebase-test-lab - 未记录自定义视图点击
- python - bash命令未通过python运行