将特例添加到 Power BI 查询(中)
Add Special Case to Power BI Query (M)
我目前正在使用 Power BI 的查询编辑器来取消透视、转换、连接、重新透视和重新连接一些数据。图解:
REF_Capability:
ID#| Capability.1 | Capability.2 | Capability.3|
97 | Crawl | Walk | Run |
98 | Crawl | null | null |
99 | Crawl | Walk | null |
表 2:
Capability | Attribute| Value |
Crawl | Vehicle1 | 4 |
Walk | Vehicle1 | 3 |
Run | Vehicle1 | 2 |
Crawl | Vehicle2 | 0 |
Walk | Vehicle2 | 1 |
Run | Vehilce2 | 1 |
Crawl | Vehicle3 | 0 |
Walk | Vehicle3 | 5 |
Run | Vehicle3 | 5 |
结合使用逆透视、过滤、合并查询、扩展列以及重新透视和重新合并,我得到了这个 OutputTable:
ID#| Capability.1 | Capability.2 | Capability.3| Score.Vehicle1 | Score.Vehicle2 | Score.Vehicle3 |
97 | Crawl | Walk | Run | 9 [4+3+2] | 2 [0+1+1] | 10 [0+5+5] |
98 | Crawl | null | null | 4 [4+null+null] | 0 [0+null+null] | 0 [0+null+null] |
99 | Crawl | Walk | null | 7 [4+3+null] | 1 [0+1+null] | 5 [0+5+null] |
对于 Vehicle2CapaScore 和 Vechile3CapaScore 下的 ID#97 而不是分别为 2 和 10 的分数,我希望两者的分数均为 0。解释...如果车辆的任何特定功能的总得分为 0,则其所有功能的得分均为 0。或者更简单地说,无论你走得有多好,或者如果你不会爬,运行 都没有关系。
我需要一些帮助来将这个逻辑应用到我的查询中:
let
Source = OData.Feed("SOURCE_vti_bin/listdata.svc"),
REF_Capability = Source{[ID#="REF_Capability",Signature="table"]}[Data],
#"Split Column by Delimiter" = Table.SplitColumn(Table1,"Capability",Splitter.SplitTextByDelimiter("; ", QuoteStyle.Csv),{"Capability.1", "Capability.2", "Capability.3"}),
#"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Capability.1", type text}, {"Capability.2", type text}, {"Capability.3", type text}}),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Change Type", {"ID#"}, "Attribute", "Value"),
#"Filtered Rows" = Table.SelectRows(#"Unpivoted Other Columns", each ([Attribute] = "Capability.1" or [Attribute] = "Capability.2" or [Attribute] = "Capability.3") and ([Value] <> "")),
#"Merged Queries" = Table.NestedJoin(#"Filtered Rows",{"Value"},Table2,{"Capability"},"NewColumn",JoinKind.LeftOuter),
#"Expanded NewColumn" = Table.ExpandTableColumn(#"Merged Queries", "NewColumn", {"Attribute", "Value"}, {"VehicleScore.Attribute", "VehicleScore.Value"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded NewColumn",{"Attribute", "Value"}),
#"Pivoted Column" = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns"[VehicleScore.Attribute]), "VehicleScore.Attribute", "VehicleScore.Value", List.Sum)
in
#"Pivoted Column"
let
Source = OData.Feed("SOURCE/_vti_bin/ListData.svc"),
OutputTable = Source{[ID#="OutputTable",Signature="table"]}[Data],
#"Merged Queries" = Table.NestedJoin(#OutputTable,{"ID#"},REF_Capability,{"ID#"},"NewColumn",JoinKind.LeftOuter),
#"Expanded NewColumn" = Table.ExpandTableColumn(#"Merged Queries", "NewColumn", {"Vehicle1", "Vehicle2", "Vehicle3"}, {"Score.Vehicle1","Score.Vehicle2", "Score.Vehicle3"})
in
#"Expanded NewColumn"
我会添加一个带有 Min calc 的 Group By 来查找带有 0 的车辆。然后我会添加一个列并编写一个简单的 if 语句,例如
if [Min Value] = 0 then 0 else [Sum Value]
我目前正在使用 Power BI 的查询编辑器来取消透视、转换、连接、重新透视和重新连接一些数据。图解:
REF_Capability:
ID#| Capability.1 | Capability.2 | Capability.3|
97 | Crawl | Walk | Run |
98 | Crawl | null | null |
99 | Crawl | Walk | null |
表 2:
Capability | Attribute| Value |
Crawl | Vehicle1 | 4 |
Walk | Vehicle1 | 3 |
Run | Vehicle1 | 2 |
Crawl | Vehicle2 | 0 |
Walk | Vehicle2 | 1 |
Run | Vehilce2 | 1 |
Crawl | Vehicle3 | 0 |
Walk | Vehicle3 | 5 |
Run | Vehicle3 | 5 |
结合使用逆透视、过滤、合并查询、扩展列以及重新透视和重新合并,我得到了这个 OutputTable:
ID#| Capability.1 | Capability.2 | Capability.3| Score.Vehicle1 | Score.Vehicle2 | Score.Vehicle3 |
97 | Crawl | Walk | Run | 9 [4+3+2] | 2 [0+1+1] | 10 [0+5+5] |
98 | Crawl | null | null | 4 [4+null+null] | 0 [0+null+null] | 0 [0+null+null] |
99 | Crawl | Walk | null | 7 [4+3+null] | 1 [0+1+null] | 5 [0+5+null] |
对于 Vehicle2CapaScore 和 Vechile3CapaScore 下的 ID#97 而不是分别为 2 和 10 的分数,我希望两者的分数均为 0。解释...如果车辆的任何特定功能的总得分为 0,则其所有功能的得分均为 0。或者更简单地说,无论你走得有多好,或者如果你不会爬,运行 都没有关系。
我需要一些帮助来将这个逻辑应用到我的查询中:
let
Source = OData.Feed("SOURCE_vti_bin/listdata.svc"),
REF_Capability = Source{[ID#="REF_Capability",Signature="table"]}[Data],
#"Split Column by Delimiter" = Table.SplitColumn(Table1,"Capability",Splitter.SplitTextByDelimiter("; ", QuoteStyle.Csv),{"Capability.1", "Capability.2", "Capability.3"}),
#"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Capability.1", type text}, {"Capability.2", type text}, {"Capability.3", type text}}),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Change Type", {"ID#"}, "Attribute", "Value"),
#"Filtered Rows" = Table.SelectRows(#"Unpivoted Other Columns", each ([Attribute] = "Capability.1" or [Attribute] = "Capability.2" or [Attribute] = "Capability.3") and ([Value] <> "")),
#"Merged Queries" = Table.NestedJoin(#"Filtered Rows",{"Value"},Table2,{"Capability"},"NewColumn",JoinKind.LeftOuter),
#"Expanded NewColumn" = Table.ExpandTableColumn(#"Merged Queries", "NewColumn", {"Attribute", "Value"}, {"VehicleScore.Attribute", "VehicleScore.Value"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded NewColumn",{"Attribute", "Value"}),
#"Pivoted Column" = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns"[VehicleScore.Attribute]), "VehicleScore.Attribute", "VehicleScore.Value", List.Sum)
in
#"Pivoted Column"
let
Source = OData.Feed("SOURCE/_vti_bin/ListData.svc"),
OutputTable = Source{[ID#="OutputTable",Signature="table"]}[Data],
#"Merged Queries" = Table.NestedJoin(#OutputTable,{"ID#"},REF_Capability,{"ID#"},"NewColumn",JoinKind.LeftOuter),
#"Expanded NewColumn" = Table.ExpandTableColumn(#"Merged Queries", "NewColumn", {"Vehicle1", "Vehicle2", "Vehicle3"}, {"Score.Vehicle1","Score.Vehicle2", "Score.Vehicle3"})
in
#"Expanded NewColumn"
我会添加一个带有 Min calc 的 Group By 来查找带有 0 的车辆。然后我会添加一个列并编写一个简单的 if 语句,例如
if [Min Value] = 0 then 0 else [Sum Value]