2

MySQL の 1 つのテーブルから OLAP ビューを作成する必要があります。

テーブルの次の列から情報を取得する必要があります。

  • ログイン注意
  • ログアウト注意
  • タイムスタンプ
  • ユーザー名

そこで、このモンドリアン スキーマを作成しました。

<Schema name="Login">
  <Cube name="Login" visible="true" cache="true" enabled="true">
    <Table name="event_log">
    </Table>
    <Dimension visible="true" highCardinality="false" name="UserFirstName">
        <Hierarchy visible="true" hasAll="true" allMemberName="All UserFirstName">
          <Level name="UserFirstName" visible="true" column="userFirstName" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">
          </Level>
        </Hierarchy>
    </Dimension>
<Dimension visible="true" highCardinality="false" name="LoginNote">
        <Hierarchy visible="true" hasAll="true" allMemberName="All LoginNote">
          <Level name="LoginNote" visible="true" column="loginNote" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">
          </Level>
        </Hierarchy>
    </Dimension>
<Dimension visible="true" highCardinality="false" name="LogoutNote">
        <Hierarchy visible="true" hasAll="true" allMemberName="All UserFirstName">
          <Level name="LogoutNote" visible="true" column="logoutNote" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">
          </Level>
        </Hierarchy>
    </Dimension>
    <Measure name="Users" column="userFirstName" aggregator="count" description="Users">
    </Measure>

MDX クエリを実行して、行に LoginNote および LogoutNote 情報を表示し、列に UserFirstName を表示する方法を知りたいです。

走れました

Select
UserFirstName.Children ON COLUMNS,
LogoutNote.Children ON ROWS
FROM Login

また

Select
UserFirstName.Children ON COLUMNS,
LoginNote.Children ON ROWS
FROM Login

しかし、私は走ることができません

Select
UserFirstName.Children ON COLUMNS,
{LogoutNote.Children,LoginNote.Children} ON ROWS
FROM Login

エラーが返されるため:

関数 '{}' へのすべての引数は、同じ階層を持つ必要があります。

どんな助けでも大歓迎です!

ありがとう!

4

1 に答える 1

3

この表記は、2 つのメンバー セットを結合する の{...}省略形です。Union(...)これらのメンバーは (エラー メッセージに示されているように) 同じ階層から取得する必要がありますが、異なるディメンション/階層である LogoutNote と LoginNote のメンバーを含めています。

Crossjoin()階層を結合する場合は、2 つのセットのデカルト積を作成する必要があります。

SELECT
    UserFirstName.Children ON COLUMNS,
    Crossjoin(LogoutNote.Children, LoginNote.Children) ON ROWS
FROM Login

これがクエリの結果として期待するものとまったく同じかどうかはNON EMPTYわかりません。その Crossjoin() の前に a を追加して、値のない LoginNote と LogoutNote のすべての組み合わせを排除することをお勧めします。

それがあなたを正しい軌道に乗せることを願っています。

于 2013-03-06T03:27:05.397 に答える