Гость
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Программное (xmla) добавление таблицы в DataSourceView. / 6 сообщений из 6, страница 1 из 1
16.03.2018, 17:30
    #39616078
Vlad_Molodoj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное (xmla) добавление таблицы в DataSourceView.
Уважаемые Форумчане. Прежде всего перерыл много интернетов и так и не нашел ни одного толкового материала по XMLA.
На сайте Microsoft - только очень краткое описание. Прежде всего - вопрос: где найти толковые материалы по XMLA ?

Ну и конrретный вопрос на котором застрял.
MSAS 2017, сервер "OLAP", источник данных: "MyDS", представление источника данных: "MyDS".
В представлении источника данных уже есть таблицы и представления, в базе есть измерения, кубы.
Необходимо добавить в источник данных еще одну таблицу. Руками в Visual Studio это сделать не сложно.
Проблема в том, что нужно это сделать программно.
Например программно добавить таблицу из двух колонок:
"DocTypes"
ID [char(6)]
Name[char(50)])

Именно "добавить" к существующим.
Скрипт, описанный ниже - нужную таблицу добавляет, а все остальные удаляет. А хотелось, чтобы и все существующие остались и новая была добавлена.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
<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>
...
Рейтинг: 0 / 0
16.03.2018, 18:11
    #39616097
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное (xmla) добавление таблицы в DataSourceView.
Vlad_Molodoj,

зачем?
...
Рейтинг: 0 / 0
16.03.2018, 19:13
    #39616114
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное (xmla) добавление таблицы в DataSourceView.
в XMLA есть Create, Alter, Delete, у тебя однозначно Create (т.е. пересоздание обьекта с нуля)

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

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

либо вытаскивай сначала оригинальную дефиницию DSV, вноси изменения - потом посылай модифицированный на сервер через Alter.
либо (лучше) используй AMO, там есть Add обьектов в DSV.
...
Рейтинг: 0 / 0
17.03.2018, 12:20
    #39616208
Vlad_Molodoj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное (xmla) добавление таблицы в DataSourceView.
vikkivлибо вытаскивай сначала оригинальную дефиницию DSV, вноси изменения - потом посылай модифицированный на сервер через Alter.

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

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


DLL-ка реализующая AMO вроде не ActiveX, а .NET-сборка, начиная с SS2008 или я не прав?
...
Рейтинг: 0 / 0
18.03.2018, 18:53
    #39616521
Vlad_Molodoj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное (xmla) добавление таблицы в DataSourceView.
vikkivлибо вытаскивай сначала оригинальную дефиницию DSV....

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

А вот как получить программно это дерево?
...
Рейтинг: 0 / 0
18.03.2018, 20:46
    #39616542
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное (xmla) добавление таблицы в DataSourceView.
Vlad_Molodoj,

всё то-же AMO : Microsoft.AnalysisServices.Scripter (в примере обьект DataSource а не View т.к. код коротче), PowerShell Code:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
[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() обьекта.
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Программное (xmla) добавление таблицы в DataSourceView. / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]