powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / WHERE ???
25 сообщений из 29, страница 1 из 2
WHERE ???
    #32802618
гуест3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понимаю, когда задаешь несколько условий в WHERE они действуют на возвращаемый результат, сочетаясь по "и". Можно ли как-нибудь сделать, чтобы они сочетались по "или" ?

З.Ы. Извините за косноязычность ...
...
Рейтинг: 0 / 0
WHERE ???
    #32802806
No Pasaran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь про sql, то конечно можно: where A or B

Если речь про какую-то определенную OLAP-плтаформу, то неплохо было бы ее указать в вопросе %)
...
Рейтинг: 0 / 0
WHERE ???
    #32802830
гуест3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри, я про MDX
...
Рейтинг: 0 / 0
WHERE ???
    #32804861
гуест3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MS AS
...
Рейтинг: 0 / 0
WHERE ???
    #32805425
олапист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
идеологически MDX запрос всего лишь определяет множество ячеек куба которые нужно включить в результат
соответственно все сочетания ячеек по и/или должны быть определены в кубе, например путем создания дополнительных иерархий
...
Рейтинг: 0 / 0
WHERE ???
    #32806727
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
олапистидеологически MDX запрос всего лишь определяет множество ячеек куба которые нужно включить в результат
соответственно все сочетания ячеек по и/или должны быть определены в кубе, например путем создания дополнительных иерархий

иерархия и аггрегация по определению являются "И",
а вот "ИЛИ" в МДХ, мне так кажется, можно достигуть только извратом.
в том же SQL приводит в 99% к table scan.
...
Рейтинг: 0 / 0
WHERE ???
    #32806906
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по-моему не туда мы смотрим...
По определению, операции "и" и "или" предполагают наличие нескольких операций сравнения. Если предположить, что указание конкретного члена измерения это операция сравнения на равенство, то поставленный вопрос можно перефразировать так:
"Можно-ли во WHERE перечислить несколько членов одного измерения?" - ответ:
Нет, т.к. WHERE используется для создания срезов (slice) и в отличие от осей, которые возвращают данные для нескольких членов, WHERE возвращает данные для одного члена каждого измерения . Для всех не определенных во WHERE измерениях (отсутствие WHERE - частный случай этого) используются DefaultMember.
...
Рейтинг: 0 / 0
WHERE ???
    #32807046
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Юконе можно задать условие ИЛИ в WHERE clause указав там не tuple а set.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
WHERE ???
    #32807159
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MoshaВ Юконе можно задать условие ИЛИ в WHERE clause указав там не tuple а set.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights

Это то понятно, если ИЛИ между членами одного измерения, а если надо что то вроде

select customers.members on 0,
products.members on 1
where time.2004 OR country.USA

???
...
Рейтинг: 0 / 0
WHERE ???
    #32807250
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
backfireЭто то понятно, если ИЛИ между членами одного измерения, а если надо что то вроде

select customers.members on 0,
products.members on 1
where time.2004 OR country.USA
Нет никакой разницы - будь это члены одной иерархии или разных, все равно set in WHERE clause.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
WHERE ???
    #32807330
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
backfire

select customers.members on 0,
products.members on 1
where time.2004 OR country.USA

???

то я бы сделал это приблизительно так

with member time.mymember as SUM({(time.2004, country.All),(time.All, country.USA)})
// что равносильно
// with member country.mymember as SUM({(time.2004, country.All),(time.All, country.USA)})
select customers.members on 0,
products.members on 1
where time.mymember
...
Рейтинг: 0 / 0
WHERE ???
    #32807333
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mosha backfireЭто то понятно, если ИЛИ между членами одного измерения, а если надо что то вроде

select customers.members on 0,
products.members on 1
where time.2004 OR country.USA
Нет никакой разницы - будь это члены одной иерархии или разных, все равно set in WHERE clause.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights


