LuckyTemplates での測定: 最適化のヒントとテクニック

LuckyTemplates での測定: 最適化のヒントとテクニック

このチュートリアルでは、LuckyTemplates でメジャーを最適化する方法を学習します。レポート内のメジャーを最適化すると、貴重な洞察とデータを生成する際のコードのパフォーマンスが向上します。また、さまざまな評価方法と、それを適用してレポートを最適化する方法についても学習します。このチュートリアルの完全なビデオは、このブログの下部でご覧いただけます。

目次

1. コードのパフォーマンスを分析する

この例では、このレポートを最適化する必要があります。

LuckyTemplates での測定: 最適化のヒントとテクニック

これは使用するデータ モデルです。

LuckyTemplates での測定: 最適化のヒントとテクニック

Jobs テーブルには、特定の期間内に実行されたジョブに関するすべての情報が含まれます。

このテーブルは、最適化するすべてのメジャーのベースとなります。

LuckyTemplates での測定: 最適化のヒントとテクニック

まず、レポートのパフォーマンスをテストする必要があります。

[表示] タブに移動し、[パフォーマンス アナライザー]を選択します。次に、[記録を開始してビジュアルを更新]をクリックします。アナライザーがビジュアルをレンダリングするまで待ちます。

LuckyTemplates での測定: 最適化のヒントとテクニック

これが完了したら、 [インセンティブの内訳]リストをドロップダウンし、[クエリのコピー]をクリックします。

LuckyTemplates での測定: 最適化のヒントとテクニック

次に、[外部ツール]を選択してDAX Studio に移動し、LuckyTemplates が生成したコードを確認します。

LuckyTemplates での測定: 最適化のヒントとテクニック

次に、コピーしたクエリをワークスペース内に貼り付けます。

LuckyTemplates での測定: 最適化のヒントとテクニック

メジャー内の変数

最初の変数はDateClosedで、ダッシュボード上のスライサーです。ファクト テーブルの列を使用して、スライサー内の特定の期間の値を取得します。

次の変数はJobLostで、Job Lost データの False または空白をチェックします。

最後の変数はMatrixVisualです。これがコードの核心です。マトリックス ビジュアルを設定するために LuckyTemplates によって生成された要約列を示しています。このマトリックスで失業タイプをグループ化し、スライサーからのフィルターを挿入します。次に、拡張列を追加します。

要約列の実行が完了すると、コードの下のペインに結果が表示されます。

LuckyTemplates での測定: 最適化のヒントとテクニック

LuckyTemplates は、その結果を使用してマトリックス ビジュアルを設定します。

DAX Studio のコールド キャッシュ

次に、コード全体の実行にかかる時間を確認する必要があります。これを行うには、[サーバー タイミング] をオンにして、[キャッシュをクリアしてから実行]を選択します。

LuckyTemplates での測定: 最適化のヒントとテクニック

DAX Studioを使用して LuckyTemplates でメジャーを最適化しようとしている場合は、取得される時間が正確になるように、コールド キャッシュ シナリオで操作することをお勧めします。その後、F5 キーを押して、[サーバー タイミング] タブで操作が完了するまで待ちます。

完了すると、合計実行時間は 3.6 秒であることがわかります。ほとんどの時間をフォーミュラ エンジンで費やし、ストレージ エンジンで 57 ミリ秒を費やしました。

LuckyTemplates での測定: 最適化のヒントとテクニック

また、383 個のストレージ エンジン クエリが見つかったこともわかります。これらすべてのクエリのうち、再利用できるようにメモリにキャストされるクエリは 32​​7 個あります。

2. LuckyTemplates でメジャーを分析する

次に、これら 3 つの同一の対策を最適化する必要があります。

LuckyTemplates での測定: 最適化のヒントとテクニック

これらのメジャーを別のファイルに抽出し、使用しているデータ モデルに接続する必要があります。

LuckyTemplates での測定: 最適化のヒントとテクニック

その後、サーバー タイミングを開始して、ビジュアルの設定にかかる 3 つのメジャーにかかる時間を確認します。

実行の結果は、メジャーが結果を取得するのに 1.85 秒かかっていることを示しています。

LuckyTemplates での測定: 最適化のヒントとテクニック

結果は、10 行と集計列に属する 3 つの拡張列で構成されるテーブルを示します。

LuckyTemplates での測定: 最適化のヒントとテクニック

「損失タイプ」列には、コードがインセンティブの割合を取得するために計算する 10 個の一意の値が含まれています。

コードにかかる時間は指数関数的に長くなります。いつ、どこで最適化する必要があるかということです。

