表形式モデルでテーブル、パーティション、列を作成する
適用対象:SQL Server 2016 以降の Analysis Services Azure Analysis Services Fabric/Power BI Premium
表形式モデルでは、テーブルは行と列で構成されます。 行はパーティションに編成され、増分データ更新をサポートします。 表形式ソリューションでは、データの取得元に応じて、いくつかの種類のテーブルをサポートできます。
データプロバイダーを介してリレーショナル データ ソースからデータが生成される通常のテーブル。
プッシュされたテーブル。データはプログラムによってテーブルに "プッシュ" されます。
計算テーブル。データは、データのモデル内の別のオブジェクトを参照する DAX 式から取得されます。
次のコード例では、標準テーブルを定義します。
必須の要素
テーブルには少なくとも 1 つのパーティションが必要です。 通常のテーブルには、少なくとも 1 つの列が定義されている必要があります。
すべてのパーティションには、データの配信元を指定する Source が必要ですが、source は null に設定できます。 通常、ソースは、関連するデータベース クエリ言語でデータのスライスを定義するクエリ式です。
コード例: テーブル、列、パーティションを作成する
テーブルは Table クラス (Microsoft.AnalysisServices.Tabular 名前空間) で表されます。
次の例では、リレーショナル データ ソースに 1 つのパーティションをリンクし、いくつかの通常の列を持つ標準テーブルを定義します。 また、サーバーに変更を送信し、データをモデルに取り込むデータ更新をトリガーします。 これは、SQL Serverリレーショナル データベースから表形式ソリューションにデータを読み込む場合の最も一般的なシナリオを表します。
using System;
using Microsoft.AnalysisServices;
using Microsoft.AnalysisServices.Tabular;
namespace TOMSamples
{
class Program
{
static void Main(string[] args)
{
//
// Connect to the local default instance of Analysis Services
//
string ConnectionString = "DataSource=localhost";
//
// The using syntax ensures the correct use of the
// Microsoft.AnalysisServices.Tabular.Server object.
//
using (Server server = new Server())
{
server.Connect(ConnectionString);
//
// Generate a new database name and use GetNewName
// to ensure the database name is unique.
//
string newDatabaseName =
server.Databases.GetNewName("Database with a Table Definition");
//
// Instantiate a new
// Microsoft.AnalysisServices.Tabular.Database object.
//
var dbWithTable = new Database()
{
Name = newDatabaseName,
ID = newDatabaseName,
CompatibilityLevel = 1200,
StorageEngineUsed = StorageEngineUsed.TabularMetadata,
};
//
// Add a Microsoft.AnalysisServices.Tabular.Model object to the
// database, which acts as a root for all other Tabular metadata objects.
//
dbWithTable.Model = new Model()
{
Name = "Tabular Data Model",
Description = "A Tabular data model at the 1200 compatibility level."
};
//
// Add a Microsoft.AnalysisServices.Tabular.ProviderDataSource object
// to the data Model object created in the previous step. The connection
// string of the data source object in this example
// points to an instance of the AdventureWorks2014 SQL Server database.
//
string dataSourceName = "SQL Server Data Source Example";
dbWithTable.Model.DataSources.Add(new ProviderDataSource()
{
Name = dataSourceName,
Description = "A data source definition that uses explicit Windows credentials for authentication against SQL Server.",
ConnectionString = "Provider=SQLNCLI11;Data Source=localhost;Initial Catalog=AdventureWorks2014;Integrated Security=SSPI;Persist Security Info=false",
ImpersonationMode = Microsoft.AnalysisServices.Tabular.ImpersonationMode.ImpersonateAccount,
Account = @".\Administrator",
Password = "P@ssw0rd",
});
//
// Add a table called Individual Customers to the data model
// with a partition that points to a [Sales].[vIndividualCustomer] view
// in the underlying data source.
//
dbWithTable.Model.Tables.Add(new Table()
{
Name = dbWithTable.Model.Tables.GetNewName("Individual Customers"),
Description = "Individual customers (names and email addresses) that purchase Adventure Works Cycles products online.",
Partitions = {
//
// Create a single partition with a QueryPartitionSource for a query
// that imports all customer rows from the underlying data source.
//
new Partition() {
Name = "All Customers",
Source = new QueryPartitionSource() {
DataSource = dbWithTable.Model.DataSources[dataSourceName],
Query = @"SELECT [FirstName]
,[MiddleName]
,[LastName]
,[PhoneNumber]
,[EmailAddress]
,[City]
FROM [Sales].[vIndividualCustomer]",
}
}
},
Columns =
{
//
// DataColumn objects refer to regular table columns.
// Each DataColumn object corresponds to a column in the underlying data source query.
//
new DataColumn() {
Name = "FirstName",
DataType = DataType.String,
SourceColumn = "FirstName",
},
new DataColumn() {
Name = "MiddleName",
DataType = DataType.String,
SourceColumn = "MiddleName",
},
new DataColumn() {
Name = "LastName",
DataType = DataType.String,
SourceColumn = "LastName",
},
new DataColumn() {
Name = "PhoneNumber",
DataType = DataType.String,
SourceColumn = "PhoneNumber",
},
new DataColumn() {
Name = "EmailAddress",
DataType = DataType.String,
SourceColumn = "EmailAddress",
},
new DataColumn() {
Name = "City",
DataType = DataType.String,
SourceColumn = "City",
},
}
});
//
// Add the new database object to the server's
// Databases connection and submit the changes
// with full expansion to the server.
//
server.Databases.Add(dbWithTable);
//
// Request a full refresh to import the data from the data source and
// and perform any necessary recalculations.
// The refresh operation will be performed with the next
// invocation of Model.SaveChanges() or Database.Update(UpdateOptions.ExpandFull).
dbWithTable.Model.RequestRefresh(Microsoft.AnalysisServices.Tabular.RefreshType.Full);
dbWithTable.Update(UpdateOptions.ExpandFull);
Console.Write("Database ");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write(dbWithTable.Name);
Console.ResetColor();
Console.WriteLine(" created successfully.");
Console.WriteLine("The data model includes the following table definitions:");
Console.ForegroundColor = ConsoleColor.Yellow;
foreach (Table tbl in dbWithTable.Model.Tables)
{
Console.WriteLine("\tTable name:\t\t{0}", tbl.Name);
Console.WriteLine("\ttbl description:\t{0}", tbl.Description);
}
Console.ResetColor();
Console.WriteLine();
}
Console.WriteLine("Press Enter to close this console window.");
Console.ReadLine();
}
}
}
テーブル内のパーティション
パーティションは 、Partition クラス (Microsoft.AnalysisServices.Tabular 名前空間内) で表されます。 Partition クラスは、PartitionSource 型の Source プロパティを公開します。これにより、パーティションにデータを取り込むさまざまなアプローチを抽象化できます。 Partition インスタンスには Source プロパティを null として設定できます。これは、Analysis Services によって公開されるプッシュ データ API の一部として、データのチャンクをサーバーに送信することで、データがパーティションにプッシュされることを示します。 SQL Server 2016 では、PartitionSource クラスには、データをパーティションにバインドする方法を表す 2 つの派生クラス (QueryPartitionSource と CalculatedPartitionSource) があります。
テーブル内の列
列は、基本 Column クラス (Microsoft.AnalysisServices.Tabular 名前空間) から派生した複数のクラスによって表されます。
- DataColumn (標準テーブルの通常の列の場合)
- CalculatedColumn (DAX 式でサポートされる列の場合)
- CalculatedTableColumn (計算テーブルの通常の列の場合)
- RowNumberColumn (すべてのテーブルに対して SSAS によって作成された列の特殊な型)。
テーブル内の行番号
サーバー上のすべての Table オブジェクトには、インデックス作成のために使用される RowNumberColumn があります。 明示的に作成または追加することはできません。 列は、オブジェクトを保存または更新すると自動的に作成されます。
Db。Savechanges
Db。Update(ExpandFull)
いずれかのメソッドを呼び出すと、サーバーによって行番号列が自動的に作成され、テーブルの Columns コレクションが RowNumberColumn として表示されます。
計算テーブル
計算テーブルは、モデル内の既存のデータ構造または行外バインディングからデータを再利用する DAX 式からソース化されます。 プログラムで計算テーブルを作成するには、次の操作を行います。
汎用テーブルを作成 します。
ソースが DAX 式である CalculatedPartitionSource 型の Source を使用してパーティションを追加します。 パーティションのソースは、通常のテーブルと計算テーブルを区別するソースです。
サーバーに変更を保存すると、サーバーは、テーブルの Columns コレクションを介して表示される CalculatedTableColumns (計算テーブルは計算テーブル列で構成されます) の推定リストを返します。
次のステップ
TOM で例外を処理するために使用されるクラスを確認する: TOM でのエラーの処理