Источники данных и привязки (службы Analysis Services — многомерные данные)
Кубы, измерения и другие объекты служб Службы Analysis Services можно привязать к источнику данных. Источником данных может быть один из следующих объектов.
Реляционный источник данных.
Конвейер служб Службы Analysis Services, выводящий набор строк (или разбитые на разделы наборы строк).
Способы выражения источника данных зависит от его типа. Например, реляционный источник данных отличается от других строкой соединения. Дополнительные сведения об источниках данных см. в разделе Источники данных (службы Analysis Services — многомерные данные).
Независимо от используемого источника данных, представление источника данных (DSV) содержит его метаданные. Таким образом, привязки для куба или других объектов служб Службы Analysis Services выражаются привязками к представлению источника данных. Они могут включать привязки к логическим объектам (например представлениям), вычисляемым столбцам и связям, которые физически не существуют в источнике данных. Использование представления источника данных для привязки логических объектов является новой возможностью в SQL Server 2008. Например, в SQL Server 2000 мера OLAP могла определять выражение в качестве своего источника данных. Однако в SQL Server 2005 и SQL Server 2008 в службах Службы Analysis Services добавляется вычисляемый столбец, который инкапсулирует выражение в представление источника данных, а затем связывает соответствующую меру OLAP с этим столбцом в представлении источника данных. Дополнительные сведения о представлениях источника данных см. в разделе Представления источников данных (службы Analysis Services — многомерные данные).
Каждый объект служб Службы Analysis Services привязывается к источнику данных собственным методом. Кроме того, привязки данных для этих объектов и определение источника данных могут быть встроены в определение связанного с данными объекта (например измерения) или задаваться в виде отдельного набора определений.
Типы данных служб Analysis Services
Типы данных, используемые в привязках, должны соответствовать типам данных, которые поддерживаются службами Службы Analysis Services. В службах Службы Analysis Services определены следующие типы данных.
Тип данных служб Analysis Services |
Описание |
---|---|
BigInt |
64-разрядное целое число со знаком. Этот тип данных соответствует типу данных Int64 в Microsoft .NET Framework и типу данных DBTYPE_I8 в OLE DB. |
Bool |
Логическое значение. Этот тип данных соответствует типу данных Boolean в .NET Framework и типу данных DBTYPE_BOOL в OLE DB. |
Currency |
Значение валюты от -263 (или -922 337 203 685 477,5808) до 263-1 (или 922 337 203 685 477,5807) с точностью до одной тысячной единицы валюты. Этот тип данных соответствует типу данных Decimal в .NET Framework и типу данных DBTYPE_CY в OLE DB. |
дата |
Данные о дате, сохраненные в виде числа с плавающей запятой двойной точности. Целая часть числа равна числу дней, прошедшему с 30 декабря 1899 г., а десятичная часть равна части дня. Этот тип данных соответствует типу данных DateTime в .NET Framework и типу данных DBTYPE_DATE в OLE DB. |
Двойной |
Число с плавающей запятой двойной точности в диапазоне от -1,79E +308 до 1,79E +308. Этот тип данных соответствует типу данных Double в .NET Framework и типу данных DBTYPE_R8 в OLE DB. |
Integer |
32-разрядное целое число со знаком. Этот тип данных соответствует типу данных Int32 в .NET Framework и типу данных DBTYPE_I4 в OLE DB. |
Single |
Число с плавающей запятой одинарной точности в диапазоне от -3,40E +38 до 3,40E +38. Этот тип данных соответствует типу данных Single в .NET Framework и типу данных DBTYPE_R4 в OLE DB. |
SmallInt |
16-разрядное целое число со знаком. Этот тип данных соответствует типу данных Int16 в .NET Framework и типу данных DBTYPE_I2 в OLE DB. |
TinyInt |
8-разрядное число со знаком. Этот тип данных соответствует типу данных SByte в .NET Framework и типу данных DBTYPE_I1 в OLE DB. |
UnsignedBigInt |
64-разрядное целое число без знака. Этот тип данных соответствует типу данных UInt64 в .NET Framework и типу данных DBTYPE_UI8 в OLE DB. |
UnsignedInt |
32-разрядное целое число без знака. Этот тип данных соответствует типу данных UInt32 в .NET Framework и типу данных DBTYPE_UI4 в OLE DB. |
UnsignedSmallInt |
16-разрядное целое число без знака. Этот тип данных соответствует типу данных UInt16 в .NET Framework и типу данных DBTYPE_UI2 в OLE DB. |
WChar |
Поток символов Юникод, заканчивающийся символом NULL. Этот тип данных соответствует типу данных String в .NET Framework и типу данных DBTYPE_WSTR в OLE DB. |
Все данные, получаемые из источника данных, преобразуются в тип Службы SSAS, указанный в привязке (обычно во время обработки). Если преобразование выполнить невозможно (например, тип String в тип Int), выдается сообщение об ошибке. Среда Business Intelligence Development Studio, как правило, задает в привязке тип данных, более всего соответствующий исходному типу в источнике данных. Например, такие типы SQL, как Date, DateTime, SmallDateTime, DateTime2, DateTimeOffset, сопоставляются с типом Date служб Службы SSAS, а тип SQL Time сопоставляется с типом String.
Привязки для измерений
Каждый атрибут измерения привязан к столбцу в представлении источника данных. Все атрибуты измерения должны относиться к одному источнику данных. Тем не менее атрибуты могут быть привязаны к столбцам из разных таблиц. Связи между таблицами определены в представлении источника данных. В случае если в таблице имеется несколько наборов связей, в представлении источника данных необходимо создать именованный запрос, который будет выступать в роли «псевдонима» таблицы. Выражения и фильтры определяются в представлении источника данных с помощью именованных вычислений и запросов.
Привязки для групп мер, мер и секций
Каждая группа мер имеет следующие привязки по умолчанию.
Группа мер привязана к таблице в представлении источника данных (например MeasureGroup.Source).
Каждая мера привязана к столбцу в этой таблице (например Measure.ValueColumn.Source).
Каждое измерение группы мер имеет набор атрибутов гранулярности, определяющих гранулярность группы мер. Каждый такой атрибут должен быть привязан к столбцу или столбцами в таблице фактов, содержащей ключ атрибута. (Дополнительные сведения об атрибутах гранулярности см. далее в этом разделе, в подразделе «Атрибуты гранулярности группы мер»).
Эти привязки по умолчанию можно выборочно переопределить для каждой секции. Для каждой секции можно задать отдельный источник данных, таблицу, имя запроса или критерий фильтра. Самым распространенным методом секционирования является посекционное переопределение таблицы с использованием одного источника данных. Другие методы представляют собой применение разных фильтров к разным секциям и изменение источника данных.
В представлении источника данных необходимо определить источник данных по умолчанию, тем самым предоставив сведения о схеме, включая подробные сведения о связях. Списки дополнительных таблиц или запросов, заданных на уровне секции, приводить в представлении источника данных необязательно, однако они должны иметь ту же схему, что и таблица по умолчанию, определенная для группы мер, или, по крайней мере, должны содержать все столбцы, которые используются мерами или атрибутами гранулярности. Привязки по умолчанию для меры и атрибута гранулярности нельзя переопределить на уровне секции; предполагается, что это те же столбцы, которые определены для группы мер. Поэтому, если секция использует источник данных, относящийся к другой схеме, запрос TableDefinition, определенный для этой секции, должен иметь результаты в той же схеме, что и группа мер.
Атрибуты гранулярности группы мер
Если гранулярность группы мер соответствует гранулярности, известной в базе данных, и имеется прямая связь таблицы фактов с таблицей измерения, атрибут гранулярности нужно привязать только к соответствующему столбцу или столбцам внешнего ключа в таблице фактов. Например, рассмотрим следующую таблицу фактов и таблицу измерения.
Sales(RequestedDate, OrderedProductID, ReplacementProductID, Qty)
Product(ProductID, ProductName,Category)
Relation: Sales.OrderedProductID -> Product.ProductID
Relation: Sales.ReplacementProductID -> Product.ProductID
Если анализируется заказанный продукт для роли Ordered Product измерения Sales, атрибут гранулярности Product будет связан со столбцом Sales.OrderedProductID.
Однако в некоторых случаях атрибуты GranularityAttributes могут не существовать как столбцы в таблице фактов. Например, атрибуты GranularityAttributes могут не существовать в виде столбцов в следующих условиях.
Гранулярность OLAP менее детализирована, чем гранулярность источника.
Между таблицей фактов и таблицей измерения помещается промежуточная таблица.
Ключ измерения отличается от первичного ключа в таблице измерения.
Во всех этих случаях необходимо определить представление источника данных, чтобы в таблице фактов существовал атрибут гранулярности. Для этого можно создать именованный запрос или вычисляемый столбец.
Например, в приведенных выше таблицах из примера, если гранулярность создается по категориям, можно ввести представление Sales, как показано ниже.
SalesWithCategory(RequestedDate, OrderedProductID, ReplacementProductID, Qty, OrderedProductCategory)
SELECT Sales.*, Product.Category AS OrderedProductCategory
FROM Sales INNER JOIN Product
ON Sales.OrderedProductID = Product.ProductID
В этом случае категория атрибута гранулярности привязана к столбцу SalesWithCategory.OrderedProductCategory.
Миграция из объектов DSO
Объекты DSO 8.0 позволяют повторно привязывать PartitionMeasures. Следовательно, стратегией миграции в этих случаях будет создание соответствующего запроса.
Точно так же невозможно повторно привязать атрибуты измерения внутри секции, хотя объекты DSO 8.0 позволяют выполнять такую повторную привязку. В этих случаях стратегия миграции заключается в определении необходимых именованных запросов в представлении источника данных, чтобы в нем имелись те же таблицы и столбцы для секции, которые используются для измерения. В таких случаях может потребоваться простая миграция, в которой предложение From/Join/Filter будет сопоставлено одному именованному запросу, а не структурированному набору связанных таблиц. Поскольку объекту DSO 8.0 позволяют повторно связывать измерения секций, даже если секция использует тот же источник данных, для миграции может также понадобиться несколько представлений источника данных для одного источника данных.
В объектах DSO 8.0 соответствующие привязки могут выражаться двумя разными путями, в зависимости от применения оптимизированных схем: путем привязки к первичному ключу в таблице измерения или к внешнему ключу в таблице фактов. В языке ASSL эти два способа не различаются.
Тот же подход к привязкам применяется даже к секции, источник данных которой не содержит таблицы измерений, потому что привязка выполняется к столбцу внешнего ключа в таблице фактов, а не к столбцу первичного ключа в таблице измерения.
Привязки для моделей интеллектуального анализа данных
Модель интеллектуального анализа данных является или реляционной, или относится к аналитической обработке в реальном времени (OLAP). Привязки данных для реляционной модели интеллектуального анализа данных значительно отличаются от моделей интеллектуального анализа OLAP.
Привязки для реляционной модели интеллектуального анализа данных
Реляционная модель интеллектуального анализа данных основана на связях, определенных в представлении источника данных для разрешения неоднозначности привязки столбцов к различным источникам данных. В реляционной модели интеллектуального анализа данных привязки данных удовлетворяют следующим правилам.
Каждый столбец невложенной таблицы привязан к столбцу в таблице вариантов или в таблице, связанной с таблицей вариантов (в соответствии со связью «многие к одному» или «один к одному»). Представление источника данных определяет связи между таблицами.
Каждый столбец вложенной таблицы привязан к исходной таблице. Затем столбцы, принадлежащие столбцу вложенной таблицы, привязываются к столбцам этой исходной таблицы или таблицы, связанной с исходной. (К тому же привязка соответствует связи «многие к одному» или «один к одному»). Привязки модели интеллектуального анализа данных не предоставляют путь соединения к вложенной таблице. Вместо этого эти сведения предоставляют связи, определенные в представлении источника данных.
Привязки для модели интеллектуального анализа OLAP
Модели интеллектуального анализа OLAP не имеют аналога представлению источника данных. Поэтому привязки данных должны устранять неоднозначность между столбцами и источниками данных. Например, модель интеллектуального анализа данных может быть основана на кубе Sales, а столбцы — на кубах Qty, Amount и Product Name. С другой стороны, модель интеллектуального анализа данных может быть основана на кубе Product, а столбцы — на кубах Product Name, Product Color и вложенной таблице Sales куба Qty.
В модели интеллектуального анализа OLAP привязки данных удовлетворяют следующим правилам.
Каждый столбец невложенной таблицы привязан к мере в кубе, к атрибуту в измерении этого куба (с указанием CubeDimension для разрешения неоднозначности в случае ролей измерения) или к атрибуту в измерении.
Каждый столбец вложенной таблицы привязан к CubeDimension. То есть он определяет способ перехода от измерения к связанному кубу или (в частном случае вложенных таблиц) от куба к одному из его измерений.
Внешние привязки
Внешние привязки позволяют временно изменить существующие привязки данных на срок исполнения команды. Внешние привязки — это привязки, которые выполняются в команде и не сохраняются. Они применяются только во время выполнения конкретной команды. В отличие от них встроенные привязки содержатся в определении объекта языка ASSL и хранятся вместе с этим объектом в метаданных сервера.
Язык ASSL позволяет задавать внешние привязки в команде Process, если это не пакет, или в команде Batch. Если внешние привязки указываются в команде Batch, все привязки, заданные в команде Batch, создают новый контекст привязок, в котором выполняются все команды Process пакета. Новый контекст привязок включает объекты, которые обрабатываются неявно вследствие команды Process.
Если внешние привязки заданы в команде, они переопределяют встроенные привязки, содержащиеся в неизменяемых библиотеках DDL для указанных объектов. Эти обрабатываемые объекты могут включать объект, поименованный непосредственно в команде Process, или другие объекты, обработка которых начинается автоматически, как часть общей работы.
Внешние привязки указываются с помощью включения в команду обработки необязательного объекта коллекции Bindings. Необязательная коллекция Bindings содержит следующие элементы.
Свойство |
Количество элементов |
Тип |
Описание |
---|---|---|---|
Binding |
От 0 до n |
Binding |
Предоставляет коллекцию новых привязок. |
DataSource |
0-1 |
DataSource |
Заменяет DataSource с сервера, который будет использоваться. |
DataSourceView |
0-1 |
DataSourceView |
Заменяет DataSourceView с сервера, который должен был бы использоваться. |
Все элементы, связанные с внешними привязками, являются необязательными. Для всех неуказанных элементов язык ASSL использует спецификацию, содержащуюся в определении DDL сохраняемого объекта. Указание ключевого слова DataSource или DataSourceView в команде Process необязательно. Если указаны DataSource или DataSourceView, экземпляр этих объектов не создается, а сами они не сохраняются после завершения команды Process.
Определение типа внешней привязки
В пределах внешней коллекции Bindings язык ASSL позволяет создавать коллекцию привязок для нескольких объектов Binding. Каждый объект Binding имеет расширенную ссылку на объект, которая напоминает простую объектную ссылку, но может ссылаться также на более мелкие объекты (например атрибуты измерения и атрибуты группы мер). Такой объект принимает плоский вид, типичный для элемента Object в командах Process, за исключением того, что в нем отсутствуют теги <Object></Object>.
Каждому объекту, для которого задана привязка, соответствует XML-элемент в виде <object>ID (например DimensionID). После идентификации объекта, выполненной настолько точно, насколько позволяет идентификатор <object>ID, находится элемент, для которого задана привязка; как правило, это элемент Source. В общем случае элемент Source является свойством объекта DataItem, представляющего собой вариант привязки к столбцу в атрибуте. В этом случае тег DataItem не указывается, вместо этого нужно задать свойство Source, как при непосредственной привязке столбца.
KeyColumns идентифицируются своим порядковым положением в коллекции KeyColumns. Здесь невозможно задать, например только первый и третий ключевой столбец атрибута, поскольку не существует способа указать, что второй ключевой столбец нужно пропустить. Во внешней привязке для атрибута измерения должны присутствовать все ключевые столбцы.
Элементы Translations хотя и не имеют идентификаторов, семантически определяются по языку. Следовательно, элементы Translations внутри объекта Binding должны включать идентификатор языка.
Еще одним элементом, допускающимся в объекте Binding и не существующим непосредственно в библиотеке DDL, является объект ParentColumnID, который используется во вложенных таблицах для интеллектуального анализа данных. В этом случае необходимо идентифицировать родительский столбец вложенной таблицы, для которого предоставляется привязка.
Примеры
В следующих примерах демонстрируется использование в ASSL команд ProcessFull и ProcessAdd в существующем измерении и передача данных команде.
Образец базы данных представляет собой библиотеку баз данных, содержащую измерение ссуд.
Скрипт создания базы данных и измерения приведен в конце этого раздела.
Примечание |
---|
Эти образцы предназначены для использования со службами Analysis Services в режиме VertiPaq. |
Команда ProcessFull
Следующая команда ASSL выполняет операцию ProcessFull в измерении Loans базы данных Library. Чтобы выполнить команду, необходимо скопировать и вставить скрипт в окно XMLA в среде SQL Server Management Studio и запустить ее.
Обратите внимание на следующие элементы сценария.
Элемент <Bindings>, следующий сразу после спецификации <Object>, с привязками ко всем атрибутам в измерении. Все элементы <Binding> привязывают определенный атрибут к столбцу в предполагаемом источнике. Источник имеет тип ColumnBinding, который привязывается к столбцу, а не к таблице.
Источник данных <DataSource> для привязок объявляется сразу после элемента <Bindings>. Источник объявляется с типом PushedDataSource. Корневой элемент связывает источник данных с параметром, содержащим фактические данные. Элементом <EndOfData> определяется параметр, отмечающий конец потока данных.
Первым элементом в потоке данных (в InputRowset parameter) является определение схемы передаваемых данных. Эта схема определяет способ считывания данных, а также сопоставления для столбцов. За определением схемы следуют строки.
Конец потока данных отмечается параметром EndOfInputRowset со значением true. Если данные необходимо передать несколькими сообщениями, во всех сообщениях, кроме последнего, параметр EndOfInputRowset должен иметь значение false.
Важно! Обработка начинается при получении параметра EndOfInputRowset со значением true.
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Execute xmlns="urn:schemas-microsoft-com:xml-analysis">
<Command>
<Process xmlns="https://schemas.microsoft.com/analysisservices/2003/engine" xmlns:ddl2="https://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="https://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100="https://schemas.microsoft.com/analysisservices/2008/engine/100" xmlns:ddl100_100="https://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Type>ProcessFull</Type>
<Object xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
</Object>
<Bindings xmlns="https://schemas.microsoft.com/analysisservices/2003/engine" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>LoanId</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>LoanId</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>Library</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>Library</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>LoanerID</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>LoanerID</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>DateLoaned</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>DateLoaned</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>DaysOut</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>DaysOut</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>AssetID</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>AssetID</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>AssetOrigin</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>AssetOrigin</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
</Bindings>
<DataSource xsi:type="PushedDataSource">
<root Parameter="InputRowset"/>
<EndOfData Parameter="EndOfInputRowset"/>
</DataSource>
</Process>
</Command>
<Properties />
<Parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Parameter>
<Name>InputRowset</Name>
<Value xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:schema targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:sql="urn:schemas-microsoft-com:xml-sql" elementFormDefault="qualified">
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
<xsd:element name="row" type="row" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="uuid">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="xmlDocument">
<xsd:sequence>
<xsd:any />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="row">
<xsd:sequence>
<xsd:element sql:field="LoanId" name="LoanId" type="xsd:long" minOccurs="0" />
<xsd:element sql:field="Library" name="Library" type="xsd:string" minOccurs="0" />
<xsd:element sql:field="LoanerID" name="LoanerID" type="xsd:string" minOccurs="0" />
<xsd:element sql:field="DateLoaned" name="DateLoaned" type="xsd:date" minOccurs="0" />
<xsd:element sql:field="DaysOut" name="DaysOut" type="xsd:int" minOccurs="0" />
<xsd:element sql:field="AssetID" name="AssetID" type="xsd:long" minOccurs="0" />
<xsd:element sql:field="AssetOrigin" name="AssetOrigin" type="xsd:string" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<!-- Add Rows Declaration below here -->
<row>
<LoanId>10001</LoanId>
<Library><![CDATA[Library001]]></Library>
<LoanerID><![CDATA[Lib001-78021]]></LoanerID>
<DateLoaned>2008-03-12T09:36:39.1829958</DateLoaned>
<DaysOut>7</DaysOut>
<AssetID>739230021</AssetID>
<AssetOrigin><![CDATA[Library001]]></AssetOrigin>
</row>
<row>
<LoanId>10002</LoanId>
<Library><![CDATA[Library001]]></Library>
<LoanerID><![CDATA[Lib001-88021]]></LoanerID>
<DateLoaned>2008-03-12T19:36:39.1829958</DateLoaned>
<DaysOut>6</DaysOut>
<AssetID>739230022</AssetID>
<AssetOrigin><![CDATA[Library001]]></AssetOrigin>
</row>
<row>
<LoanId>10003</LoanId>
<Library><![CDATA[Library001]]></Library>
<LoanerID><![CDATA[Lib001-78031]]></LoanerID>
<DateLoaned>2008-04-12T09:36:39.1829958</DateLoaned>
<DaysOut>4</DaysOut>
<AssetID>739730023</AssetID>
<AssetOrigin><![CDATA[Library002]]></AssetOrigin>
</row>
<row>
<LoanId>10004</LoanId>
<Library><![CDATA[Library001]]></Library>
<LoanerID><![CDATA[Lib001-78021]]></LoanerID>
<DateLoaned>2008-03-12T09:36:39.1829958</DateLoaned>
<DaysOut>0</DaysOut>
<AssetID>739230021</AssetID>
<AssetOrigin><![CDATA[Library001]]></AssetOrigin>
</row>
<row>
<LoanId>10005</LoanId>
<Library><![CDATA[Library002]]></Library>
<LoanerID><![CDATA[Lib002-70021]]></LoanerID>
<DateLoaned>2008-03-12T09:36:39.1829958</DateLoaned>
<DaysOut>9</DaysOut>
<AssetID>739230721</AssetID>
<AssetOrigin><![CDATA[Library002]]></AssetOrigin>
</row>
</Value>
</Parameter>
<Parameter>
<Name>EndOfInputRowset</Name>
<Value xsi:type="xsd:boolean">true</Value>
</Parameter>
</Parameters>
</Execute>
</soap:Body>
</soap:Envelope>
Команда Process
Следующая команда ASSL выполняет операцию ProcessAdd в измерении Loans базы данных Library. Чтобы выполнить команду, необходимо скопировать и вставить скрипт в окно XMLA в среде SQL Server Management Studio и запустить ее.
Единственное отличие от предыдущего примера состоит в том, что данные добавляются к данным, существующим в измерении. При использовании команды ProcessFull существующее содержимое удаляется и заменяется содержимым, которое определяется привязками.
Примечание |
---|
Команда ProcessAdd обеспечивает соблюдение ограничений строк, например ограничения уникальности и ограничения Not Null. Если в строке нарушено любое из ограничений, то вся команда завершается с ошибкой и добавление данных не производится. |
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Execute xmlns="urn:schemas-microsoft-com:xml-analysis">
<Command>
<Process xmlns="https://schemas.microsoft.com/analysisservices/2003/engine" xmlns:ddl2="https://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="https://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100="https://schemas.microsoft.com/analysisservices/2008/engine/100" xmlns:ddl100_100="https://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Type>ProcessAdd</Type>
<Object xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
</Object>
<Bindings xmlns="https://schemas.microsoft.com/analysisservices/2003/engine" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>LoanId</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>LoanId</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>Library</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>Library</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>LoanerID</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>LoanerID</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>DateLoaned</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>DateLoaned</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>DaysOut</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>DaysOut</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>AssetID</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>AssetID</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
<Binding>
<DatabaseID>Library</DatabaseID>
<DimensionID>Loans</DimensionID>
<AttributeID>AssetOrigin</AttributeID>
<KeyColumns>
<KeyColumn>
<Source xsi:type="ColumnBinding">
<TableID />
<ColumnID>AssetOrigin</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
</Binding>
</Bindings>
<DataSource xsi:type="PushedDataSource">
<root Parameter="InputRowset"/>
<EndOfData Parameter="EndOfInputRowset"/>
</DataSource>
</Process>
</Command>
<Properties />
<Parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Parameter>
<Name>InputRowset</Name>
<Value xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:schema targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:sql="urn:schemas-microsoft-com:xml-sql" elementFormDefault="qualified">
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
<xsd:element name="row" type="row" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="uuid">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="xmlDocument">
<xsd:sequence>
<xsd:any />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="row">
<xsd:sequence>
<xsd:element sql:field="LoanId" name="LoanId" type="xsd:long" minOccurs="0" />
<xsd:element sql:field="Library" name="Library" type="xsd:string" minOccurs="0" />
<xsd:element sql:field="LoanerID" name="LoanerID" type="xsd:string" minOccurs="0" />
<xsd:element sql:field="DateLoaned" name="DateLoaned" type="xsd:date" minOccurs="0" />
<xsd:element sql:field="DaysOut" name="DaysOut" type="xsd:int" minOccurs="0" />
<xsd:element sql:field="AssetID" name="AssetID" type="xsd:long" minOccurs="0" />
<xsd:element sql:field="AssetOrigin" name="AssetOrigin" type="xsd:string" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<!-- Add Rows Declaration below here -->
<row>
<LoanId>20280</LoanId>
<Library><![CDATA[Library002]]></Library>
<LoanerID><![CDATA[Lib001-78021]]></LoanerID>
<DateLoaned>2008-09-12T12:36:39.1829958</DateLoaned>
<DaysOut>17</DaysOut>
<AssetID>939230021</AssetID>
<AssetOrigin><![CDATA[Library001]]></AssetOrigin>
</row>
<row>
<LoanId>20281</LoanId>
<Library><![CDATA[Library002]]></Library>
<LoanerID><![CDATA[Lib001-78021]]></LoanerID>
<DateLoaned>2008-09-12T12:39:49.1829958</DateLoaned>
<DaysOut>6</DaysOut>
<AssetID>999230021</AssetID>
<AssetOrigin><![CDATA[Library002]]></AssetOrigin>
</row>
<row>
<LoanId>20282</LoanId>
<Library><![CDATA[Library002]]></Library>
<LoanerID><![CDATA[Lib001-78021]]></LoanerID>
<DateLoaned>2008-09-12T12:36:39.1829958</DateLoaned>
<DaysOut>17</DaysOut>
<AssetID>999930021</AssetID>
<AssetOrigin><![CDATA[Library002]]></AssetOrigin>
</row>
</Value>
</Parameter>
<Parameter>
<Name>EndOfInputRowset</Name>
<Value xsi:type="xsd:boolean">true</Value>
</Parameter>
</Parameters>
</Execute>
</soap:Body>
</soap:Envelope>
Создание базы данных и измерения
Для создания образца базы данных и связанных с ней объектов скопируйте и вставьте скрипт в окно XMLA в среде SQL Server Management Studio и выполните его.
Примечание |
---|
Можно не обращать внимания на привязки, заданные в этой команде, поскольку в дальнейшем они будут переопределены внешними привязками, описанными в предыдущих шагах. |
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Execute xmlns="urn:schemas-microsoft-com:xml-analysis">
<Command>
<Create AllowOverwrite="true" xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<ObjectDefinition>
<Database xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="https://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="https://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="https://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200_200="https://schemas.microsoft.com/analysisservices/2010/engine/200/200">
<ID>Library</ID>
<Name>Library Loans</Name>
<Language>1033</Language>
<Dimensions>
<Dimension>
<ID>Loans</ID>
<Name>Loans</Name>
<Source xsi:type="DataSourceViewBinding">
<DataSourceViewID>Library</DataSourceViewID>
</Source>
<ErrorConfiguration>
<KeyNotFound>ReportAndStop</KeyNotFound>
<KeyDuplicate>ReportAndStop</KeyDuplicate>
<NullKeyNotAllowed>ReportAndStop</NullKeyNotAllowed>
</ErrorConfiguration>
<StorageMode valuens="ddl200_200">InMemory</StorageMode>
<Language>1033</Language>
<Collation>Latin1_General_CI_AS</Collation>
<UnknownMemberName>Unknown</UnknownMemberName>
<Attributes>
<Attribute>
<ID>RowNumber</ID>
<Name>RowNumber</Name>
<Type valuens="ddl200_200">RowNumber</Type>
<KeyColumns>
<KeyColumn>
<DataType>BigInt</DataType>
<Source xsi:type="RowNumberBinding" />
</KeyColumn>
</KeyColumns>
<NameColumn>
<DataType>WChar</DataType>
<Source xsi:type="RowNumberBinding" />
</NameColumn>
<OrderBy>Key</OrderBy>
</Attribute>
<Attribute>
<ID>LoanId</ID>
<Name>LoanId</Name>
<Usage>Key</Usage>
<KeyColumns>
<KeyColumn>
<DataType>BigInt</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>LoanID</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
<NameColumn>
<DataType>WChar</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>LoanID</ColumnID>
</Source>
</NameColumn>
<AttributeRelationships>
<AttributeRelationship>
<AttributeID>RowNumber</AttributeID>
<Cardinality>One</Cardinality>
<Name>RowNumber</Name>
</AttributeRelationship>
<AttributeRelationship>
<AttributeID>Library</AttributeID>
<Name>Library</Name>
</AttributeRelationship>
<AttributeRelationship>
<AttributeID>LoanerID</AttributeID>
<Name>LoanerID</Name>
</AttributeRelationship>
<AttributeRelationship>
<AttributeID>DateLoaned</AttributeID>
<Name>DateLoaned</Name>
</AttributeRelationship>
<AttributeRelationship>
<AttributeID>DaysOut</AttributeID>
<Name>DaysOut</Name>
</AttributeRelationship>
<AttributeRelationship>
<AttributeID>AssetID</AttributeID>
<Name>AssetID</Name>
</AttributeRelationship>
<AttributeRelationship>
<AttributeID>AssetOrigin</AttributeID>
<Name>AssetOrigin</Name>
</AttributeRelationship>
</AttributeRelationships>
<OrderBy>Key</OrderBy>
</Attribute>
<Attribute>
<ID>Library</ID>
<Name>Library</Name>
<KeyColumns>
<KeyColumn>
<DataType>WChar</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>Library</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
<NameColumn>
<DataType>WChar</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>Library</ColumnID>
</Source>
</NameColumn>
<OrderBy>Key</OrderBy>
</Attribute>
<Attribute>
<ID>LoanerID</ID>
<Name>LoanerID</Name>
<KeyColumns>
<KeyColumn>
<DataType>WChar</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>LoanerID</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
<NameColumn>
<DataType>WChar</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>LoanerID</ColumnID>
</Source>
</NameColumn>
<OrderBy>Key</OrderBy>
</Attribute>
<Attribute>
<ID>DateLoaned</ID>
<Name>DateLoaned</Name>
<KeyColumns>
<KeyColumn>
<DataType>Date</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>DateLoaned</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
<NameColumn>
<DataType>WChar</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>DateLoaned</ColumnID>
</Source>
</NameColumn>
<OrderBy>Key</OrderBy>
</Attribute>
<Attribute>
<ID>DaysOut</ID>
<Name>DaysOut</Name>
<KeyColumns>
<KeyColumn>
<DataType>BigInt</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>DaysOut</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
<NameColumn>
<DataType>WChar</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>DaysOut</ColumnID>
</Source>
</NameColumn>
<OrderBy>Key</OrderBy>
</Attribute>
<Attribute>
<ID>AssetID</ID>
<Name>AssetID</Name>
<KeyColumns>
<KeyColumn>
<DataType>BigInt</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>AssetID</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
<NameColumn>
<DataType>WChar</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>AssetID</ColumnID>
</Source>
</NameColumn>
<OrderBy>Key</OrderBy>
</Attribute>
<Attribute>
<ID>AssetOrigin</ID>
<Name>AssetOrigin</Name>
<KeyColumns>
<KeyColumn>
<DataType>WChar</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>AssetOrigin</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
<NameColumn>
<DataType>WChar</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>AssetOrigin</ColumnID>
</Source>
</NameColumn>
<OrderBy>Key</OrderBy>
</Attribute>
</Attributes>
</Dimension>
</Dimensions>
<Cubes>
<Cube>
<ID>Loans</ID>
<Name>Loans</Name>
<Language>1033</Language>
<Collation>Latin1_General_CI_AS</Collation>
<Dimensions>
<Dimension>
<ID>Loan</ID>
<Name>Loan</Name>
<DimensionID>Loans</DimensionID>
<Attributes>
<Attribute>
<AttributeID>RowNumber</AttributeID>
</Attribute>
<Attribute>
<AttributeID>LoanID</AttributeID>
</Attribute>
<Attribute>
<AttributeID>Library</AttributeID>
</Attribute>
<Attribute>
<AttributeID>LoanerID</AttributeID>
</Attribute>
<Attribute>
<AttributeID>DateLoaned</AttributeID>
</Attribute>
<Attribute>
<AttributeID>DaysOut</AttributeID>
</Attribute>
<Attribute>
<AttributeID>AssetID</AttributeID>
</Attribute>
<Attribute>
<AttributeID>AssetOrigin</AttributeID>
</Attribute>
</Attributes>
</Dimension>
</Dimensions>
<MeasureGroups>
<MeasureGroup>
<ID>Loan</ID>
<Name>Loan</Name>
<Measures>
<Measure>
<ID>LoanID</ID>
<Name>LoanID</Name>
<AggregateFunction>Count</AggregateFunction>
<DataType>BigInt</DataType>
<Source>
<DataType>BigInt</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>LoanID</ColumnID>
</Source>
</Source>
</Measure>
<Measure>
<ID>DaysOut</ID>
<Name>DaysOut</Name>
<DataType>BigInt</DataType>
<Source>
<DataType>BigInt</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>DaysOut</ColumnID>
</Source>
</Source>
</Measure>
</Measures>
<StorageMode valuens="ddl200_200">InMemory</StorageMode>
<ProcessingMode>Regular</ProcessingMode>
<Dimensions>
<Dimension xsi:type="DegenerateMeasureGroupDimension">
<CubeDimensionID>Loan</CubeDimensionID>
<Attributes>
<Attribute>
<AttributeID>RowNumber</AttributeID>
<KeyColumns>
<KeyColumn>
<DataType>BigInt</DataType>
<Source xsi:type="InheritedBinding" />
</KeyColumn>
</KeyColumns>
</Attribute>
<Attribute>
<AttributeID>LoanID</AttributeID>
<KeyColumns>
<KeyColumn>
<DataType>BigInt</DataType>
<Source xsi:type="ColumnBinding">
<TableID>dbo_tb_Loan</TableID>
<ColumnID>LoanID</ColumnID>
</Source>
</KeyColumn>
</KeyColumns>
<Type>Granularity</Type>
</Attribute>
<Attribute>
<AttributeID>Library</AttributeID>
<KeyColumns>
<KeyColumn>
<DataType>WChar</DataType>
<Source xsi:type="InheritedBinding" />
</KeyColumn>
</KeyColumns>
</Attribute>
<Attribute>
<AttributeID>LoanerID</AttributeID>
<KeyColumns>
<KeyColumn>
<DataType>WChar</DataType>
<Source xsi:type="InheritedBinding" />
</KeyColumn>
</KeyColumns>
</Attribute>
<Attribute>
<AttributeID>DateLoaned</AttributeID>
<KeyColumns>
<KeyColumn>
<DataType>Date</DataType>
<Source xsi:type="InheritedBinding" />
</KeyColumn>
</KeyColumns>
</Attribute>
<Attribute>
<AttributeID>DaysOut</AttributeID>
<KeyColumns>
<KeyColumn>
<DataType>BigInt</DataType>
<Source xsi:type="InheritedBinding" />
</KeyColumn>
</KeyColumns>
</Attribute>
<Attribute>
<AttributeID>AssetID</AttributeID>
<KeyColumns>
<KeyColumn>
<DataType>BigInt</DataType>
<Source xsi:type="InheritedBinding" />
</KeyColumn>
</KeyColumns>
</Attribute>
<Attribute>
<AttributeID>AssetOrigin</AttributeID>
<KeyColumns>
<KeyColumn>
<DataType>WChar</DataType>
<Source xsi:type="InheritedBinding" />
</KeyColumn>
</KeyColumns>
</Attribute>
</Attributes>
<ddl200_200:ShareDimensionStorage>Shared</ddl200_200:ShareDimensionStorage>
</Dimension>
</Dimensions>
<Partitions>
<Partition>
<ID>Loan</ID>
<Name>Loan</Name>
<Source xsi:type="DsvTableBinding">
<DataSourceViewID>Library</DataSourceViewID>
<TableID>dbo_tb_Loan</TableID>
</Source>
<StorageMode valuens="ddl200_200">InMemory</StorageMode>
</Partition>
</Partitions>
</MeasureGroup>
</MeasureGroups>
<Source>
<DataSourceViewID>Library</DataSourceViewID>
</Source>
<StorageMode valuens="ddl200_200">InMemory</StorageMode>
</Cube>
</Cubes>
<DataSources>
<DataSource xsi:type="RelationalDataSource">
<ID>Library</ID>
<Name>Library</Name>
<ConnectionString>Provider=SQLNCLI10.1;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Library</ConnectionString>
<ImpersonationInfo>
<ImpersonationMode>ImpersonateServiceAccount</ImpersonationMode>
</ImpersonationInfo>
<Timeout>PT0S</Timeout>
</DataSource>
</DataSources>
<DataSourceViews>
<DataSourceView>
<ID>Library</ID>
<Name>Library</Name>
<DataSourceID>Library</DataSourceID>
<Schema>
<xs:schema id="Library" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
<xs:element name="Library" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="dbo_tb_Loan" msprop:FriendlyName="tb_Loan" msprop:DbSchemaName="dbo" msprop:DbTableName="tb_Loan" msprop:TableType="Table">
<xs:complexType>
<xs:sequence>
<xs:element name="LoanId" msprop:FriendlyName="LoanId" msprop:DbColumnName="LoanId" type="xs:long" />
<xs:element name="Library" msprop:FriendlyName="Library" msprop:DbColumnName="Library" minOccurs="0" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="LoanerID" msprop:FriendlyName="LoanerID" msprop:DbColumnName="LoanerID" minOccurs="0" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="DateLoaned" msprop:FriendlyName="DateLoaned" msprop:DbColumnName="DateLoaned" type="xs:dateTime" minOccurs="0" />
<xs:element name="DaysOut" msprop:FriendlyName="DaysOut" msprop:DbColumnName="DaysOut" type="xs:int" minOccurs="0" />
<xs:element name="AssetID" msprop:FriendlyName="AssetID" msprop:DbColumnName="AssetID" type="xs:long" minOccurs="0" />
<xs:element name="AssetOrigin" msprop:FriendlyName="AssetOrigin" msprop:DbColumnName="AssetOrigin" minOccurs="0" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" />
</Schema>
</DataSourceView>
</DataSourceViews>
<ddl200_200:StorageEngineUsed>InMemory</ddl200_200:StorageEngineUsed>
</Database>
</ObjectDefinition>
</Create>
</Command>
<Properties />
</Execute>
</soap:Body>
</soap:Envelope>