а примерчик в терминах Юкона и образцовой базы можно?
...
Рейтинг: 0 / 0
WHERE ???
    #32807339
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В хэлпе на MSAS 2000 тоже дан пример:
Код: plaintext
WHERE { ([Time].[1st half], [Route].[nonground]), ([Time].[1st half], [Route].[ground]) }
однако замечено, что будет предпринята попытка агрегирования, однако если результатом будет не tuple, то произойдет ошибка.
Я попытался это проделать - у меня не получилось.
...
Рейтинг: 0 / 0
WHERE ???
    #32807340
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
backfire backfire

select customers.members on 0,
products.members on 1
where time.2004 OR country.USA

???

правильно так (и не только для Юкона)

with member time.mymember as 'SUM({(time.2004, country.All),(time.All, country.USA)}) - (time.2004, country.USA)'
// что равносильно
// with member country.mymember as 'SUM({(time.2004, country.All),(time.All, country.USA)}) - (time.2004, country.USA)'
select customers.members on 0,
products.members on 1
where time.mymember
...
Рейтинг: 0 / 0
WHERE ???
    #32807346
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример можно дать и в терминах AS2K - построение set в MDX не меняется, разница только заключается в том, что в AS2K этот set надо вставлять внутрь Aggregate который сидит на calculated member, а в Юконе set напрямую может идти в WHERE clause.
Set может выглядеть например так:

Код: plaintext
{(Time.[ 2004 ], Country.[All Contries]), (Time.[All Times], Country.USA)}

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
WHERE ???
    #32807349
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgorВ хэлпе на MSAS 2000 тоже дан пример:
Код: plaintext
WHERE { ([Time].[1st half], [Route].[nonground]), ([Time].[1st half], [Route].[ground]) }
однако замечено, что будет предпринята попытка агрегирования, однако если результатом будет не tuple, то произойдет ошибка.
Я попытался это проделать - у меня не получилось.

пожалуйста, нельзя ли более точную ссылку на BOL

даю голову на отсечение, что этот пример вызывает синтаксическую ошибку в AS2K, ибо там под WHERE может быть только tuple.
...
Рейтинг: 0 / 0
WHERE ???
    #32807352
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShigorВ хэлпе на MSAS 2000 тоже дан пример:
Этот пример вряд ли из help AS2K, скорее он из спецификации OLEDB for OLAP

backfire'SUM({(time.2004, country.All),(time.All, country.USA)}) - (time.2004, country.USA
А зачем делать минус ?

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
WHERE ???
    #32807359
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\ 80 \Tools\Books\olapdmad.chm::/agmdxbasics_6him.htm

но я же написал, что у меня это не получилось, може потому, что в примере
измерение [Route] состоит из 2х членов и оно явно преобразуется в tuple, у меня же таких нет :(
...
Рейтинг: 0 / 0
WHERE ???
    #32807371
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все таки наши BOL это что-то, сразу после этого примера там написано:
If the «slicer_specification» cannot be resolved into a single tuple, an error will occur.Зачем тогда было давать такой пример...

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
WHERE ???
    #32807376
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mosha ShigorВ хэлпе на MSAS 2000 тоже дан пример:
Этот пример вряд ли из help AS2K, скорее он из спецификации OLEDB for OLAP

backfire'SUM({(time.2004, country.All),(time.All, country.USA)}) - (time.2004, country.USA
А зачем делать минус ?

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights

а потому что

SUM({(time.2004, country.All),(time.All, country.USA)}) считает дважды

(time.2004, country.USA)

или я смешу ваши тапочки? :-)
...
Рейтинг: 0 / 0
WHERE ???
    #32807386
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MoshaВсе таки наши BOL это что-то, сразу после этого примера там написано:
If the «slicer_specification» cannot be resolved into a single tuple, an error will occur.Зачем тогда было давать такой пример...

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights

очень приятно слышать самокритику из ваших уст :-)
...
Рейтинг: 0 / 0
WHERE ???
    #32807419
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
backfireа потому что
SUM({(time.2004, country.All),(time.All, country.USA)}) считает дважды
(time.2004, country.USA)
Да, я совсем забыл что в AS2K он действительно посчитает пересечение дважды, в Юконе set in the WHERE clause посчитает все один раз как и надо, да и функция Aggregate тоже (хотя в Beta 2 это еще не подключено). Вычитание пересечения становится непрактичным, когда количество измерений растет - там надо начинать компенсировать компенсации и т.д. - именно поэтому в Юконе мы сами автоматически убираем дупликаты.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
WHERE ???
    #32807692
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moshaи т.д. - именно поэтому в Юконе мы сами автоматически убираем дупликаты.


