PowerBI:连续数据的相同 ID

PowerBI: same IDs for consecutive data

我对在 Power BI 中生成 ID 有疑问。

问题: 我有如下 table:

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

注意 'Bike' 有不同的 ID,因为这些行不是连续的)

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

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

第一个计算列

为 table 中的每一行创建一个唯一的字符串 ID。为将继承先前唯一 ID 的行指定“相同”。这利用社区页面上的 EARLIER function and a solution similar to Get Value from Previous Row post 来评估计算中的前一行。

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 创建更多 user-friendly 个数字 ID。这是您要求的原始专栏。

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

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