0

ダッシュボードのような外観のドキュメントを作成しています。年を選択するためにラジオボタンを使用しています。悲しいことに、私のデータセットの 1 つでは、まったく同じ値が含まれていても、年属性は別の属性です。ドキュメント内の値に基づいて属性を一致させる問題を解決するにはどうすればよいですか?

基本的に、ラジオ ボタン 2013 をクリックして、年という名前の属性を含むグラフ 1 と観測年という名前の属性を含むグラフ 2 で値 2013 を選択します。


私はあなたが私に言ったようにしました。

観測年を含むレポートに高度な資格フィルターを追加しました。

 [Year]@ID = [Obs-Year]@ID

次に、年という属性をレポートに追加しました。

しかし、レポートを実行しようとすると、次のエラーが発生します。

レポート: xxxxxxxxxxx

ジョブ: 8600588

ステータス: 実行に失敗しました

エラー: SQL 生成の完了 QueryEngine でエラーが発生しました: レポートにテーブル ANSWERS と YEAR の間のパス 1 のクロス結合が含まれています。デカルト結合の設定により、実行が中止されました。コンポーネントの Process メソッドでエラーが発生しました: QueryEngineServer、プロジェクト xxxxxx 、ジョブ 8600588、エラー コード = -2147212544。

開始時間:15:13:50

4

1 に答える 1

1

できません... または、レポートに year 属性を追加しyear-of-observationてフィルター year = year-of-observation を設定することもできます。この時点で、多くのことが起こります。

  1. 2 つの属性に関係がない場合、年のルックアップ テーブルがクロス結合のレポート クエリに追加されますが、フィルターによって結果が適切なものに制限されるため、心配する必要はありません。

  2. 属性の 1 つがクロス結合しない他の属性の親である場合は、フィルターを削除しますが、結果を再確認してください (念のため)。

  3. レポートで使用されるファクト テーブルの 1 つに年が既にマップされており、年と観測年の間に 1 対 1 の対応がない場合、間違った結果が生じる可能性があります。

また

Year と Year-of-observation に関係がないと仮定すると、それらが同じテーブルの同じルックアップ列にマッピングされている場合 (エイリアスもロール認識もなし)、MicroStrategy は両方の属性に対して 1 つのルックアップのみを使用するため、フィルターは必要ありません。 .

一言アドバイス

とにかく、異なる論理エンティティ (2 つの属性など) を分離しておくことをお勧めしますが、(おそらくあなたのケースではありません) それらが同じものである場合は、1 つだけを使用してください。

上級レベル

別の可能な解決策は、関係をいじることです: Year を観測年の親にすることを試みることができます。次に、年属性が欠落しているレポートに含めることができますが、これが本当に実行可能である場合は、スキーマによって異なります。 Year と Year-of-observation の子がすでにいる場合は、階層パスが乱雑になります。

クロス結合エラー

解決策 1 に従う場合、クロス結合に関連するエラーが発生する可能性があります。これは、SQL エンジンが Cross Join からユーザーを保護しようとしているために発生します (通常は悪いことです)。

このエラーを無効にするには、レポートの次の VLDB プロパティを変更する必要があります (クロス結合を使用するレポートが多数ある場合は、プロジェクト レベルでも変更できます)。

VLDB Properties -> Joins -> Cartesian Joins Warning
于 2015-04-30T11:22:46.123 に答える