2017-06-06 8 views
0

をカウント:は、他のすべてのカラムの内容で各列の内容を比較し、一致の存在マトリックスは、このテーブルを考えると

enter image description here

私は、この表を導出したいと思います:

enter image description here

... ソートマップブックの走行距離図のようです。

各列の単語と他のすべての列の単語とのクロステーブル比較を作成して、それらの間に一致がいくつあるかを表示しようとしています。

たとえば、列1と列2を比較すると、4つの一致が得られます。黄色の太字で囲まれたセルがマッチです。

enter image description here

そして、ここで私はそれらを数える方法は次のとおりです。

enter image description here

私はパワークエリを使用してこれを達成するための「簡単な」方法があるかもしれないと思っています。ある?

(オハイオ州と...ところで...私が探している解決策は、静的な数の入力列を期待すべきではありません。つまり、入力に使用する列数を増やしたり、比較セット。

ありがとうございます。

答えて

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 
+0

おかげ@MarcelBeug。あなたの結果は正しいです。私のことは間違っていた...私は誤解した。私は今、私の質問で、私の希望の出力テーブルを修正しました。あなたが私に与えたことは、「簡単」ではないかもしれませんが、確かに私が試みていたものよりずっと優れています。 –

関連する問題