我有一个关于在 Power BI 中生成 ID 的问题。
我想为连续数据生成相同的 ID(这意味着前一行的结束日期等于当前行的开始日期),在“类型”列中具有相同的值,但如果数据不是,则 ID 必须不同连续的。下面是正确 ID 的示例。
你能帮我写 DAX 命令或查询吗?每个建议都会非常有帮助。
我创建了 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 函数,具体取决于您的实际数据的外观。