2016-04-29 10 views
2

現在、Power BIのクエリエディタを使用して、データのピボット解除、変換、結合、再ピボット、再結合を行っています。説明:パワーBIに特殊ケースを追加するBIクエリ(M)

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  | 

私はこの出力可能を取得する再マージ:

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]  | 

ID#97のVehicle2CapaScoreおよびVechile3CapaScoreの場合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" 

答えて

2

私はその後、私は列を追加し、書き込みたい0で車を見つけることに分カルクでグループ化を追加します単純なif文

if [Min Value] = 0 then 0 else [Sum Value]

+0

私はあなたがここで何をしたかを見ています。私は不思議です...あなたはMSがPowerBIの最後のアップデートで "条件付きカラム"を追加したのを見たことがありますか? Ergo、minvalueステップの前に存在していたテーブルに戻ってあなたの提案を再結合/マージする必要はなく、それを使用する方が効率的でしょうか? (私は私のラップトップで実行可能ファイルを実行する私たちのITショップを待っているとして私はテストすることはできません) –

+1

新しい "条件付き列"機能は、上記の "if"コードで追加された列を生成するだけで、実行時に効率の向上はありません。 –

+1

Group By([Min Value]を計算する場所)の間に「All Rows」集約列を追加すると、1つのクエリですべてを達成できます。直ちに「すべての行」の列を展開して詳細を戻すことができます。 –

関連する問題