1

我有一个关于在 Power BI 中生成 ID 的问题。

问题:我有如下表格: 在此处输入图像描述

我想为连续数据生成相同的 ID(这意味着前一行的结束日期等于当前行的开始日期),在“类型”列中具有相同的值,但如果数据不是,则 ID 必须不同连续的。下面是正确 ID 的示例。

在此处输入图像描述请注意,“自行车”具有不同的 ID,因为这些行不连续)

你能帮我写 DAX 命令或查询吗?每个建议都会非常有帮助。

4

1 回答 1

1

我创建了 3 个单独的计算列来完成此操作,最终的IDs列是您要查找的结果。我在下面包含了 DAX,只需将“Table1”引用替换为您的表名称即可。跳到底部查看最终表格的外观(结果表格)。

第一个计算列

为表中的每一行创建一个唯一的字符串 ID。为将继承先前唯一 ID 的行指定“相同”。这利用了EARLIER函数和类似于从社区页面上的上一行帖子中获取价值的解决方案,以便在计算中评估上一行。

First Iteration IDs = 
VAR previousRow = 
    TOPN(
        1, 
        FILTER(
            Table1, 
            Table1[Start Date] < EARLIER(Table1[Start Date])
            && Table1[Type] = EARLIER(Table1[Type])
        ), 
        [Start Date], 
        DESC
    )

VAR previousEndDate = MINX(previousRow, [End Date])
VAR previousType = MINX(previousRow, [Type])

RETURN 
    IF(
        Table1[Start Date] = previousEndDate && Table1[Type] = previousType, 
        "Same", 
        CONCATENATE(FORMAT(Table1[Start Date], "dd/mm/yyyy"), CONCATENATE(" ", Table1[Type]))
    )

第二计算列

将上一列中的所有“相同”ID 转换为该列中它们各自的 ID。

Second Iteration IDs = 
VAR previousRow = 
    TOPN(
        1, 
        FILTER(
            Table1, 
            Table1[Start Date] < EARLIER(Table1[Start Date])
            && Table1[Type] = EARLIER(Table1[Type])
            && NOT(Table1[First Iteration IDs] = "Same")
        ), 
        [First Iteration IDs], 
        DESC
    )

VAR previousID = MINX(previousRow, [First Iteration IDs])

RETURN 
    IF(
        Table1[First Iteration IDs] = "Same", 
        previousID, 
        Table1[First Iteration IDs]
    )

第三计算列

使用RANKX函数从上一列中的字符串 ID 创建更多用户友好的数字 ID。这是您要求的原始列。

IDs = RANKX(Table1, Table1[Second Iteration IDs], , 1, Dense) - 1

我根据您提供的示例表在下面包含了一个结果表。您可能需要使用唯一的字符串 ID 格式或 RANKX 函数,具体取决于您的实际数据的外观。

结果表

于 2022-01-23T13:02:35.680 回答