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 函数,具体取决于您的实际数据的外观。
我对在 Power BI 中生成 ID 有疑问。
问题: 我有如下 table:
我想为连续数据生成相同的 ID(这意味着前一行的结束日期等于当前行的开始日期),在列 'Type' 中具有相同的值,但 ID 必须如果数据不连续,则不同。正确 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 函数,具体取决于您的实际数据的外观。