Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / OLAP и DWH |
![]() ![]() |
Vlad_Molodoj Member Откуда: Сообщений: 3 |
Уважаемые Форумчане. Прежде всего перерыл много интернетов и так и не нашел ни одного толкового материала по XMLA. На сайте Microsoft - только очень краткое описание. Прежде всего - вопрос: где найти толковые материалы по XMLA ? Ну и конrретный вопрос на котором застрял. MSAS 2017, сервер "OLAP", источник данных: "MyDS", представление источника данных: "MyDS". В представлении источника данных уже есть таблицы и представления, в базе есть измерения, кубы. Необходимо добавить в источник данных еще одну таблицу. Руками в Visual Studio это сделать не сложно. Проблема в том, что нужно это сделать программно. Например программно добавить таблицу из двух колонок: "DocTypes" ID [char(6)] Name[char(50)]) Именно "добавить" к существующим. Скрипт, описанный ниже - нужную таблицу добавляет, а все остальные удаляет. А хотелось, чтобы и все существующие остались и новая была добавлена. <Create xmlns="http://schemas.microsoft.com/analysisservices/2003/engine"> <ParentObject> <DatabaseID>Cuses</DatabaseID> </ParentObject> <ObjectDefinition> <DataSourceView xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500"> <ID>MyDSV</ID> <Name>MyDSV</Name> <Annotations> <Annotation> <Name>http://schemas.microsoft.com/DataWarehouse/Designer/1.0:SchemaRestriction</Name> </Annotation> <Annotation> <Name>http://schemas.microsoft.com/DataWarehouse/Designer/1.0:RetrieveRelationships</Name> <Value>true</Value> </Annotation> </Annotations> <DataSourceID>MyDS</DataSourceID> <Schema> <xs:schema id="MyDSV" xmlns="" 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="MyDSV" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="DocTypes" msprop:DbSchemaName="dbo" msprop:TableType="Table"> <xs:complexType> <xs:sequence> <xs:element name="ID"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="6" /> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Name"> <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:unique name="Constraint_ID" msdata:PrimaryKey="true"> <xs:selector xpath=".//DocTypes" /> <xs:field xpath="ID" /> </xs:unique> </xs:element> </xs:schema> <MyDSV xmlns="" /> </Schema> </DataSourceView> </ObjectDefinition> </Create> |
16 мар 18, 17:30 [21262227] Ответить | Цитировать Сообщить модератору |
Критик Member Откуда: Москва / Калуга Сообщений: 32443 Блог |
Vlad_Molodoj, зачем? |
16 мар 18, 18:11 [21262317] Ответить | Цитировать Сообщить модератору |
vikkiv Member Откуда: London Сообщений: 1351 |
в XMLA есть Create, Alter, Delete, у тебя однозначно Create (т.е. пересоздание обьекта с нуля) кроме того в DSV могут быть связи с другими обьектами да и XMLA имеет выраженную тенденцию к содержанию полной дефиниции обьекта (а не только добавляемой части) даже при его изменении. либо вытаскивай сначала оригинальную дефиницию DSV, вноси изменения - потом посылай модифицированный на сервер через Alter. либо (лучше) используй AMO, там есть Add обьектов в DSV. |
16 мар 18, 19:13 [21262435] Ответить | Цитировать Сообщить модератору |
Vlad_Molodoj Member Откуда: Сообщений: 3 |
Пугает своей сложностью. Но попробую.
DLL-ка реализующая AMO вроде не ActiveX, а .NET-сборка, начиная с SS2008 или я не прав? |
||||
17 мар 18, 12:20 [21263514] Ответить | Цитировать Сообщить модератору |
Vlad_Molodoj Member Откуда: Сообщений: 3 |
А как это сделать программно? В Management Studio- просто... по правой кнопке мыши... А вот как получить программно это дерево? |
||
18 мар 18, 18:53 [21265647] Ответить | Цитировать Сообщить модератору |
vikkiv Member Откуда: London Сообщений: 1351 |
Vlad_Molodoj, всё то-же AMO : Microsoft.AnalysisServices.Scripter (в примере обьект DataSource а не View т.к. код коротче), PowerShell Code: [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")>$null cls;$svr=New-Object Microsoft.AnalysisServices.Server;$svr.connect(".") $strb=new-Object System.Text.StringBuilder $Xml=New-Object System.Xml.XmlTextWriter(new-Object System.IO.StringWriter($strb)) $Xml.Formatting=[System.Xml.Formatting]::Indented $ScrObj=New-Object Microsoft.AnalysisServices.Scripter $ScrObj.ScriptAlter([Microsoft.AnalysisServices.MajorObject[]]@($svr.Databases[0].DataSources[0]),$Xml,$false) $strb.ToString();$svr.disconnect();$svr.dispose();Get-Variable|Remove-Variable -EA 0потом на сервере можно XMLA выполнить через Execute() только наверное легче было-бы без возни с XMLA напрямую работать с DataSourceView родными методами и потом Update() обьекта. |
18 мар 18, 20:46 [21265790] Ответить | Цитировать Сообщить модератору |
Все форумы / OLAP и DWH | ![]() |