为购买特定产品的每个客户 ID 找到最早日期的行,并在新列中找到 return 日期

finding the row with earliest date for each customerID who purchased specific product and return the date in new column

我正在使用 PowerBI 并拥有以下 table:

customer_id|item_id| date    
1          |   A   | 01/01/01        
1          |   B   | 01/01/01        
1          |   A   | 02/02/02        
1          |   A   | 03/03/03        
2          |   A   | 03/03/03        
2          |   C   | 03/03/03        
...

我想在新列中找到每个 customer_id 购买商品 A 和 return 1 的最早日期。这样我就可以在 table 中得到一个新的列,如下所示:

customer_id | item_id | date     | Column_want 
1           |   A     | 01/01/01 | 1
1           |   B     | 01/01/01 | blank
1           |   A     | 02/02/02 | blank
1           |   A     | 03/03/03 | blank
2           |   A     | 03/03/03 | 1
2           |   C     | 03/03/03 | blank
...

我尝试按项目 A 过滤列,然后使用 TOPN(1,...) 仅选择最上面的行。但是,好像不行。

这似乎是一个微不足道的要求。有没有更聪明的方法解决这个问题?

可以为此使用 TOPN 但那个功能 returns 整行 table 所以它看起来很笨重,像这样:

Column_want = 
IF (
    Table1[item_id] = "A" && Table1[date]
        = SELECTCOLUMNS (
            TOPN (
                1,
                FILTER (
                    Table1,
                    Table1[item_id] = "A"
                        && Table1[customer_id] = EARLIER ( Table1[customer_id] )
                ),
                Table1[date], ASC
            ),
            "date", Table1[date]
        ),
    1
)

我建议更像这样:

Column_Want = 
IF (
    Table1[date]
        = CALCULATE (
            MIN ( Table1[date] ),
            FILTER (
                ALLEXCEPT ( Table1, Table1[customer_id], Table1[item_id] ),
                Table1[item_id] = "A"
            )
        ),
    1
)

或者这样:

Column_Want =
IF (
    Table1[date]
        = MINX (
            FILTER (
                Table1,
                EARLIER ( Table1[item_id] ) = "A"
                    && Table1[customer_id] = EARLIER ( Table1[customer_id] )
            ),
            Table1[date]
        ),
    1
)

您可以使用变量创建计算列:

    Column_want = 
            VAR Customer_id ='Table'[customer_id]
            VAR Earliest_date = CALCULATE(MIN('Table'[date]),
                                   FILTER('Table','Table'[customer_id]=Customer_id))
            VAR Earliest_item = CALCULATE(MIN('Table'[item_id]),
                                   FILTER('Table','Table'[date]=Earliest_date),
                                   FILTER('Table','Table'[customer_id]=Customer_id))
    RETURN IF('Table'[date]=Earliest_date && 'Table'[item_id]=Earliest_item,
               1,BLANK())

想法是使用 Calculate 和 max(Earliest_date 变量)计算特定客户 ID 的最早日期。 Earliest_Item 计算变量是为了避免同一客户的多条记录被标记为 1。希望这对您有所帮助。