如何解决DAX:有选择地合并两个表基于行中的值
我有两个表:
- 在部门内划分部门和实体的表
- 带有按实体或部门中所有实体标识的项目的表。
kubectl delete mutatingwebhookconfigurations inferenceservice.serving.kubeflow.org && kubectl delete validatingwebhookconfigurations inferenceservice.serving.kubeflow.org && kubectl delete po kfserving-controller-manager-0 -n kfserving-system
**Table 1: Organization** id Division Entity - - - - - - - - - - - - - 0 Europe France 1 Europe Germany 2 Europe Italy 3 Europe Spain 4 China North 5 China East 6 China West 7 China South
某些项目特定于[组织],而其他项目则与[部门]中的所有[组织]有关。在这些情况下,将使用值“所有实体”。
我想基于[Division]合并两个表,但仅针对Plan [Org。] =“所有实体”,而应该重复具有其他值(例如“ France”,“ Germany”)的行。
结果表应如下所示:
**Table 2: Project** id Division Org. Project - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Europe France Project 1 2 Europe Germany Project 2 3 Europe Germany Project 3 4 Europe All entities Project 4 5 Europe All entities Project 5 6 China East Project 6 7 China All entities Project 7
由于在组织表中缺少“所有实体”值,因此表之间的物理关系不起作用,但是如果需要,可以在Project表中带有附加的[Entity id]列时添加它。 / p>
我更喜欢DAX。 PowerQuery中的解决方案不是首选,因为我不太流利的M语言,但如果 可用。
谢谢!
解决方法
按照 Power Query -
中的以下步骤进行操作第1步:在表组织中,如下创建自定义列 *-
这是输出-
第2步:从表 Project 中创建 2 重复表并将其命名为- Project_all_emtities 和 Project_others
第3步::转到 Project_all_emtities 表的高级编辑器,并替换以下代码-
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUXItLcovSAUy3IoS85JBjICi/KzU5BIFQwUFBaVYnWglI2Rl7qlFuYl5lUjqjGDqjPGrM4YqM0FW5piTo5CaV5JZkplajKTWBGamKRGKTaFqzYBizhmZeYkgPYnFJUhKzGDmmSOpwWGcuVJsLAA=",BinaryEncoding.Base64),Compression.Deflate)),let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [id = _t,Division = _t,#"Org." = _t,#"Project " = _t]),#"Changed Type" = Table.TransformColumnTypes(Source,{{"id",Int64.Type},{"Division",type text},{"Org.",{"Project ",type text}}),#"Trimmed Text" = Table.TransformColumns(#"Changed Type",{{"Division",Text.Trim,#"Filtered Rows" = Table.SelectRows(#"Trimmed Text",each ([#"Org."] = "All entities")),#"Merged Queries" = Table.NestedJoin(#"Filtered Rows","Org."},Organization,"Custom"},"Organization",JoinKind.LeftOuter),#"Expanded Organization" = Table.ExpandTableColumn(#"Merged Queries",{"Entity "},{"Organization.Entity "}),#"Reordered Columns" = Table.ReorderColumns(#"Expanded Organization",{"id","Division","Org.","Organization.Entity ","Project "}),#"Renamed Columns" = Table.RenameColumns(#"Reordered Columns",{{"Organization.Entity ","Entity"}})
in
#"Renamed Columns"
第4步::转到 Project_others 表的高级编辑器,并替换以下代码-
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUXItLcovSAUy3IoS85JBjICi/KzU5BIFQwUFBaVYnWglI2Rl7qlFuYl5lUjqjGDqjPGrM4YqM0FW5piTo5CaV5JZkplajKTWBGamKRGKTaFqzYBizhmZeYkgPYnFJUhKzGDmmSOpwWGcuVJsLAA=",each [#"Org."] <> "All entities"),"Entity "},"Entity"}})
in
#"Renamed Columns"
第5步::通过在 Project_all_emtities 和 Project_others 后面添加以下代码,创建新表-
let
Source = Table.Combine({Project_all_emtities,Project_others}),#"Sorted Rows" = Table.Sort(Source,Order.Descending},Order.Ascending}})
in
#"Sorted Rows"
这是最终输出-
,我已经更改了表Project
的列名。函数CROSSJOIN
不希望有重复的列名。 Organization
表是相同的。
项目表
+------------+------------------+--------------+-----------+
| id_project | Division_project | Org. | Project |
+------------+------------------+--------------+-----------+
| 1 | Europe | France | Project 1 |
+------------+------------------+--------------+-----------+
| 2 | Europe | Germany | Project 2 |
+------------+------------------+--------------+-----------+
| 3 | Europe | Germany | Project 3 |
+------------+------------------+--------------+-----------+
| 4 | Europe | All entities | Project 4 |
+------------+------------------+--------------+-----------+
| 5 | Europe | All entities | Project 5 |
+------------+------------------+--------------+-----------+
| 6 | China | East | Project 6 |
+------------+------------------+--------------+-----------+
| 7 | China | All entities | Project 7 |
+------------+------------------+--------------+-----------+
代码使用两个变量_directrel
和_allentity
,它们的输出对应于表。其中的每一个都使用一个CROSSJOIN
,并用FILTER语句包围。第一种使用部门与实体之间的直接关系。第二个变量仅将除法用作链接,并仅过滤Project
的{{1}}。
在All Entities
语句之后,有一个RETURN
语句,该语句在表之间建立联合,并用UNION
包围以控制列的顺序。
SELECTCOLUMNS
输出:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。