LuckyTemplates の RB インセンティブ% 測定

これは、LuckyTemplates の RB インセンティブ% の尺度です。これは、この例で使用されている 3 つの主要な対策の 1 つです。

LuckyTemplates での測定: 最適化のヒントとテクニック

インセンティブの割合を計算しようとしていることがわかります。

これには変数 JobType があり、現在のフィルター コンテキストで失われたタイプの値を取得します。また、現在のフィルター コンテキストに表示される値が 1 つだけかどうかもチェックします。 条件が満たされるたびに対応する結果が得られるように、 関数を使用する必要があります。

この対策コードは大量のストレージ エンジン グリースを生成するため、コード全体の時間が増加します。

次に、DAX Studio に戻って、メジャーによって生成されるストレージ エンジン クエリの量を確認します。

LuckyTemplates での測定: 最適化のヒントとテクニック

10 行のデータを取得するだけで、実行に 600 ミリ秒かかり、ストレージ エンジン クエリが 43 回かかったことがわかります。

ストレージ エンジンからのデータ

次に、ストレージ エンジンから要求されているデータを確認します。最初のクエリには、雇用喪失タイプと その雇用喪失タイプのDCOUNTがあります。

LuckyTemplates での測定: 最適化のヒントとテクニック

次のクエリには、レポート内のスライサーからの Jobs Closed Date が含まれています。

LuckyTemplates での測定: 最適化のヒントとテクニック

3 番目のコードには、コールバック データ ID を持つ別の損失タイプが表示されます。

LuckyTemplates での測定: 最適化のヒントとテクニック

別の行には、コードの最も重要な行が表示されます。

LuckyTemplates での測定: 最適化のヒントとテクニック

最初に表示されるのは、ジョブの支払の受領額、請求額、および実際の経費の

 次は、条件とそれに対応する結果を記述するWHERE関数です。結果は、スライサーの選択と RB インセンティブ% 測定の switch ステートメントによって異なります。

12 行目と 14 行目のコードが同じであることもわかります。

LuckyTemplates での測定: 最適化のヒントとテクニック

右にスクロールすると、同じクエリを含む行があることがわかります。行のクエリは、RB Incentive% メジャーの switch ステートメントによって指示されます。

LuckyTemplates での測定: 最適化のヒントとテクニック

LuckyTemplates の RB Incentive% メジャーに戻ると、クエリが繰り返された回数と、それがストレージ エンジン クエリにどのように反映されているかを確認できます。

LuckyTemplates での測定: 最適化のヒントとテクニック

IF と Switch の背後にあるロジック

ここで、クエリが複数回実行される理由を理解するには、関数 とSWITCH関数のロジックを理解する必要があります。

クエリ プランで個別に実行する必要があります。ただし、その前に、必ずデータベースに接続し、クエリ プランをオンにしてください。

 クエリ プランでSWITCHステートメントを実行します。次に、 ステートメントを強調表示して Enter キーを押します。

LuckyTemplates での測定: 最適化のヒントとテクニック

これにより、さまざまな操作を含む論理クエリ プランが生成されます。

LuckyTemplates での測定: 最適化のヒントとテクニック

次に、ステートメントを強調表示して Enter キーを押して、IFステートメントを実行します。

LuckyTemplates での測定: 最適化のヒントとテクニック

同じ論理クエリ プランが生成されることがわかります。

これは、SWITCH 関数を使用するたびに、エンジンがその関数を内部でIFステートメントに変換するためです。ただし、コードの可読性が向上するため、SWITCHステートメントの使用をお勧めします。

その後、IF関数またはSWITCH関数内でコードがどのように実行されるかを理解する必要があります。

これは内部にSWITCHステートメントを含むコード例です。

LuckyTemplates での測定: 最適化のヒントとテクニック

総利益、見積総額、請求総額のメジャーがあり、これらはすべてさまざまな列の合計です。また、ジョブ損失タイプのに対する 関数と、 SWITCHおよびTRUEステートメントもあります。

このコードを実行すると、関数の背後にあるロジックが表示されます。

最初のクエリは、ジョブ テーブルから個別のジョブ損失タイプを取得します。

LuckyTemplates での測定: 最適化のヒントとテクニック

雇用喪失タイプとは別に、雇用予測の合計も取得します。

WHERE条件内では、「ジョブ損失タイプ」列に存在する値も確認できます。

LuckyTemplates での測定: 最適化のヒントとテクニック

3. コード評価方法を使用する

DAX では、コードを評価する方法が 3 つあります。

  • 厳格な評価
  • 熱心な評価
  • IF.熱心な評価

