EmployeeID,Fullname,Wage
23,John Smith,345.67
45,Emma Thompson,432.23
アプリケーション状態の一環として、ユーザーが要求したレポートの結果や Reveal でまだサポートされていないデータソースからの情報 (カスタムデータベースや特定のファイル形式など) にすでにメモリ内にあるデータを使用します。
インメモリは特別なタイプのデータソースで、SDK でのみ使用でき、Reveal アプリケーションでそのまま使用することはできません。そのため、[インメモリ データソース] を直接使用することはできません。以下のように、別の方法に従ってください。
推奨される方法は、インメモリ データと一致するスキーマを持つデータファイルを定義する方法です。データ ファイルは、たとえば CSV または Excel ファイルにすることができ、スキーマは基本的にフィールドのリストと各フィールドのデータ型です。
以下の例では、特定のスキーマを使用してデータファイルを作成し、データベースから情報を取得する代わりにメモリ内のデータを使用する方法について詳しく説明します。
以下の例では、人事システムに人事メトリクスを表示するダッシュボードを埋め込むために、社内の Employee のリストでインメモリデータを使用します。データベースから Employee のリストを取得するのではなく、メモリ内のデータを使用します。
簡略化した Employee には以下のプロパティがあります。
EmployeeID: string
Fullname: string
Wage: numeric
手順:
同じスキーマで CSV ファイルを作成
EmployeeID,Fullname,Wage
23,John Smith,345.67
45,Emma Thompson,432.23
Dropbox や Google Drive など、しファイル共有システムにファイルをアップロード
ダミーデータを使用してダッシュボードを作成(実際の生産データは後でアプリケーションで提供する予定です)。
ダッシュボードをエクスポート (ダッシュボード → エクスポート → ダッシュボード)
ダミーのデータではなくカスタムのデータを使ってダッシュボードを可視化する必要があります。
データソースの置き換え で説明したように、IRVDataSourceProvider を実装し、IRevealSdkContext の DataSourceProvider プロパティとして返します。
次に、メソッド ChangeVisualizationDataSourceItemAsync の実装では、次のようなコードを追加する必要があります。
public Task<RVDataSourceItem> ChangeVisualizationDataSourceItemAsync(string userId, string dashboardId, RVVisualization visualization, RVDataSourceItem dataSourceItem)
{
var csvDsi = dataSourceItem as RVCsvDataSourceItem;
if (csvDsi != null)
{
var inMemDsi = new RVInMemoryDataSourceItem("employees");
return Task.FromResult((RVDataSourceItem)inMemDsi);
}
return Task.FromResult((RVDataSourceItem)null);
}
このようにして、ダッシュボード内の CSV ファイルへのすべての参照を、基本的に employees で識別されるインメモリ データソースに置き換えます。この ID は後でデータを返すときに使用されます。
以下のように IRVDataProvider を実装するために、実際のデータを返すメソッドを実装します。
public class EmbedDataProvider : IRVDataProvider
{
public Task<IRVInMemoryData> GetData(string userId, RVInMemoryDataSourceItem dataSourceItem)
{
var datasetId = dataSourceItem.DatasetId;
if (datasetId == "employees")
{
var data = new List<Employee>()
{
new Employee(){ EmployeeID = "1", Fullname="John Doe", Wage = 80325.61 },
new Employee(){ EmployeeID = "2", Fullname="Doe John", Wage = 10325.61 },
};
return Task.FromResult<IRVInMemoryData>(new RVInMemoryData<Employee>(data));
}
else
{
throw new Exception("Invalid data requested");
}
}
}
Employee クラスのプロパティは CSV ファイルの列とまったく同じ名前であり、データ型も同じです。フィールド名、フィールド ラベル、またはプロパティのデータ型を変更したい場合は、クラス宣言で属性を使用できます。
RVSchemaColumn 属性を使用してフィールド名やデータ型を変更できます。
DisplayName 属性を使用してフィールドラベルを変更できます。
public class Employee
{
[RVSchemaColumn("EmployeeID", RVSchemaColumnType.Number)]
public string EmployeeID { get; set; }
[DisplayName("EmployeeFullname")]
public string Fullname { get; set; }
[RVSchemaColumn("MonthlyWage")]
public double Wage { get; set; }
}
更に IRVDataProvider の実装には、それを返すために IRevealSdkContext.DataProvider の実装を変更する必要があります。
IRVDataProvider DataProvider => new EmbedDataProvider();