財務分析コードとして使用可能なバッキング テーブルの作成
この記事では、バッキング テーブルを財務分析コードとして使用できるようにする手順について説明します。
重要
再利用できない値を含む、または 1 対 1 の分析コード値を使用する、財務分析コードを作成しないでください。 次の手順で作成する DimAttribute[BackingTable] ビューの分析コード値のソースとして使用する必要がある物理的なテーブルまたはビューではありません。 ビューをデータ ベース ソースとして使用することはうまくいくように見えますが、分析コードのファクト データがデータベースにインポートされるようにするため、財務レポートクエリが行ごとの処理にフォールバックされます。 これにより、パフォーマンスがかなり低下したり、レポートが遮断されます。
財務分析コードのデータのソースとして使用する基本テーブルには、30 文字以内の固有ナチュラル キー値が必用であり、その値はそのテーブル内の 1 つの RECID を解決する必要があります。 拡張された名前列は、追加のコンテキストをユーザーに表示する場合にのみ使用され、ナチュラル キー エントリの一意性を解決するためには使用されないため、もう 1 つのソース結合 (DirPartyTable や別の場所など) から取得できます。
財務分析コードは、トランザクションおよび分析プロセスに必要な再利用可能な値にする必要があります。 これらの分析コードは、複数のトランザクションにわたって全体的な再利用を提供できるデータのソースを表す必要があります。 他の分析コード値に表示される際、高変動を表す ID データを供給するバッキング テーブルを選択しないでください。 これにより、ストレージと処理のコストが増加し、パフォーマンスと分析の価値に悪影響を及ぼします。
高度に変動するデータの例として、タイムスタンプやIDの増分が頻繁に発生する例を次に示します。
- ドキュメント
- 販売注文
- 発注書
- トランザクション
- 小切手
- シリアル
- チケット
- ライセンス番号
これらは高度に変動する値と見なされ、財務分析コードとして使用する必要があります。 財務タグとして実装するのが正しい使用です。 財務タグの詳細については、財務タグ を参照してください。
次の手順に従うことにより、財務分析コード ページの値の使用元のドロップダウン メニューにビューが自動的に表示され、値は財務分析コード値ページに入力されます。
注意
分析コードが OMOperatingUnit テーブルによってサポートされている場合、手順の多くは既に完了しています。 「新しい OMOperatingUnit タイプがサポートしているエンティティを追加」セクション の手順に従います。
手順 1: ビューを作成する
最初のステップは、バッキング テーブルと同じモデルでビューを作成することです。 以下の手順を実行する前に、テーブルのプロパティ ウィンドウでバッキング テーブルが Create Rec Id Index = Yes であることを確認します。 または、テーブルに一意のインデックスがあり、RECID がそのインデックスの最初のセグメントであることを確認してください。
プロジェクトで追加>新しい項目とクリックします。 表示 を選択し、追加 をクリックします。
表示 を右クリックし、名前の変更 を選択します。 DimAttribute[BackingTableName] ビューに名前を付けます。 たとえば、DimAttributeCustTable。
メタデータの表示を展開し、テーブルを画面上のデータ ソースノードにドラッグします。
ノードの名前を BackingTableName から BackingEntity に変更します。
財務分析コードとして使用するテーブルのキー、値、および名前を識別します。 フィールドを検索して、BackingEntity データ ソースの一覧にドラッグし、またはデータ ソース上のフィールドにコピーして貼り付けます。 3 つのフィールドの名前を変更します。
- キー – これは代理キーで、通常は RecID です。
- 値 - これは、AccountNum のようなナチュラル キーです。 最大 30 文字の文字列です。
- 名前 – これは説明で、通常は名前または説明フィールドです。 最大 60 文字の文字列です。
バッキング テーブルがデータを削除する場合、ビューで 範囲 を作成することが必要な場合があります。 たとえば、作業単位を使用し部署のみを必要とする場合、その作業単位の範囲を使用します。
新しいインデックス を右クリックし、新しいインデックス を選択します。 プロパティ ウィンドウでデータ フィールドとして 値 を選択します。 必要に応じてインデックスの名前を変更することができますが、重複の許可をいいえに設定する必要があります。
新しいインデックス を右クリックし、新しいインデックス を選択します。 プロパティ ウィンドウでデータ フィールドとして 名前 を選択します。 必要に応じてインデックスの名前を変更することができますが、重複の許可をはいに設定する必要があります。
表示をクリックし、プロパティ ウィンドウで、選択した参照ラベル ID に 単数形ラベル フィールドを設定します。 これは、顧客などの単一の値を示すラベルである必要があります。
ラベル フィールドを選択した参照ラベル ID に設定します。 これは、顧客などの複数の値を示すラベルである必要があります。 この値は、財務分析コード ページの値の使用元フィールドのドロップダウン リストに表示されます。
プロパティウィンドウの TitleField1 フィールドに、値を入力します。
プロパティウィンドウの TitleField2 フィールドに、名前を入力します。
バッキング テーブルのプロパティを確認し、使用している config キーを識別します。 表示で、バッキング テーブルと同じコンフィギュレーション キーを入力します。
重要
管理者以外のユーザーに、新しいビューのセキュリティ アクセス権を付与する必要があります。
- オーバーレイが使用されるリリース 7.2 およびそれ以前では、DimensionEssentials を検索し、プロジェクトに追加します。 DimensionEssentials を展開し、アクセス許可を右クリックし、その後新しいアクセス許可を選択します。 プロパティ ウィンドウで、アクセス レベルを読み取りに設定します。 セキュリティ権限をクリックし、読み取りのアクセス レベルをアクセス許可ノードの下に追加します。 これらの 1 つを使用しているモデルに拡張することが必要な場合があります。
- 拡張機能が使用されているリリース 7.3 以降では、新しいビューと共にカスタム モデルで新しいセキュリティ権限を作成します。 アクセス許可 ノードを右クリックし、新しいアクセス許可 を選択します。 上記の手順 2 で作成した新しい DimAttribute[DimensionName] ビューの名前を入力し、アクセス レベル を読み取りに設定します。 セキュリティ職務権限 SysServerAXBasicMaintain を検索します。 右クリックし、拡張機能の作成 を作成します。 必要に応じて拡張機能の名前を変更します。 新たに作成された セキュリティ特権 を 特権リスト にドラッグ アンド ドロップします。
表示 を右クリックし、コードの表示 を選択します。 ビューに次のコードを追加します。 これにより、分析コード フレームワークに登録されます。 CustTable に対して作成されたビューを使用する例を次に示します。
[SubscribesTo(classstr(DimensionEnabledType), delegatestr(DimensionEnabledType, registerDimensionEnabledTypeIdentifiersDelegate))] public static void registerDimensionEnabledTypeIdentifier(DimensionIEnabledType _dimensionEnabledType) { _dimensionEnabledType.registerViewIdentifier(tablestr(DimAttribute**CustTable**)); }
Microsoft Dynamics 365 を選択し、オプションをクリックします。 ベスト プラクティス を選択します。 モデルを選択し、Microsoft.Dynamics.AX.Framework.ViewRules/ViewDimensionEnabledTypeChecker が表示されるまでスクロールします。 ルールとその子が選択されていることを確認します。
ビューをビルドしてから同期します。
手順 2: ビューが SQL で正しいデータを返すことを検証する
この時点で SQL Server Management Studio で次のクエリを実行して、正しいデータが引き出されているかを確認をする必要があります。 CustTable に対して作成されたビューを使用する省略例を次に示します。
select * from DIMATTRIBUTECUSTTABLE
キー | 値 | データ範囲 ID | パーティション | RECID | NAME | パーティション 2 |
---|---|---|---|---|---|---|
22565425322 | US_SI_0129 | ussi | 5637144576 | 22565425322 | Adventure Services | 5637144576 |
22565424579 | US_SI_0128 | ussi | 5637144576 | 22565424579 | アルペン エレクトロニクス | 5637144576 |
手順 3: バッキング テーブルでメソッドを上書きする
バッキング テーブルのナチュラル キーを削除または名前を変更するときに分析コード フレームワークと統合するには、バッキング テーブルの delete メソッドと、update または renamePrimaryKey メソッドにカスタム コードを記述する必要があります。 テーブルがナチュラル キーの更新をブロックする場合、renamePrimaryKey のオーバーライドを使用する必要があります。 存在しない場合は、更新メソッドでコードを格納できます。 CustTable からの例を次に示します。
public void delete()
{
if (!DimensionValidation::canDeleteEntityValue(this))
{
throw error(strFmt("@SYS134392", this.AccountNum));
}
ttsbegin;
DimensionAttributeValue::updateForEntityValueDelete(this);
ttscommit;
}
public void update()
{
Common originalRecord = this.orig();
super();
DimensionValueRename::syncRenamedValue(this, originalRecord);
}
public void renamePrimaryKey()
{
Common originalRecord = this.orig();
DimensionValueRenameV2 rename = DimensionValueRenameV2::construct(this, originalRecord);
rename.syncRenamedValuePreSuper();
super();
rename.syncRenamedValuePostSuper();
}
手順 4: キャッシュをクリアして新しいビューの検出を強制的する
分析コードとして消費できるエンティティのリストはサーバー上でキャッシュされるため、キャッシュをクリアする呼び出しが実行されるか、クライアントとサーバーの両方が再起動されるまで新しいエンティティの作成は既存のエンティティのリストに表示されません。 キャッシュをクリアして新しいビューをすぐに表示させるには、実行可能なクラス内で次のコード行を実行する必要があります。
DimensionCache::clearAllScopes();
手順 5: 分析コードが [ルックアップからの値を使用] に表示されることを確認する
手順を完了したら、総勘定元帳の財務分析コード ページに移動します。 値の使用元フィールドのドロップダウン メニューをクリックし、値が使用可能であることを確認します。
新しい OMOperatingUnit タイプがサポートしているエンティティの追加
新しい組織モデル OMOperatingUnitType 列挙が追加された場合、次元として使用可能にする手順は類似していますが、次のように短くすることができます。
- 既存の DimAttributeOM[BackingTableName] ビューの 1 つをコピーし、適切に名前を変更して、関連するすべてのラベルとヘルプ テキストを調整します。
- コピーしたビューで、Datasource\BackingEntity (OMOperatingUnit) \Ranges ノードを展開します。 範囲内の値プロパティを、追加された新しい OMOperatingUnitType 列挙型に変更します。
- プロジェクトをビルドして同期します。
- SQL でデータを検証するステップ 2 で始まる記事の手順に従い、値の使用ルックアップで表示される分析コードを検証するステップ 5 まで続けます。
OMOperatingUnitType は OMOperatingUnit テーブルによってサポートされているため、削除、更新および renamePrimaryKey メソッドを処理するための汎用コードがすでに存在します。 したがって、これらのメソッドを更新する必要はありません。
手順 6: 自己参照される分析コードを設定する
新しいエンティティのデータ エンティティも作成し、そのエンティティが既定の分析コードへの参照を持っている場合、persistEntity() メソッドにこのコードを追加します。
if (_entityCtx.getDatabaseOperation() == DataEntityDatabaseOperation::Insert)
{
this.<Your entity ‘private’ RecId Dimension field> = DimensionDefaultResolver::checkAndCreateSelfReference(tablenum(<Your backing table>), this.<Your entity Key field>, this.<Your entity ‘public’ DisplayValue field>);
}
例
public void persistEntity(DataEntityRuntimeContext _entityCtx)
{
if (_entityCtx.getDatabaseOperation() == DataEntityDatabaseOperation::Insert)
{
this.DefaultDimension = DimensionDefaultResolver::checkAndCreateSelfReference(tablenum(BankAccountTable), this.BankAccountId, this.DefaultDimensionDisplayValue);
}
super(_entityCtx);
}
メモ
これにより、分析コードが自身を既定の既定値として使用するようにする場合、情報が正しい順序で作成されます。