これらのメソッドは、LuckyTemplates でコードまたはメジャーを最適化するのに役立ちます。

第 1 の方法: 厳密な評価

以下に示す例では、厳密な評価方法が使用されています。

その背後にあるロジックは、雇用損失タイプのコンテキストが A に等しい場合、粗利益が得られるということです。それ以外の場合は、合計見積もりが表示されます。このコードは、失業タイプの各行に対してこれを実行します。

これは、厳密な評価を使用する LuckyTemplates の別のメジャーの例です。

LuckyTemplates での測定: 最適化のヒントとテクニック

このコードを実行すると、5 つのストレージ エンジン クエリが生成されます。

LuckyTemplates での測定: 最適化のヒントとテクニック

厳密な評価では、総利益に 1.4 を乗算した値が平均推定値より大きい場合、コードは合計推定値を提供します。それ以外の場合は、粗利益が表示されます。

IF ステートメントが総利益の競合を複数回チェックするため、厳密な評価を使用すると、より多くのストレージ エンジン クエリが生成され、最終的に操作全体のパフォーマンスが妨げられることになります。

2 番目の方法: 熱心な評価

これは前の例と同じコードです。

ただし、 IFステートメント内のメジャーを計算する代わりに 、RETURN の前に 内のすべての値が計算されます。

LuckyTemplates での測定: 最適化のヒントとテクニック

これは、ステートメントをチェックする前に、すべての雇用損失タイプの総利益と合計見積もりの​​すべての値を取得することを意味します。

このコードを実行すると、ストレージ エンジンの数が 3 つに減ります。

LuckyTemplates での測定: 最適化のヒントとテクニック

操作全体のパフォーマンスが向上します。

最初の操作クエリでは、雇用損失タイプと、雇用予測と総利益の合計を取得します。

LuckyTemplates での測定: 最適化のヒントとテクニック

次のクエリは、Jobs Stable から Jobs Estimate の合計を取得します。これは、平均推定値の計算に使用されます。

LuckyTemplates での測定: 最適化のヒントとテクニック

最後のクエリは、 ADDCOLUMNSに書き込まれた値の個別のジョブ損失タイプを示します。

LuckyTemplates での測定: 最適化のヒントとテクニック

Eager Evaluation を使用すると、すべてが 1 つのデータ キャッシュに保存されます。データは数式エンジンでも評価され、反復されます。IFステートメントは、True または False の評価に応じて、  Total Estimate または Gross Profit を返します。

コードを最適化する上で、熱心な評価が常に最良の方法であるとは限りません。複雑なコードがある場合、厳密な評価によりパフォーマンスが向上します。それはすべて、DAX コード内で使用する関数によって異なります。

Eager Evaluation の欠点は、IF または SWITCH ステートメントの前に値を作成し、実行されるべきでない変数をステートメント内で使用した場合でも、エンジンがそれらの変数を計算してしまうことです。

熱心な評価のデメリット

以下に欠点の例を示します。

理想的には、ジョブ損失タイプが A に等しい場合、粗利益が得られるはずです。それ以外の場合は、Total Estimate が取得されます。

LuckyTemplates での測定: 最適化のヒントとテクニック

Job Loss Type 列内には A に等しい値がないため、常に Total Estimate を取得する必要があります。ただし、データ キャッシュ内の総利益は引き続き提供されます。

最初のクエリを見ると、雇用損失タイプと、雇用総利益と推定の合計が取得されます。

LuckyTemplates での測定: 最適化のヒントとテクニック

次のクエリでは、Jobs テーブルから個別の Jobs Loss Type を取得します。

LuckyTemplates での測定: 最適化のヒントとテクニック

3番目の方法: IF.EAGERの評価

次の方法は、   Eager 評価の動作を再現するIF.EAGER関数評価です。

これにより、厳密な評価を表すコードを作成し、それを熱心な評価で実行できます。

このサンプルコードを見ると、厳密な評価のコードとまったく同じです。唯一の違いは、IF の代わりにIF.EAGER関数を使用することです。

LuckyTemplates での測定: 最適化のヒントとテクニック

コードを実行する前に、必ず LuckyTemplates モデルに接続し、サーバー タイミングをオンにしてください。完了したら、F5 キーを押します。

3 つのストレージ エンジン クエリが生成されたことがわかります。

LuckyTemplates での測定: 最適化のヒントとテクニック

最初のクエリは、雇用損失タイプと、雇用推定値と総利益の合計を取得します。

LuckyTemplates での測定: 最適化のヒントとテクニック

