Powerbi 在DAX(非powerquery)中,根据列删除重复项

Powerbi 在DAX(非powerquery)中,根据列删除重复项,powerbi,dax,powerbi-desktop,Powerbi,Dax,Powerbi Desktop,在我的PowerBI桌面中,我有一个表,该表是根据其他表计算的,其结构如下: 输入表: 名字 电子邮件 斯科特 ABC@XYZ.com 上下快速移动 ABC@XYZ.com 特德 ABC@XYZ.com 斯科特 EDF@XYZ.com 斯科特 LMN@QRS.com 比尔 LMN@QRS.com 遗憾的是,这个问题的答案是DAX中没有办法引用相对于表中其他行的行位置。唯一的选择是使用一些列值进行排序 我们可以使用现有的两列表来获取每封电子邮件的最大或最小名。因此,我们可以编写如下计算表,T是

在我的PowerBI桌面中,我有一个表,该表是根据其他表计算的,其结构如下:

输入表:


名字
电子邮件
斯科特
ABC@XYZ.com
上下快速移动
ABC@XYZ.com
特德
ABC@XYZ.com
斯科特
EDF@XYZ.com
斯科特
LMN@QRS.com
比尔
LMN@QRS.com

遗憾的是,这个问题的答案是DAX中没有办法引用相对于表中其他行的行位置。唯一的选择是使用一些列值进行排序

我们可以使用现有的两列表来获取每封电子邮件的最大或最小名。因此,我们可以编写如下计算表,
T
是输入表,
T Unique
是生成表

T Unique = 
ADDCOLUMNS(
    ALL( T[Email] ),
    "Firstname",
        CALCULATE(
            MAX( T[Firstname ] )
        )
)

但这不符合要求

为了获得所需的结果,我们需要向输入表中添加一列,带有索引或时间戳

在本例中,我在Power Query中使用以下M代码添加了一个索引列,它是通过引用原始表,然后单击Add column->Index column按钮自动生成的

let
    Source = T,
    #"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type)
in
    #"Added Index"
因此,我得到了
T索引

现在我们可以编写下面的计算表,使用新列检索每个电子邮件的第一行

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
            )
)
这将生成请求的表


在实际场景中,添加新列的最佳位置是直接添加到生成输入表的代码中。

谢谢。向上投票。Pandas是一个与“drop_duplicates”和“subset”截然不同的简单版本。让我做一些测试,一旦测试,我会接受的。再次感谢您的回答。我希望这项工作不会有问题。如果你遇到任何困难,请告诉我。反馈有助于我提高我在DAX方面的经验:)人力资源管理。。。我将创建一个包含更多列的新问题。这对两个专栏来说效果不错,但假设我有20个专栏,我只想保留唯一电子邮件地址出现的第一个记录。查看此更新的问题查看更新的问题并更新了聪明的答案。谢谢你的反馈。