У меня есть этот MDX
запрос:
WITH
MEMBER [CLIENT].[WITHOUT CLIENT X] AS
'[CLIENT].[All CLIENTs] - [CLIENT].[CLIENT X]'
SELECT
[Measures].[Sales] ON COLUMNS
,{[STORE].[All STOREs].Children} ON ROWS
FROM [Sales]
WHERE
CrossJoin
(
{[YEAR].[2015]}
,{[CLIENT].[WITHOUT CLIENT X]}
);
Этот запрос возвращает правильный результат (продажи всех магазинов без [CLIENT].[CLIENT X]).
Теперь я хочу использовать этот вычисляемый элемент ([КЛИЕНТ].[БЕЗ КЛИЕНТА X]) в Saiku, OpenI, BTable или Pivot4J как обычное измерение или что-то в этом роде.
Для этого я добавил в schema.xml:
<CalculatedMember name="WITHOUT CLIENT X"
formula="([CLIENT].[All CLIENTs] - [CLIENT].[CLIENT X])" hierarchy="CLIENT" parent="CLIENT" visible="true"></CalculatedMember>
Если я запускаю:
Select [Measures].[Sales] on COLUMNS,
{[STORE].[All STOREs].Children} ON ROWS
from [Sales]
WHERE CrossJoin({[YEAR].[2015]}, {[CLIENT].[WITHOUT CLIENT X]})
возвращенный результат правильный, но я не вижу этого измерения [КЛИЕНТ].[БЕЗ КЛИЕНТА X].
В Saiku, OpenI или Pivot4J я не могу найти это измерение. BTable получает это измерение как MEASURES из-за CDA (/api/olap/getCubeStructure), и результат такой:
{
"type": "measure",
"name": "WITHOUT CLIENT X",
"caption": "WITHOUT CLIENT X]",
"qualifiedName": "[CLIENT].[CLIENT X]",
"memberType": "FORMULA"
}
но бесполезно, потому что я не могу использовать в фильтре.
У вас такие же ответы?
Возможные вопросы:
- Почему вы используете член, а не именованный набор?
Из-за измерения CLIENT это огромный (более 50000) запрос с элементом, который выполняется за 1 секунду, а с набором - более 5 минут.
- почему бы не использовать КРОМЕ?
То же, что 1.
- почему бы не использовать только запрос mdx?
Потому что окончательный отчет не для технических специалистов, и они хотят изменить этот фильтр.
ОБНОВИТЬ ИНФОРМАЦИЮ
Я переименовал [КЛИЕНТ].[БЕЗ этого_КЛИЕНТА] в [КЛИЕНТ].[БЕЗ КЛИЕНТА X] и [КЛИЕНТ].[Мой специальный клиент] с *[КЛИЕНТ].[КЛИЕНТ X]*, чтобы избежать путаницы.
Я хочу отфильтровать уровень следующим образом: добавить всех участников (КЛИЕНТ), кроме одного (КЛИЕНТ X).
Возвращенный результат правильный, когда я использую запрос mdx, потому что клиенты GUI OLAP не могут прочитать мою схему xml.
I don't know where is my error.
Спасибо, Гео.
РЕШЕНО
Для того, что я хочу (фильтрация одного элемента из большого списка), ответ таков:
Я создал еще одно измерение, которое используется только для фильтра.
<Dimension type="StandardDimension" visible="true" highCardinality="false" name="CLIENT X">
<Hierarchy visible="true" hasAll="true">
<Table name="SALES" schema="SALES" />
<Level name="CLIENT X" visible="true" column="CLIENT" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
<KeyExpression>
<SQL dialect="oracle">
<![CDATA[CASE WHEN CLIENT = 'CLIENT X' THEN 'CLIENT X' ELSE 'WITHOUT CLIENT X' END]]>
</SQL>
</KeyExpression>
</Level>
</Hierarchy>
</Dimension>
the result returned is corect, but i can't see this dimension [CLIENT].[WITHOUT_this_CLIENT]
- Можете ли вы отредактировать свой ответ с выводом и сообщить нам, что вы имеете в виду? Кроме того, каковы ваши настоящие намерения? - person SouravA   schedule 16.03.2015