将每列的内容与所有其他列进行比较'匹配计数的内容和当前矩阵

时间:2017-06-06 16:49:26

标签: powerquery m

鉴于此表:

enter image description here

我想得到这张表:

enter image description here

... 有点就像地图册中的里程图一样。

我尝试创建每个列中单词的跨表比较,与所有其他列相对比。单词,显示它们之间有多少匹配。

例如,将第1列与第2列进行比较可能会产生4个匹配项。黄色,粗体轮廓的细胞是匹配。

enter image description here

以下是我对他们的看法:

enter image description here

我认为可能会有一个简单的'使用Power Query完成此任务的方法。有吗?

(哦...顺便说一句......我正在寻找的解决方案不应该期望输入列的静态数量:即它应该适应更多的列或更少的列用于输入比较集。)

感谢。

1 个答案:

答案 0 :(得分:3)

不,没有简单的方法,但可以做到。 但是,我得到了不同的结果。我对您的逻辑的解释是:对于每个列组合,1列中每个公共字的出现次数必须乘以另一列中出现的次数。 这些是我的结果:

enter image description here

这是我的查询代码:

let
    Source = Table1,
    ColumnNames = Table.ColumnNames(Source),
    Tabled = Table.FromColumns({ColumnNames}, type table[Columns = text]),
    AddedColumns2 = Table.AddColumn(Tabled, "Columns2", each ColumnNames, type {text}),
    ExpandedColumns2 = Table.ExpandListColumn(AddedColumns2, "Columns2"),
    CommonWords = 
        Table.AddColumn(ExpandedColumns2, 
                        "DistinctIntersect", 
                        each if [Columns] = [Columns2]
                           then {} 
                           else List.Distinct(List.Intersect({Table.Column(Source,[Columns]),
                                                              Table.Column(Source,[Columns2])}))),
    AddedCount = 
        Table.AddColumn(CommonWords,
                        "Count", 
                        (This) => List.Sum({0}&List.Transform(This[DistinctIntersect],
                                                   each List.Count(List.PositionOf(Table.Column(Source,This[Columns]),_,2)) *
                                                        List.Count(List.PositionOf(Table.Column(Source,This[Columns2]),_,2)))),
                       Int64.Type),
    RemovedColumns = Table.RemoveColumns(AddedCount,{"DistinctIntersect"}),
    PivotedColumn = Table.Pivot(RemovedColumns, List.Distinct(RemovedColumns[Columns2]), "Columns2", "Count")
in
    PivotedColumn