Обычно измерения в кубе OLAP представляют собой числа, и эти числа агрегируются посредством сложения (или с помощью некоторой не очень экзотической функции, такой как times, MAX или MIN).Мне интересно, позволяет ли какой-либо из основных серверов OLAP принимать меры, которые устанавливает чисел или устанавливает строк.(«Установить» здесь в математическом смысле, а не на языке жаргонного выражения OLAP «список кортежей».) В то время как OLAP обычно агрегирует меры с помощью числовых функций, мои гипотетические «меры набора» будут агрегироваться с помощью операций набора, например, объединения объединенияили установите пересечение.
Меня интересует как теоретически, так и практически.Теоретически / абстрактно / математически, есть хорошая параллель между сложением над целыми числами и объединением над множествами, и кажется, что кто-то мог рассмотреть эту параллель при написании OLAP-сервера.(Одна потенциальная реализация, если все возможные члены набора были известны заранее, состоит в том, чтобы представлять каждый набор как (потенциально большое) целое число, а затем агрегировать / объединять, выполняя побитовое ИЛИ.)
Что касается практикиЯ попытаюсь привести конкретный случай, когда это может показаться, по крайней мере, незначительно полезным: предположим, у вас есть набор данных, в котором каждый факт представляет собой метаданные, связанные с академической статьей.Каждая статья может иметь дату, тему и набор из одного или нескольких авторов, например:
- fact1: {"Год": 1997, "Тема": "AI", "AuthorSet"": [" Билл Джонс "," Марта Х "]}
- fact2: {" Год ": 1997," Тема ":" Лингвистика "," AuthorSet ": [" Джон К "," Сэм С ""]}
- fact3: {" Year ": 1997," Topic ":" Linguistics "," AuthorSet ": [" John Q "," Jack X "]}
- и т. Д.
(я использую квази-JSON здесь только потому, что это помогает понять, что является многозначным.)
Если вы создали куб OLAP вокруг этих данных, казалось бы,вполне естественно иметь возможность составить отчет, показывающий, как набор авторов, пишущих на заданную тему, менялся из года в год.В MDX это может выглядеть так:
select
[Measures].[AuthorSet] on columns,
[Year].[Year].All on rows
where ([Topic].[Topic].[AI])
Для каждого года этот запрос будет сворачивать список авторов с помощью set union.
Чтобы максимально использовать эту функциювам, вероятно, понадобятся пользовательские клиентские инструменты OLAP, которые в частности знали о заданных показателях.Но для существующих клиентов вы можете просто вернуться к некоторому строковому представлению набора.(например, приведенный выше запрос может вернуть ячейки, содержащие, например, строку «Билл Джонс; Марта X; Джон Q; Сэм S; Джек X»)
Я больше всего знаком с SSAS, а SSAS неткажется, поддерживает что-то подобное из коробки.Кажется, что может быть способ взломать его вместе, используя меры строкового типа, возможно, плюс пользовательские функции CLR, но я еще не понял этого.
Этот конкретный случай вы также можете решитьтолько в MDX, возможно, с использованием пользовательских элементов, Generate и SetToStr?(Решения приветствуются!) Но моя интуиция заключается в том, что по мере того, как все усложняется, было бы более естественным, чтобы агрегация наборов происходила более естественно за кулисами с помощью этой функции "set member".