4

多くのショップの階層を表すユーザー ディメンションがあります。たとえば、店舗は国 - > 地域 - > 町/村 - > 実際の店舗に分割されます。したがって、階層の観点から見ると、レベル 1、レベル 2、レベル 3、レベル 4 などです。

奇妙なことに、WHERE 句で MDX クエリとフィルタリングを実行すると、階層によって、特定のユーザーに対してデータが表示されません。ただし、階層によるフィルタリングではなく、属性によるフィルタリングとまったく同じ MDX を実行すると、レコードが表示されます。

ユーザー階層 [UserIdHierarchy] には、次のメンバーの階層が含まれていることに注意してください。

  1. [UserLevel1Id]
  2. [UserLevel2Id]
  3. [UserLevel3Id]
  4. [UserLevel4Id]
  5. [UserLevel5Id]

これらは 2 つのケースであり、まったく同じ結果が返されるはずです...

ユーザー階層を使用した Where 句のフィルタリング:

どこ
(
    DESCENDANTS([Dim User].[UserIdHierarchy].&[#12345],0, self)
)

ユーザー階層を使用しない Where 句のフィルタリング:

どこ
(
    DESCENDANTS([Dim User].[UserLevel3Id].&[#12345],0, self)
)

両方のフィルターが、この特定のユーザーに対して同じデータを表示しないのはなぜですか?

4

1 に答える 1

0

その理由は、ユーザー階層が歴史的なアプローチを使用していたためです。そのため、ユーザーが複数の階層 (以下に示すように) を持っている場合、何らかの奇妙な理由で MDX が混乱し、ディメンション階層の最初の項目が表示されていました。以下に、システムへの登録後のユーザーの 3 つの異なるセットアップを示します。ただ行うのではなく、私の問題を解決するには

[Dim User].[UserIdHierarchy].&[#12345]

where句ですべてのユーザーメンバーをフィルタリングしています。つまり

{[Dim User].[UserIdHierarchy].[UserLevel1Id].&[#12345],
[Dim User].[UserIdHierarchy].[UserLevel2Id].&[#12345],
[Dim User].[UserIdHierarchy].[UserLevel3Id].&[#12345]}

次に、FACT データに対して実際のフィルタリングが行われます。このようにして、自分のユーザー (この場合は #12345) に一致するユーザー階層内のすべてのメンバーのすべてのデータを含めます。

于 2013-06-10T19:50:07.433 に答える