作成日: 2020/08/18 最終更新日: 2021/04/28
文書種別
不具合
状況
修正済み
詳細
独自の作業領域を設定し、DbConnector.GetDataメソッドにてDataTableをC1DataEngineにインポートしたとき、C1FlexPivotのConnectDataEngineメソッドにてインポートされたデータベースに接続すると、元のDataTableでnull値だったフィールドが別の値に置き換わり、フィルタリングおよび集計結果が期待する内容とならない場合があります。
例1)
以下のようなコードで、C1FlexPivotPanelに設定したWorkspaceを介してDataTableをC1DataEngineにインポートし、これをC1FlexPivotに接続すると、DBNull.Valueが「-2147483648」と表示されます。
※備考
上記サンプルでは、C1DataEngineにインポートされたデータベースではnull値がサポートされないため、インポート時にnull値がデータ型ごとに固有の値(int型の場合、int.MinValue値)に置き換わったものと考えられます。
(2020/09/04 更新)
・上記説明文の一部を以下のように変更
(更新前)フィルタ結果が期待する内容とならない場合があります。
(更新後)フィルタリングおよび集計結果が期待する内容とならない場合があります。
・下記の例2を追加
例2)
以下のようなコードで、C1FlexPivotPanelに設定したWorkspaceを介してDataTableをC1DataEngineにインポートし、これをC1FlexPivotに接続すると、集計結果において空白行の件数が「0」、総計の件数が「2」と表示されます。
(2020/10/13 更新)
例1)では、データ型としてInt32(typeof(int))を設定していますが、Int16、Singleを指定した場合も不正な結果となることが確認されました。
(結果)
Int16の場合:DBNull.Valueが「-32.768(Int16の最小値)」と表示されます。
Singleの場合:DBNull.Valueが「-340,282,346,・・(Singleの最小値)」と表示されます。
例1)
以下のようなコードで、C1FlexPivotPanelに設定したWorkspaceを介してDataTableをC1DataEngineにインポートし、これをC1FlexPivotに接続すると、DBNull.Valueが「-2147483648」と表示されます。
string dataPath = Path.Combine(System.IO.Path.GetTempPath(), "Data");
DataTable dataTable1 = new DataTable();
dataTable1.TableName = "TEST";
dataTable1.Columns.Add("NUMBER1", typeof(int));
dataTable1.Columns.Add("NUMBER2", typeof(int));
dataTable1.Columns.Add("NUMBER3", typeof(int));
dataTable1.Rows.Add(0, DBNull.Value, 1);
dataTable1.Rows.Add(1, 1, 0);
dataTable1.Rows.Add(2, 1, 1);
// DataEngineの格納場所
this.c1FlexPivotPanel1.Workspace.Init(dataPath);
this.c1FlexPivotPanel1.Workspace.Clear();
C1.DataEngine.DbConnector.GetData(this.c1FlexPivotPanel1.Workspace, dataTable1, dataTable1.TableName);
this.c1FlexPivotPanel1.FlexPivotEngine.BeginUpdate();
this.c1FlexPivotPanel1.ConnectDataEngine(dataTable1.TableName);
this.c1FlexPivotPanel1.FlexPivotEngine.EndUpdate();
c1FlexPivotPanel1.FlexPivotEngine.RowFields.Add("NUMBER1");
c1FlexPivotPanel1.FlexPivotEngine.ValueFields.Add("NUMBER2");
※備考
上記サンプルでは、C1DataEngineにインポートされたデータベースではnull値がサポートされないため、インポート時にnull値がデータ型ごとに固有の値(int型の場合、int.MinValue値)に置き換わったものと考えられます。
(2020/09/04 更新)
・上記説明文の一部を以下のように変更
(更新前)フィルタ結果が期待する内容とならない場合があります。
(更新後)フィルタリングおよび集計結果が期待する内容とならない場合があります。
・下記の例2を追加
例2)
以下のようなコードで、C1FlexPivotPanelに設定したWorkspaceを介してDataTableをC1DataEngineにインポートし、これをC1FlexPivotに接続すると、集計結果において空白行の件数が「0」、総計の件数が「2」と表示されます。
string dataPath = Path.Combine(System.IO.Path.GetTempPath(), "Data");
DataTable dataTable1 = new DataTable();
dataTable1.TableName = "TEST";
dataTable1.Columns.Add("NUMBER1", typeof(long));
dataTable1.Columns.Add("NUMBER2", typeof(long));
dataTable1.Columns.Add("STRING1", typeof(string));
dataTable1.Rows.Add(0, 1, "");
dataTable1.Rows.Add(0, 2, "");
dataTable1.Rows.Add(0, 3, DBNull.Value);
// DataEngineの格納場所
this.c1FlexPivotPanel1.Workspace.Init(dataPath);
this.c1FlexPivotPanel1.Workspace.Clear();
C1.DataEngine.DbConnector.GetData(this.c1FlexPivotPanel1.Workspace, dataTable1, dataTable1.TableName);
this.c1FlexPivotPanel1.FlexPivotEngine.BeginUpdate();
this.c1FlexPivotPanel1.ConnectDataEngine(dataTable1.TableName);
this.c1FlexPivotPanel1.FlexPivotEngine.EndUpdate();
c1FlexPivotPanel1.FlexPivotEngine.RowFields.Add("STRING1");
c1FlexPivotPanel1.FlexPivotEngine.ValueFields.Add("STRING1");
(2020/10/13 更新)
例1)では、データ型としてInt32(typeof(int))を設定していますが、Int16、Singleを指定した場合も不正な結果となることが確認されました。
dataTable1.Columns.Add("NUMBER2", typeof(System.Int16));
または
dataTable1.Columns.Add("NUMBER2", typeof(System.Single));
(結果)
Int16の場合:DBNull.Valueが「-32.768(Int16の最小値)」と表示されます。
Singleの場合:DBNull.Valueが「-340,282,346,・・(Singleの最小値)」と表示されます。
回避方法
この問題は2021J v1(4.5.20211.492)で修正されました。
(FlexPivotが参照しているC1.DataEngine.dllの修正に伴い、動作が改善されました)
(FlexPivotが参照しているC1.DataEngine.dllの修正に伴い、動作が改善されました)
旧文書番号
85902