Обработка аннулирует в Datawarehouse

Программирование 101:

char c = 'A';
//char c = 'b'; you may use lower case character.
int index = char.ToUpper(c) - 64;//index == 1
6
задан S.Lott 28 July 2009 в 17:16
поделиться

3 ответа

Как указано в предыдущем ответе, нулевым значениям для измерения может быть присвоено много разных значений: неизвестный, неприменимый, неизвестный и т. Д. Если полезно иметь возможность различать их в вашем может помочь приложение, добавляющее «псевдо» записи измерения.

В любом случае я бы избегал использования либо внешних ключей фактов NULL, либо полей измерений, наличие даже одного «неизвестного» значения измерения поможет вашим пользователям определять запросы, включающие всеохватывающие группировка, при которой качество данных не является 100% (и никогда не бывает).

Один очень простой трюк, который я использовал для этого и еще не укусил меня, - это определить суррогатные ключи моих измерений с помощью int IDENTITY (1 , 1) в T-sql (начать с 1 и увеличивать на 1 для каждой строки). Псевдоключи («Недоступно», «Не назначено», «Неприменимо» ) определяются как отрицательные целые числа и заполняются хранимой процедурой, запущенной в начале процесса ETL.

Например, таблица, созданная как


    CREATE TABLE [dbo].[Location]
    (
        [LocationSK] [int] IDENTITY(1,1) NOT NULL,
        [Name] [varchar](50) NOT NULL,
        [Abbreviation] [varchar](4) NOT NULL,
        [LocationBK] [int] NOT NULL,
        [EffectiveFromDate] [datetime] NOT NULL,
        [EffectiveToDate] [datetime] NULL,
        [Type1Checksum] [int] NOT NULL,
        [Type2Checksum] [int] NOT NULL,
    ) ON [PRIMARY]

, и хранимая процедура, заполняющая таблицу с помощью


Insert Into dbo.Location (LocationSK, Name, Abbreviation, LocationBK, 
                      EffectiveFromDate,  Type1Checksum, Type2Checksum)
            Values (-1, 'Unknown location', 'Unk', -1, '1900-01-01', 0,0)

. Я сделал это правилом иметь по крайней мере одну такую ​​псевдострочку для каждого измерения, которая используется в случаях, когда поиск измерения терпит неудачу, и для построения отчетов об исключениях для отслеживания количества фактов, назначенных таким строкам.

4
ответ дан 17 December 2019 в 02:32
поделиться
  1. Либо NULL, либо зарезервированный идентификатор из вашего измерения даты с соответствующим значением. Помните, что NULL действительно может иметь много разных значений, он может быть неизвестным, неприменимым, недействительным и т. Д.

  2. Я бы предпочел пустую строку (а не NULLable), но в проекте, над которым я сейчас работаю, пустая строка преобразуется в NULL и позволяет их в базе данных. Потенциальная проблема, которую следует обсудить, заключается в том, что пустой средний инициал (без второго имени, поэтому известно, что средний инициал пуст) отличается от неизвестного среднего инициала или аналогичной семантики. За деньги наша модель допускает NULL - у меня есть большая проблема с этим в фактах, поскольку обычно они действительно должны быть 0, они всегда используются как 0 и всегда должны быть заключены в ISNULL (). Но из-за политики ETL преобразования пустой строки в NULL они были установлены в NULL - но это был всего лишь артефакт формата транспортного файла фиксированной ширины, в котором из некоторых исходных систем были пробелы вместо 0.

  3. Наши таблицы фактов обычно есть PK, основанный на всех измерениях, поэтому это недопустимо - он будет связан с фиктивным или неизвестным измерением

  4. В SSIS я сделал компонент обрезки, который удаляет пробелы на концах всех строк. Обычно нам приходилось проводить много проверок и преобразований даты в SSIS, что было бы лучше всего в компоненте.

1
ответ дан 17 December 2019 в 02:32
поделиться

Спасибо за ввод,

В моем последнем проекте я сделал две вещи:

1) Использовал предложение Стива о ключах отрицательного идентификатора для неизвестных / специальных значений измерения. Это сработало отлично, и никаких проблем не возникло в процессе построения куба SSAS.

2) Созданы преобразования, чтобы проверить, является ли значение нулевым, и если да, преобразовать либо в -1 (Неизвестная запись в измерении), либо если это мера значение, преобразовать в 0. Выражения показаны ниже в качестве примеров (я использовал их в преобразованиях производных столбцов):

ISNULL(netWeight) ? 0 : netWeight // This is an example of a Measure column
ISNULL(completeddateid) ? -1 : completeddateid // This is an example of a dimension key column

Надеюсь, это поможет кому-то еще в будущем; -)

1
ответ дан 17 December 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: