在电源查询中展开上方或下方所有类似列的值
Expand the value for all similar column above or below in power query
我有一个table如下。
|---------------------|---------------------|
| Name | VEC |
|---------------------|---------------------|
| A | null |
|---------------------|---------------------|
| A | null |
|---------------------|---------------------|
| B | null |
|---------------------|---------------------|
| B | null |
|---------------------|---------------------|
| B_1 | 54 |
|---------------------|---------------------|
| D | null |
|---------------------|---------------------|
| D_1 | null |
|---------------------|---------------------|
| E | null |
|---------------------|---------------------|
| E_1 | 454 |
|---------------------|---------------------|
| E_2 | 454444 |
|---------------------|---------------------|
我正在尝试生成以下结果:
|---------------------|---------------------|---------------------|
| Name | VEC | Costum |
|---------------------|---------------------|---------------------|
| A | null | REF |
|---------------------|---------------------|---------------------|
| A | null | REF |
|---------------------|---------------------|---------------------|
| B | null | REF |
|---------------------|---------------------|---------------------|
| B | null | RUP |
|---------------------|---------------------|---------------------|
| B_1 | 54 | RUP |
|---------------------|---------------------|---------------------|
| D | null | REF |
|---------------------|---------------------|---------------------|
| D_1 | null | REF |
|---------------------|---------------------|---------------------|
| E | null | RUP |
|---------------------|---------------------|---------------------|
| E_1 | 454 | RUP |
|---------------------|---------------------|---------------------|
| E_2 | 454444 | RUP |
|---------------------|---------------------|---------------------|
在某些情况下,字母在“VEC”中有值,因此可以使用条件列轻松解决,检查“VEC”并完成。
但是,在某些情况下,字母会重复出现,例如 B 后跟“_”。
在这种情况下,“_1”(或“_2”、“_3”...)将是唯一具有值的。
此处条件列不起作用,因为我需要字母的第一次出现,即仅“A”或“B”才能在“costum”列中获得带有 REF 或 RUP 的行。
#"Promoted Headers" = Table.PromoteHeaders(Table1_Sheet, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Name", type text}, {"VEC", Int64.Type}}),
#"Added Conditional Column" = Table.AddColumn(#"Changed Type", "Custom", each if [VEC] = null then "REF" else "RUP")
in
#"Added Conditional Column"
我找到了以下解决方案,我认为这可能会有所帮助。
这对我来说有点过头了,因此,如果有人有更好、更简单、更直接的东西,我会很高兴看到它是如何完成的。
我使用下面的强大查询,首先为 VEC 添加一个列,然后在“_”处拆分名称,最后使用“Record.Field”来重现或多或少等同于查找的内容。
#"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Name", type text}, {"VEC", Int64.Type}, {" ", type text}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{" "}),
#"Added Custom1" = Table.AddColumn(#"Removed Columns", "NUM", each if [VEC] <> null then 1 else 0),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "Split Name", each Text.Split ([Name], "_"){0}),
#"Grouped Rows1" = Table.Group(#"Added Custom2", {"Split Name"}, {{"Name_SUM", each List.Sum([NUM]), type number}}),
#"Added Custom3" = Table.AddColumn(#"Added Custom2", "REF or RUP", each Record.Field(#"Grouped Rows1"{[Split Name=[Split Name]]}, "Name_SUM")),
#"Added Custom" = Table.AddColumn(#"Added Custom3", "Custom", each if [REF or RUP] <> 0 then "RUP" else "REF")
in
#"Added Custom"
因此我得到以下结果:
您还可以使用 自定义列 和 度量 来实现您的要求,如下所述-(让您的 VEC列数据类型为Integer)
首先使用以下代码创建一个自定义列-
group_name =
VAR current_row_name = ref_rup[Name]
VAR current_row_group =
IF(
FIND("_",current_row_name,1,0) = 0,
current_row_name,
LEFT(
current_row_name,
FIND("_",current_row_name,1,0) - 1
)
)
RETURN current_row_group
现在用下面的代码创建 Measure-
ref or rup =
VAR current_row_name = min(ref_rup[Name])
VAR current_row_group = min(ref_rup[group_name])
VAR current_row_group_sum =
CALCULATE(
SUM(ref_rup[VEC]),
FILTER(
ALL(ref_rup),
ref_rup[group_name] = current_row_group
)
)
RETURN IF(current_row_group_sum > 0, "RUP", "REF")
这是你的最终输出-
您获得所需输出的方式很好。我只是在此处使用 Power Query
再添加一个选项
步骤 1 添加自定义列到您的基础 table 如下-
if Text.PositionOf([Name],"_") = -1
then [Name]
else
Text.Start([Name],Text.PositionOf([Name],"_"))
这是输出-
第 2 步: 现在复制基础 table 并在列 Custom 上应用分组依据,在列 VEC。您可以右键单击列表中的 Custom 列和 select Group BY 选项并配置如下-
Step-3: 应用Group BY后添加如下自定义列,最终结果如下-
if [sum] = null then "REF" else "RUP"
第 4 步: 现在使用 Custom 列将您的基础 table 与新的 table 合并,然后扩展并保留列 custom.1 你将在最终输出下面得到这个-
我有一个table如下。
|---------------------|---------------------|
| Name | VEC |
|---------------------|---------------------|
| A | null |
|---------------------|---------------------|
| A | null |
|---------------------|---------------------|
| B | null |
|---------------------|---------------------|
| B | null |
|---------------------|---------------------|
| B_1 | 54 |
|---------------------|---------------------|
| D | null |
|---------------------|---------------------|
| D_1 | null |
|---------------------|---------------------|
| E | null |
|---------------------|---------------------|
| E_1 | 454 |
|---------------------|---------------------|
| E_2 | 454444 |
|---------------------|---------------------|
我正在尝试生成以下结果:
|---------------------|---------------------|---------------------|
| Name | VEC | Costum |
|---------------------|---------------------|---------------------|
| A | null | REF |
|---------------------|---------------------|---------------------|
| A | null | REF |
|---------------------|---------------------|---------------------|
| B | null | REF |
|---------------------|---------------------|---------------------|
| B | null | RUP |
|---------------------|---------------------|---------------------|
| B_1 | 54 | RUP |
|---------------------|---------------------|---------------------|
| D | null | REF |
|---------------------|---------------------|---------------------|
| D_1 | null | REF |
|---------------------|---------------------|---------------------|
| E | null | RUP |
|---------------------|---------------------|---------------------|
| E_1 | 454 | RUP |
|---------------------|---------------------|---------------------|
| E_2 | 454444 | RUP |
|---------------------|---------------------|---------------------|
在某些情况下,字母在“VEC”中有值,因此可以使用条件列轻松解决,检查“VEC”并完成。
但是,在某些情况下,字母会重复出现,例如 B 后跟“_”。 在这种情况下,“_1”(或“_2”、“_3”...)将是唯一具有值的。
此处条件列不起作用,因为我需要字母的第一次出现,即仅“A”或“B”才能在“costum”列中获得带有 REF 或 RUP 的行。
#"Promoted Headers" = Table.PromoteHeaders(Table1_Sheet, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Name", type text}, {"VEC", Int64.Type}}),
#"Added Conditional Column" = Table.AddColumn(#"Changed Type", "Custom", each if [VEC] = null then "REF" else "RUP")
in
#"Added Conditional Column"
我找到了以下解决方案,我认为这可能会有所帮助。
这对我来说有点过头了,因此,如果有人有更好、更简单、更直接的东西,我会很高兴看到它是如何完成的。
我使用下面的强大查询,首先为 VEC 添加一个列,然后在“_”处拆分名称,最后使用“Record.Field”来重现或多或少等同于查找的内容。
#"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Name", type text}, {"VEC", Int64.Type}, {" ", type text}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{" "}),
#"Added Custom1" = Table.AddColumn(#"Removed Columns", "NUM", each if [VEC] <> null then 1 else 0),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "Split Name", each Text.Split ([Name], "_"){0}),
#"Grouped Rows1" = Table.Group(#"Added Custom2", {"Split Name"}, {{"Name_SUM", each List.Sum([NUM]), type number}}),
#"Added Custom3" = Table.AddColumn(#"Added Custom2", "REF or RUP", each Record.Field(#"Grouped Rows1"{[Split Name=[Split Name]]}, "Name_SUM")),
#"Added Custom" = Table.AddColumn(#"Added Custom3", "Custom", each if [REF or RUP] <> 0 then "RUP" else "REF")
in
#"Added Custom"
因此我得到以下结果:
您还可以使用 自定义列 和 度量 来实现您的要求,如下所述-(让您的 VEC列数据类型为Integer)
首先使用以下代码创建一个自定义列-
group_name =
VAR current_row_name = ref_rup[Name]
VAR current_row_group =
IF(
FIND("_",current_row_name,1,0) = 0,
current_row_name,
LEFT(
current_row_name,
FIND("_",current_row_name,1,0) - 1
)
)
RETURN current_row_group
现在用下面的代码创建 Measure-
ref or rup =
VAR current_row_name = min(ref_rup[Name])
VAR current_row_group = min(ref_rup[group_name])
VAR current_row_group_sum =
CALCULATE(
SUM(ref_rup[VEC]),
FILTER(
ALL(ref_rup),
ref_rup[group_name] = current_row_group
)
)
RETURN IF(current_row_group_sum > 0, "RUP", "REF")
这是你的最终输出-
您获得所需输出的方式很好。我只是在此处使用 Power Query
再添加一个选项步骤 1 添加自定义列到您的基础 table 如下-
if Text.PositionOf([Name],"_") = -1
then [Name]
else
Text.Start([Name],Text.PositionOf([Name],"_"))
这是输出-
第 2 步: 现在复制基础 table 并在列 Custom 上应用分组依据,在列 VEC。您可以右键单击列表中的 Custom 列和 select Group BY 选项并配置如下-
Step-3: 应用Group BY后添加如下自定义列,最终结果如下-
if [sum] = null then "REF" else "RUP"
第 4 步: 现在使用 Custom 列将您的基础 table 与新的 table 合并,然后扩展并保留列 custom.1 你将在最终输出下面得到这个-