2016-10-06 15 views
2

私は、2つのチームのワークロードを評価し、グラフィカルに表示する方法を探しています。一方一方PowerQuery - サブクエリ

、私は行としてプロジェクトとデータセットを持っており、チームのそれぞれの開始時刻と終了日時、AとB

Sample data

、Iは、データセットを持っています一日増やして

私が望むのは、各チームの毎日のアクティブなプロジェクトの数です。 SQLでは、サブクエリを試してみます...

ありがとうございました。

答えて

1

私は各データセットに対してクエリを作成します(おそらくすでにこれらのデータセットを持っているでしょう)。次にそれぞれにカスタムカラムを追加します。

Dummy Merge Key 
= 1 

それから私は、ダミーのキーをマージに参加、「日」のクエリとそれを組み合わせるために、「プロジェクト」クエリにマージステップを追加します。次に、結果のNewColumnを展開して、必要な「日」のクエリ列(Dateなど)を取得します。

この時点では、クロスジョイン(SQL用語で)があります。次に、カスタム/条件付きの列を追加します。

[開始日]の範囲内の[日付]値を持つ行のみを保持するために、結果の列= trueをフィルタリングできます。

"Projects"データ構造(Start & End Columnが重複している)は明らかにこの目的のためには厄介です。コードを繰り返し入力するのを避けるためには、まずそれをアンピボットする必要があります。

1

これがまだ必要かどうか疑問に思う(とにかく、他の人も役に立つかもしれない)。 :)私は、このソリューションを提供することができます

let 
    //Create example source tables 
    Projects = Table.FromColumns(
     { 
      {"P001","P002"}, 
      {#date(2016,10,06), #date(2016,10,11)}, 
      {#date(2016,10,11), #date(2016,10,16)}, 
      {#date(2016,10,16), #date(2016,10,21)}, 
      {#date(2016,10,24), #date(2016,10,29)} 
     }, 
     {"Project_No", "Start_Team_1", "End_Team_1", "Start_Team_2", "End_Team_2"}), 
    Dates = Table.TransformColumnTypes(Table.FromColumns({List.Transform({1..31}, each #date(2016,10,_))}, {"Date"}),{{"Date", type date}}), 

    //Add dummy columns, join, remove dummy columns 
    Join = Table.RemoveColumns(
       Table.Join(
          Table.AddColumn(Dates, "tmp1", each 1), {"tmp1"}, 
          Table.AddColumn(Projects, "tmp2", each 1), {"tmp2"}, 
          JoinKind.FullOuter 
          ) 
      , {"tmp1", "tmp2"}), 

    //Group dates and count required rows 
    GetResult = Table.Group(Join, {"Date"}, 
      { 
       {"Team1_Prj_Count", each Table.RowCount(Table.SelectRows(_, each [Start_Team_1] <= [Date] and [End_Team_1] >= [Date])), type number}, 
       {"Team2_Prj_Count", each Table.RowCount(Table.SelectRows(_, each [Start_Team_2] <= [Date] and [End_Team_2] >= [Date])), type number} 
      }) 
in 
    GetResult 

はあなたの問題を解決するために見えます。