2 番目のクエリは、ジョブ見積もりの​​合計を取得します。

LuckyTemplates での測定: 最適化のヒントとテクニック

最後のクエリは、ジョブ テーブルから個別のジョブ損失タイプを取得します。

LuckyTemplates での測定: 最適化のヒントとテクニック

Eager Evaluation と同じ動作が実行されたことがわかります。

評価方法の概要

計算のパフォーマンスを向上させるには、次の点に留意する必要があります。

  • 厳密な評価は複雑なコードに使用されます。これは、テーブルによって提供されるすべての値を評価したくない場合にも当てはまります。
  • コードが単純な場合は、Eager Evaluation を使用することをお勧めします。
  • 厳密評価を使用してコードを記述し、それを熱心評価で実行する場合は、IF.EAGER を使用します。

ただし、レポートで使用するのに本当に最適なものを見つけるには、これら 3 つの方法をテストする必要があることに注意してください。

4. LuckyTemplates でメジャーを最適化する

このチュートリアルの主なレッスンは、コードを最適化することです。

戻って、厳密な評価を使用して実行されるRB インセンティブ%測定を確認します。次に、Eager Evaluation を使用して評価してみます。

まずは変数を作成し、 RETURN関数を入力します。

LuckyTemplates での測定: 最適化のヒントとテクニック

変数を使用してメジャー参照を変更します。

LuckyTemplates での測定: 最適化のヒントとテクニック

その後、測定結果を確認し、DAX Studio に移動して、パフォーマンスが向上したかどうかを確認します。

これは、合計時間が 642 ミリ秒であり、ストレージ エンジン クエリの合計数が 39 に減少していることを示しています。

LuckyTemplates での測定: 最適化のヒントとテクニック

次に、すべてのデータの変数を作成し、すべてのメジャー参照を対応する変数に変更します。

LuckyTemplates での測定: 最適化のヒントとテクニック

次に、メジャーを確認し、DAX スタジオでコードを実行します。

合計実行時間とストレージ エンジン クエリの合計量は、それぞれ 600 ミリ秒から 170 ミリ秒に、43 クエリから 15 クエリに短縮されました。

LuckyTemplates での測定: 最適化のヒントとテクニック

重複がないこともわかります。コードに変数を含めると、可読性とパフォーマンスが向上します。

LuckyTemplates のメジャーの高度な最適化

次に、DAX コードをさらに最適化する必要があります。

を使用する代わりに、 関数を使用します。

LuckyTemplates での測定: 最適化のヒントとテクニック

HASONEVALUE は、 フィルター コンテキストで使用可能な値の数をカウントします。これは非常に負荷の高い操作です。一方、ISINSCOPE は、指定された列がグループ化に使用されているかどうかを確認します。

関数を変更した後、DAX Studio で測定を確認して実行します。

ストレージ エンジンのクエリ数が 12 になっていることがわかります。合計実行時間も 105 ミリ秒になっています。

LuckyTemplates での測定: 最適化のヒントとテクニック

2 番目のクエリでは、コールバック データ ID が示されています。

LuckyTemplates での測定: 最適化のヒントとテクニック

これは、テキスト フィールドで SELECTEDVALUE を使用するときに発生することがあります。コールバック データが表示されると、ストレージ エンジンは数式エンジンを呼び出して、コードの複雑さを解決します。これにより、メジャーのパフォーマンスが低下します。

コールバックデータの削除

レポートのパフォーマンスを向上させるには、コールバック データを削除する必要があります。これを行うには、データ モデル内に構成テーブルを作成する必要があります。

「データの入力」オプションに移動し、データを貼り付けます。テーブルにLossTypeConfigTableという名前を付けます。

LuckyTemplates での測定: 最適化のヒントとテクニック

次に、「編集」をクリックして、インポートする列のデータ型を変更します。

損失タイプ ID のデータ型は、SELECTEDVALUE関数内で使用できるように教師値である必要があります。

モデルにロードされたら、損失タイプに基づいて Jobs テーブルと LossTypeConfigTable テーブルの間の関係を作成します。

LuckyTemplates での測定: 最適化のヒントとテクニック

リレーションシップを作成した後、Jobs テーブルに移動し、新しい列を追加します。これを Loss ID と名付け、数式を入力します。

LuckyTemplates での測定: 最適化のヒントとテクニック

関数を使用して 、損失タイプ ID を抽出します。

次に、RB インセンティブ% 測定に戻り、テキスト フィールドではなく数値フィールドを参照します。SELECTEDVALUE内で、損失タイプを損失 ID に置き換えます。

