web-dev-qa-db-ja.com

チャートで作成されたチャートの単一の列で同じフィールドの値を組み合わせる方法は?

私の質問は、タイトルフィールド(=会社名)とさまざまなフィールドの両方の値をマージすることです。私は現在 Charts モジュールを使用しています。

以下の図では、タイトルのフィールド、整数フィールド(2017のラベル)、および別の整数フィールド(2018のラベル)のコンテンツタイプを表示する縦棒グラフを示しています。このビューには、チャート(タイトルと2017を表示)とチャートアドオン(タイトルと2018)があります。

グラフは次のようになります。 enter image description here

これらのデータに関する表は次のようになります。

  Company   ! 2017 ! 2018
  ----------+------+-----
  Company A ! 5    ! 6
  Company B ! 2    ! 3

私がやりたいのは、2017フィールドのすべての値を1つの列に合計し、2018年の値を1つの列に合計することです。

Views Merge Rows モジュールを使用して、2017および2018のすべての値を1つの列に合計するオプションを構成しましたが、機能しません。チャート(タイトルと2017を表示)はすべての値を組み合わせているため機能しますが、チャートアドオンが分割されており、理由がわかりません。

これは私が得るものです:

enter image description here

2017年と2018年のすべての値を毎年1つの列に結合する方法はありますか? 「結合」とは、フィールドのすべての値を1つの列に合計することを意味するため、2017などの場合、7(= 5 + 2)にする必要があります。

注:できません チャートAPIを使用 ですが、必要に応じて使用します。

2
Mike

編集:モジュールは各会社の個々の値を表示し、会社の最新の公開バージョンの値を取得します。したがって、A社に別のエントリを作成して公開した場合、グラフには最新バージョンの値のみが表示されます。本文も編集し、最終結果の写真を含めました。

カスタムモジュールを作成すると、私の質問に答えたようです。チャートAPIを使用してモジュールをコーディングし、データを表示するためのカスタムブロックを作成する必要がありました(関数を記述してデータを取得するのは大変でした)。

すべての値を1つの列に追加する代わりに、私は各年の会社の値をグラフに配置し、次のように他の会社の値を前の会社の値に積み上げています: enter image description here

現在または将来、私と同じ問題を抱えている誰かに、私が使用したコードスニペットを示します。

$ chart = array( '#type' => 'chart'、 '#chart_type' => 'column'、 '#stacking' => TRUE、);

上記のコード^を、ブロック/モジュールを表示する関数に含めます。

独自の関数を作成する必要があります。また、DrupalのWDチュートリアルに示されている ように​​、いくつかの関数を実装する必要があるかもしれません。

また、フィールドデータを取得するために、すべての年を(順番に)表示する関数を作成しました。私はいくつかの変数を作成しました:年を格納する配列の結果、カウンター(配列カウンター、年カウンターなど)、現在の年のオフセット、およびハード制限(任意のハード制限を持つ)の変数を保持しました悪い)。データフィールド(たとえば、field_data_field_(フィールドの名前を挿入))が存在するかどうかを確認し、その年に行が含まれていたかどうかを確認する2つのwhileループを使用しました(表に値があることで、存在します)。

他の関数については、重複のフィルタリング、CompanyコンテンツタイプであるすべてのノードIDの取得、各ノードのID値の取得など、個別の関数を作成しました。

DrupalのPHP構文で立ち往生している人は、まずPHPを見てから、それをDrupalのPHPと比較することをお勧めします。ドキュメント(最初は混乱していました)。

プロセス中に私に助けを提供してくれたすべてに感謝します。それは私によく考えさせました。

2
Mike

何年か前に、私がdrupalにキャストしたワークフローツールの使用統計レポートを作成するように依頼されました。このレポートには、月別のクライアント別のタイプ別のワークフローリクエストの表が表示され、それぞれの小計と公開されたフィルターおよびcsvエクスポートが示されています。ようやく機能するようになると、それは美しさの問題でしたが、構築するのは確かに大変でした。

私がこれを達成した方法は、 hook_views_pre_render の追加処理と、特定の名前の空のマークアップフィールドのいくつかです。ビューは、可能な限り最も公開された方法でデータをクエリします。私の使用するフィールドがたくさんあります。次に、pre_renderは、合計と集計を行う追加の配列を使用して、すべてのデータをループします。次に、これらの値を各行の適切なマークアップフィールドに挿入します。列の小計は、pre_renderのテーブルの下部に行を追加したことを意味します。この数値操作はすべてpre_renderで行われるため、フィールドはチャート表示プロセッサに渡され、手間をかけずに棒グラフが作成されます。

コード例を含めますが、これはdrupal 6.に戻りました。

0
DeveloperWeeks

フィールド(例:2017)からのすべての値を1つの列に合計するには、5 + 2 = 7 "(コメントのように)、最初にビュー(表形式の表示)を調整する必要があります。これは、 ビューUI を使用してグラフを作成する手順でも説明​​されているものと同様です。データの現在の(表形式)表示を確認しても、まだデータの[〜#〜] sum [〜#〜]は表示されていませんグラフを作成する対象。

通常、これはグラフの Views 集計を使用して行われますが、[〜#〜] sum [〜#〜][〜#〜] count [〜#〜]の代わりに、たとえば、付属の配信されたビューの例で使用されます Charts モジュール。 demo site )にも示されています。そのためには、 Views Merge Rows を使用する必要はありません。

値として年を含むフィールドが1つだけで、整数値を持つ別のフィールドがある場合、集計を使用して各年をグループ化し、整数値を持つ他のフィールドの集計関数として「合計」を使用できます。ただし、1番目の整数フィールド(2017のラベルが付いている)と2番目の整数フィールド(2018のラベルが付いている)があります。もちろん違います。考えられる解決策は、2つのフィールドを1つに組み合わせる方法を考えることです。

Workaround

これらのデータを(各年の)単一の列で視覚化する別のソリューションは、この demo example のような、積み上げ縦棒グラフを作成することです。このような積み重ねによって、各列の高さが自動的にそのすべての値の「合計」に自動的に対応することに注意してください。

ただし、これはCharts APIを使用してのみ(今のところ)実行できることです。詳細については、 積み上げ縦棒/棒グラフ に関する問題を参照してください。 comment nr 3 が含まれているので、コードスニペットを使用して作業を進めることができます。これは次のようになります。

function MYMODULE_chart_alter(&$chart, $chart_id) {
  dsm($chart_id); // Need Developer module enabled for dsm to work
  if ($chart_id == 'MYCHARTVIEW__DISPLAY') { // Watch out for those double underscores
    $chart['#stacking'] = TRUE;
  }
}

その中の$chart_idに関するテストに注意してください。本当に積み重ねたいグラフに対してのみ積み重ねを有効にします。

すべての会社で同じ色を使用する場合(Charts APIで指定することもできます)、各年に1列が表示され、合計のみが表示されます(さまざまな会社を区別できないため、同じ色を使用します)。

0
Pierre.Vriens