Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 Программное (xmla) добавление таблицы в DataSourceView.  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Программное (xmla) добавление таблицы в DataSourceView.  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 32443
Блог
Vlad_Molodoj,

зачем?
16 мар 18, 18:11    [21262317]     Ответить | Цитировать Сообщить модератору
 Re: Программное (xmla) добавление таблицы в DataSourceView.  [new]
vikkiv
Member

Откуда: London
Сообщений: 1351
в XMLA есть Create, Alter, Delete, у тебя однозначно Create (т.е. пересоздание обьекта с нуля)

кроме того в DSV могут быть связи с другими обьектами

да и XMLA имеет выраженную тенденцию к содержанию полной дефиниции обьекта (а не только добавляемой части) даже при его изменении.

либо вытаскивай сначала оригинальную дефиницию DSV, вноси изменения - потом посылай модифицированный на сервер через Alter.
либо (лучше) используй AMO, там есть Add обьектов в DSV.
16 мар 18, 19:13    [21262435]     Ответить | Цитировать Сообщить модератору
 Re: Программное (xmla) добавление таблицы в DataSourceView.  [new]
Vlad_Molodoj
Member

Откуда:
Сообщений: 3
vikkiv
либо вытаскивай сначала оригинальную дефиницию DSV, вноси изменения - потом посылай модифицированный на сервер через Alter.

Пугает своей сложностью. Но попробую.

vikkiv
либо (лучше) используй AMO, там есть Add обьектов в DSV.


DLL-ка реализующая AMO вроде не ActiveX, а .NET-сборка, начиная с SS2008 или я не прав?
17 мар 18, 12:20    [21263514]     Ответить | Цитировать Сообщить модератору
 Re: Программное (xmla) добавление таблицы в DataSourceView.  [new]
Vlad_Molodoj
Member

Откуда:
Сообщений: 3
vikkiv
либо вытаскивай сначала оригинальную дефиницию DSV....


А как это сделать программно? В Management Studio- просто... по правой кнопке мыши...

А вот как получить программно это дерево?
18 мар 18, 18:53    [21265647]     Ответить | Цитировать Сообщить модератору
 Re: Программное (xmla) добавление таблицы в DataSourceView.  [new]
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 Ответить