LuckyTemplates での測定: 最適化のヒントとテクニック

次に、コード内のすべてのメジャーを変更します。ジョブ タイプを確認する際には、テキスト値の代わりに整数値を使用します。

LuckyTemplates での測定: 最適化のヒントとテクニック

コードを変更したら、メジャーを確認して DAX Studio で実行します。

コールバック データ ID がクエリ内で削除され、コードの実行時間は 93 ミリ秒に短縮されます。

LuckyTemplates での測定: 最適化のヒントとテクニック

RB Incentive% 測定が完全に最適化されました。

5. LuckyTemplates のその他の指標を最適化する

また、WR Incentive% および QB Incentive% の尺度を最適化する必要もあります。

RB インセンティブ% 測定で使用されている正確なコードをコピーして貼り付けます。次に、3 つの対策をまとめて実行します。

合計実行時間は最適化され、1855 ミリ秒から 213 ミリ秒に短縮されました。また、ストレージ エンジンのクエリも 12 個しかありません。

最初の 2 つのクエリはフィルター コンテキストを作成し、残りはジョブ損失タイプ列内の値の正確な数を表します。

LuckyTemplates での測定: 最適化のヒントとテクニック

すべての対策が最適化されているため、元のコードを実行してパフォーマンスがどのように変化したかを確認します。データによると、現在は 1.9 秒で計算されています。

LuckyTemplates での測定: 最適化のヒントとテクニック

コード全体のパフォーマンスが最適化され、レポートがより高速かつ優れたものになります。


この新しいコースで DAX 関数を最適化する
より最適化されたデータを実現する簡単な LuckyTemplates 変換
高度な DAX を使用して LuckyTemplates 数式を最適化する

結論

LuckyTemplates レポートでは、DAX コードがスムーズに実行されるように対策を最適化する必要があります。これにより、レポートの全体的なパフォーマンスも向上します。

LuckyTemplates でメジャーを最適化するためのさまざまな方法と、レポートのコンテキストに応じてどれを使用するかを評価する方法を学びました。


Python における Self とは: 実際の例

Python における Self とは: 実際の例

Python における Self とは: 実際の例

RでRDSファイルを保存してロードする方法

RでRDSファイルを保存してロードする方法

R の .rds ファイルからオブジェクトを保存および読み込む方法を学習します。このブログでは、R から LuckyTemplates にオブジェクトをインポートする方法についても説明します。

最初の N 営業日の再考 – DAX コーディング言語ソリューション

最初の N 営業日の再考 – DAX コーディング言語ソリューション

この DAX コーディング言語チュートリアルでは、GENERATE 関数の使用方法とメジャー タイトルを動的に変更する方法を学びます。

LuckyTemplates のマルチスレッド動的ビジュアル手法を使用したインサイトのショーケース

LuckyTemplates のマルチスレッド動的ビジュアル手法を使用したインサイトのショーケース

このチュートリアルでは、マルチスレッド動的ビジュアル手法を使用して、レポート内の動的データ視覚化から洞察を作成する方法について説明します。

LuckyTemplates のフィルター コンテキストの概要

LuckyTemplates のフィルター コンテキストの概要

この記事では、フィルター コンテキストについて説明します。フィルター コンテキストは、LuckyTemplates ユーザーが最初に学習する必要がある主要なトピックの 1 つです。

LuckyTemplates Online Service でアプリを使用する際の最良のヒント

LuckyTemplates Online Service でアプリを使用する際の最良のヒント

LuckyTemplates Apps オンライン サービスが、さまざまなソースから生成されたさまざまなレポートや分析情報の管理にどのように役立つかを示したいと思います。

時間の経過に伴う利益率の変化を分析する – LuckyTemplates と DAX を使用した分析

時間の経過に伴う利益率の変化を分析する – LuckyTemplates と DAX を使用した分析

LuckyTemplates でのメジャー分岐や DAX 数式の結合などの手法を使用して、利益率の変化を計算する方法を学びます。

DAX Studio でのデータ キャッシュのマテリアライゼーションのアイデア

DAX Studio でのデータ キャッシュのマテリアライゼーションのアイデア

このチュートリアルでは、データ キャッシュの具体化のアイデアと、それが結果を提供する際の DAX のパフォーマンスにどのように影響するかについて説明します。

LuckyTemplates を使用したビジネス レポート

LuckyTemplates を使用したビジネス レポート

これまで Excel を使用している場合は、ビジネス レポートのニーズに合わせて LuckyTemplates の使用を開始するのに最適な時期です。

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて