Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как сделать dimension member типа "значение не указано"?
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть такая проблема: В таблице фактов есть поле внешнего ключа (ссылка на таблицу измерения). Это поле может содержать значение NULL - соответствующая инф-ия не указана. Хочется показывать в кубе все значения из таблицы измерения _ПЛЮС_ значение "НЕ УКАЗАНО" для тех случаев, когда в этом поле указано NULL. Подскажите пожалуйста, как можно реализовать такую штуку. Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2003, 10:48 |
|
||
|
Как сделать dimension member типа "значение не указано"?
|
|||
|---|---|---|---|
|
#18+
Теоретически, в таблице измерения можно было бы завести запись с Id=Null и Name="Не указано". Но MS AS (если он имеется в виду), такую связку игнорирует. Что то Null он на дух не переносит. Мне пришлось в таблице фактов принудительно занулять Null значения поля ID постобработкой SQL скриптом, а в соответсвующей таблице измерения генерить строку с Id=0 и Name="Не указано" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2003, 11:54 |
|
||
|
Как сделать dimension member типа "значение не указано"?
|
|||
|---|---|---|---|
|
#18+
Этот вариант существовал с самого начала. Может, есть другие решения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2003, 12:42 |
|
||
|
Как сделать dimension member типа "значение не указано"?
|
|||
|---|---|---|---|
|
#18+
Этот вариант существовал с самого начала. Может, есть другие решения? Решения могут быть такими: 1) Правильно проектировать хранилище данных (например включить в таблицу фактов избыточность), или 2) Правильно выбирать OLAP-инструментарий (который умеет решать такие простенькие задачи визуальными средствами, без написания вьюшек или скриптов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2003, 14:52 |
|
||
|
Как сделать dimension member типа "значение не указано"?
|
|||
|---|---|---|---|
|
#18+
2 Jurii: 1) Правильно проектировать хранилище данных (например включить в таблицу фактов избыточность) Не совсем понятно, что Вы имеете в виду. Какую избыточность Вы предлагаете включать? 2) Правильно выбирать OLAP-инструментарий (который умеет решать такие простенькие задачи визуальными средствами, без написания вьюшек или скриптов). А какое в данном случае отношение имеет выбор OLAP-средств к вопросу проектирования базы данных? 2 Andronov: При загрузке таблиц измерений в таблицу вставляется строка (0, НЕИЗВЕСТНО). При загрузке таблиц фактов (если, конечено, Ваше хранилище строится на основе моделей "звезда" или "снежинка") значения NULL соответствующих внешних ключей заменяем на 0. Это, собственно, то, что рекомендовал GoodLeo. Однако NULL может обозначать разные вещи (неизвестно, повреждено, будет заполнено в будущем или ещё какие-нибудь варианты). Возможно, Вам захочется создать несколько служебных записей с фиксированными ID чтобы обозначать разные ситуации отсутствия данных. Другой пример - если о данных известно ещё что-то, кроме атрибута, имеющего в нашем случае значение NULL. Тогда, чтобы выжать максимум из доступной информации, можно пойти на усложнение решения. Поясню на примере. Допустим, мы не знаем названия клиента, но знаем из какого он города (город, в данном случае может быть родительским уровнем уровня клиент). Желая сохранить информацию о городе, мы заводим ровно столько фиктивных записей о клиентах, сколько существует городов. Это позволит получить возможность группировки по городам, в которых располагается клиент, однако усложнит процедуры загрузки хранилища. Тут не обойтись просто несколькими служебными записями с заранее известными ключами. Дело сразу же доходитдо генерации суррогатных ключей. Хотя, если Вы строите что-то серьёзное, то суррогатные ключи вылазят сразу. Придётся выбирать - либо простота загрузки, либо полнота анализа. 2 Jurii: Юрий, странно, что такие задачи Вы называете простенькими . По моему опыту попадаются очень даже нетривиальные. С уважением, Константин Лисянский http://lissianski.narod.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2003, 01:11 |
|
||
|
Как сделать dimension member типа "значение не указано"?
|
|||
|---|---|---|---|
|
#18+
Константин, 1) Правильно проектировать хранилище данных (например включить в таблицу фактов избыточность) Не совсем понятно, что Вы имеете в виду. Какую избыточность Вы предлагаете включать? Я имею в виду, что есть две крайности - либо иметь таблицу фактов и таблицы измерений, либо сделать избыточную вьюшку (реальную или виртуальную), в которую войдут нужные поля и из таблицы фактов, и из таблиц измерений + вычисляемые поля. Я рекомендую идти по второму пути, в SQL-запросе можно будет использовать outer join и сделать вычисляемые поля, в которые будет попадать строковая константа ("НЕ УКАЗАНО"), если в исходном поле будет NULL. А какое в данном случае отношение имеет выбор OLAP-средств к вопросу проектирования базы данных? Перед тем как начинать создавать кубы (как я понимаю, г-н Andronov уже приступил к этому этапу), нужно проанализировать, насколько чистые данные лежат в БД, насколько заполнены все справочники или в них есть значения NULL и т.п. Если БД похожа на демо-базу Northwind, то тогда по большому счету подойдет любой OLAP-продукт. Однако если с БД не все так гладко, имеет смысл пользоваться максимально продвинутыми OLAP-продуктами, которые сильны по показателю Completeness of Vision (то есть содержат функциональность для решения типичных задач). Юрий, странно, что такие задачи Вы называете простенькими. По моему опыту попадаются очень даже нетривиальные. Попадаются конечно любые задачи, но в моей практике в львиной доле случаев нужно было просто использовать outer join при создании виртуальных вьюшек в Cognos Impromptu (чтобы не исчезли записи, в которых NULL), а потом в объекте Уровень измерения в модели Cognos PowerPlay прописать строковую константу (например "НЕ УКАЗАНО" или "Регион неизвестен"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2003, 09:56 |
|
||
|
Как сделать dimension member типа "значение не указано"?
|
|||
|---|---|---|---|
|
#18+
2 Константин Лисянский: При загрузке таблиц измерений в таблицу вставляется строка (0, НЕИЗВЕСТНО). Вот именно это меня и интересует. Как это сделать? То что можно сделать view, куда вставить все, что нужно - это понятно. Я по наивности полагал, что такую вещь (достаточно частую, как мне представляется) можно сделать средствами MS AS. Насколько я понимаю, я ошибался. В любом случае, благодарю за ответ. 2 Jurii: Правильно проектировать хранилище данных Мне кажется, это утверждение, как бы пафосно оно не звучало, не подходит к поставленному вопросу (с др. стороны, так можно отвечать на любой вопрос). Я использую в кач-ве таблицы фактов view на основе запроса с left join. Это одна из причин, по которым в ней появляются NULL'ы. Кстати, я не считаю view - избыточностью. Правильно выбирать OLAP-инструментарий Тоже звучит хорошо, но, другой инструментарий стоит других денег. Лично я, если бы принимал решения относительно используемого инструмента, не стал бы из-за такой проблемы покупать другой продукт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2003, 10:41 |
|
||
|
Как сделать dimension member типа "значение не указано"?
|
|||
|---|---|---|---|
|
#18+
2 Andronov: На мой взгляд, если Вы проектируете Ваше хранилище данных как "звезду" или "снежинку", то лучше иметь выделенную таблицу фактов в классическом варианте, а не строить её на основе вьюшек. Вьшки тоже имеют своё место в таком подходе. Например, когда один объект выступает в нескольких ролях, то вместо отдельной таблицы измерения можно построить вьюшки над этой таблицей, которые будут затем использоваться в качестве измерений при выборках. Можно и без них, это всё-таки удобно. Этот вопрос в свое короткой статье обсуждает Ральф Кимбал. Это здесь: http://www.dbmsmag.com/9708d05.html. Теперь, что касается вставки строки (0, НЕИЗВЕСТНО). Опять-таки, полагаю классический дизайн - таблица фактов с внешними ключами на таблицы измерений. Очевидно, в таблицы измерений простым INSERT'ом можно вставить эти строки. Соответственно, каждый раз при загрузке таблицы фактов можно будет вместо NULL вставить в соответствующий столбец значение 0. Если, конечно, Вы захотите продолжить использовать вьюшку в качестве таблицы фактов, то Вам придётся слегка модифицировать её SQL. Для замены NULL, возникающего в результате внешнего соединения, на 0 можно воспользоваться функцией COALESCE. Вместо Код: plaintext Пишем Код: plaintext Ну, я думаю, вы это сами прекрасно знаете. Всё делается средствами SQL. Не думаю, что надо такие задачи нужно перекладывать на OLAP, иначе нужно будет (по Юрию) вибирать тот OLAP, который будет уметь это делать. Зачем сажать себя на иглу? Продолжаю настаивать на том, что подготовка данных для анализа должна проводиться в максимальном объёме до использования средств OLAP. Это - совершенно отдельная и часто очень сложная задача, в особенности, если источников данных несколько. Данные в 100 процентах случаев (я не ошибся) - грязные и их надо чистить до того, как они попадут в OLAP. Удачи! С уважением, Константин Лисянский http://lissianski.narod.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2003, 11:34 |
|
||
|
Как сделать dimension member типа "значение не указано"?
|
|||
|---|---|---|---|
|
#18+
To Andronov: "Правильно проектировать хранилище данных" Мне кажется, это утверждение, как бы пафосно оно не звучало, не подходит к поставленному вопросу Ну почему же не подходит - оно означает, что вполне разумно переложить часть задачи на РСУБД, а остальное делать на OLAP-сервере. Если Вы почитаете архивы дискуссий на форуме OLAP.ru , там часто встречается рекомендация, что "проектировать надо правильно" :) "Правильно выбирать OLAP-инструментарий" Тоже звучит хорошо, но, другой инструментарий стоит других денег. Лично я, если бы принимал решения относительно используемого инструмента, не стал бы из-за такой проблемы покупать другой продукт. Вы правы в том, что не нужно покупать лопату, чтобы выкопать небольшую яму в земле, поскольку это можно сделать более дешевым способом - выкопать вручную. Но если в дальнейшем придется копать много ям - лопата себя многократно окупит :) To Константин: Не думаю, что надо такие задачи нужно перекладывать на OLAP, иначе нужно будет (по Юрию) вибирать тот OLAP, который будет уметь это делать. Зачем сажать себя на иглу? Насчет иглы я с Вами согласен. Только нужно понимать, что если использовать Ваш подход и все перекладывать на этап разработки хранилища данных - то это и есть чистой воды подсадка на иглу - поскольку с написанными вручную скриптами и процедурами в скором времени никто не разберется кроме того человека, который их создавал. А если использовать продвинутый OLAP-инструментарий, в котором и SQL-запросы, и структура кубов создается визуальными средствами - в этом может разобраться любой человек, и подсадки на иглу никакой нет. Продолжаю настаивать на том, что подготовка данных для анализа должна проводиться в максимальном объёме до использования средств OLAP. Ну а я сторонник выбора золотой середины, когда нагрузка балансируется между РСУБД и OLAP-сервером. Не забывайте также и про массовый российский рынок, на котором большинство компаний использует файл-серверные СУБД, и для таких случаев важна продвинутость OLAP-продукта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2003, 15:58 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=32349027&tid=1872957]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 398ms |

| 0 / 0 |