Ну и хорошо :-))
- можно будет спокойно занятся прикладными задачами, а не потеть над реализацией алгебры множеств при генерации MDX.
...
Рейтинг: 0 / 0
WHERE ???
    #32825856
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mosha[quot backfire]
Да, я совсем забыл что в AS2K он действительно посчитает пересечение дважды, в Юконе set in the WHERE clause посчитает все один раз как и надо, да и функция Aggregate тоже (хотя в Beta 2 это еще не подключено). Вычитание пересечения становится непрактичным, когда количество измерений растет - там надо начинать компенсировать компенсации и т.д. - именно поэтому в Юконе мы сами автоматически убираем дупликаты.



Пока что все выглядет достаточно удручающе в королевстве Юкона :-(

- поведение AGGREGATE как и AS2K (необходимо вводить компенсацию)
- поведение SET под WHERE вообще не поддается обьяснению

нижеприведенные запросы отрабатывались в декабрьском билде Юкона (9.0.951)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
-- Query 0
select 
{
	[Product].[Product Categories].[All], 
	[Product].[Product Categories].[All].children
} on  0 ,

crossjoin(
	{
		[Customer].[Customer Geography].[All Customers], 
		[Customer].[Customer Geography].[All Customers].children
	}, 
	{
		[Measures].[Internet Sales Amount], 
		[Measures].[Internet Order Count]
	}
) on  1 
from [Direct Sales]


-- Query 1
with 
set set1 as 
{
	(
		[Product].[Product Categories].[Category].&[ 3 ], 
		[Customer].[Customer Geography].[All Customers]
	),
	(
		[Product].[Product Categories].[All], 
		[Customer].[Customer Geography].[Country-Region].&[Australia])
}
-- Двойной учет
--member [Product].[Product Categories].[MyMember] as AGGREGATE(set1, [Measures].currentmember)  

-- А так правильно
member [Product].[Product Categories].[MyMember] as 
 AGGREGATE(set1, [Measures].currentmember) - 
 ([Product].[Product Categories].[Category].&[ 3 ], 
  [Customer].[Customer Geography].[Country-Region].&[Australia], [Measures].currentmember)

select 
{[Measures].[Internet Sales Amount], [Measures].[Internet Order Count]} on  0 
from [Direct Sales]
where [Product].[Product Categories].[MyMember]

-- Query 2 (ни поведение ни результат не понятен, короче не то что хотелось :-(
select 
{[Measures].[Internet Sales Amount], [Measures].[Internet Order Count]} on  0 
from [Direct Sales]
where
{
	(
		[Product].[Product Categories].[Category].&[ 3 ], 
		[Customer].[Customer Geography].[All Customers]
	),
	(
		[Product].[Product Categories].[All], 
		[Customer].[Customer Geography].[Country-Region].&[Australia])
}
...
Рейтинг: 0 / 0
WHERE ???
    #32825882
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо backfire, это интересный баг связанный с использованием перспективы вместо куба в FROM clause. (Перспектива [Direct Sales], которая не имеет всех measures, накладывается на "неровный" set in WHERE clause и выдает ошибку - мы ее уже чиним :). Если использовать настоющий куб [Adventure Works], то все работает как следует:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select 
{[Measures].[Internet Sales Amount]} on  0 
from [Adventure Works]
where
{
	(
		[Product].[Product Categories].[Category].&[ 3 ], 
		[Customer].[Customer Geography].[All Customers]
	),
	(
		[Product].[Product Categories].[All], 
		[Customer].[Customer Geography].[Country-Region].&[Australia]
                )
}

Дает правильный ответ. Что касается Aggregate - то попробуйте Ваш set с DistinctCount measure - никакого double counting быть не должно. Для других measures, в CTP build включен старый алгоритм, как я уже писал в другом thread, пока ломать backward compatibility ради производительности не дают, поэтому новый код который убирает дупликаты не включен.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / WHERE ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]