バージョン

インメモリ データのサポート

概要

アプリケーション状態の一環として、ユーザーが要求したレポートの結果や Reveal でまだサポートされていないデータソースからの情報 (カスタムデータベースや特定のファイル形式など) にすでにメモリ内にあるデータを使用します。

インメモリは特別なタイプのデータソースで、SDK でのみ使用でき、Reveal アプリケーションでそのまま使用することはできません。そのため、[インメモリ データソース] を直接使用することはできません。以下のように、別の方法に従ってください。

インメモリ データ ソースの使用

推奨される方法は、インメモリ データと一致するスキーマを持つデータファイルを定義する方法です。データ ファイルは、たとえば CSV または Excel ファイルにすることができ、スキーマは基本的にフィールドのリストと各フィールドのデータ型です。

以下の例では、特定のスキーマを使用してデータファイルを作成し、データベースから情報を取得する代わりにメモリ内のデータを使用する方法について詳しく説明します。

コード例

以下の例では、人事システムに人事メトリクスを表示するダッシュボードを埋め込むために、社内の Employee のリストでインメモリデータを使用します。データベースから Employee のリストを取得するのではなく、メモリ内のデータを使用します。

データ ファイルとサンプル ダッシュボードの準備

簡略化した Employee には以下のプロパティがあります。

  • EmployeeID: string

  • Fullname: string

  • Wage: numeric

手順:

  1. 同じスキーマで CSV ファイルを作成

    EmployeeID,Fullname,Wage
    23,John Smith,345.67
    45,Emma Thompson,432.23
  2. Dropbox や Google Drive など、しファイル共有システムにファイルをアップロード

  3. ダミーデータを使用してダッシュボードを作成(実際の生産データは後でアプリケーションで提供する予定です)。

  4. ダッシュボードをエクスポート (ダッシュボード → エクスポート → ダッシュボード)

ダッシュボードの可視化と実際のデータの返却

ダミーのデータではなくカスタムのデータを使ってダッシュボードを可視化する必要があります。

  1. データソースの置き換え で説明したように、IRVDataSourceProvider を実装し、IRevealSdkContextDataSourceProvider プロパティとして返します。

    次に、メソッド 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 は後でデータを返すときに使用されます。

  2. 以下のように 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();