Python における Self とは: 実際の例
Python における Self とは: 実際の例
このチュートリアルでは、LuckyTemplates でメジャーを最適化する方法を学習します。レポート内のメジャーを最適化すると、貴重な洞察とデータを生成する際のコードのパフォーマンスが向上します。また、さまざまな評価方法と、それを適用してレポートを最適化する方法についても学習します。このチュートリアルの完全なビデオは、このブログの下部でご覧いただけます。
目次
1. コードのパフォーマンスを分析する
この例では、このレポートを最適化する必要があります。
これは使用するデータ モデルです。
Jobs テーブルには、特定の期間内に実行されたジョブに関するすべての情報が含まれます。
このテーブルは、最適化するすべてのメジャーのベースとなります。
まず、レポートのパフォーマンスをテストする必要があります。
[表示] タブに移動し、[パフォーマンス アナライザー]を選択します。次に、[記録を開始してビジュアルを更新]をクリックします。アナライザーがビジュアルをレンダリングするまで待ちます。
これが完了したら、 [インセンティブの内訳]リストをドロップダウンし、[クエリのコピー]をクリックします。
次に、[外部ツール]を選択してDAX Studio に移動し、LuckyTemplates が生成したコードを確認します。
次に、コピーしたクエリをワークスペース内に貼り付けます。
メジャー内の変数
最初の変数はDateClosedで、ダッシュボード上のスライサーです。ファクト テーブルの列を使用して、スライサー内の特定の期間の値を取得します。
次の変数はJobLostで、Job Lost データの False または空白をチェックします。
最後の変数はMatrixVisualです。これがコードの核心です。マトリックス ビジュアルを設定するために LuckyTemplates によって生成された要約列を示しています。このマトリックスで失業タイプをグループ化し、スライサーからのフィルターを挿入します。次に、拡張列を追加します。
要約列の実行が完了すると、コードの下のペインに結果が表示されます。
LuckyTemplates は、その結果を使用してマトリックス ビジュアルを設定します。
DAX Studio のコールド キャッシュ
次に、コード全体の実行にかかる時間を確認する必要があります。これを行うには、[サーバー タイミング] をオンにして、[キャッシュをクリアしてから実行]を選択します。
DAX Studioを使用して LuckyTemplates でメジャーを最適化しようとしている場合は、取得される時間が正確になるように、コールド キャッシュ シナリオで操作することをお勧めします。その後、F5 キーを押して、[サーバー タイミング] タブで操作が完了するまで待ちます。
完了すると、合計実行時間は 3.6 秒であることがわかります。ほとんどの時間をフォーミュラ エンジンで費やし、ストレージ エンジンで 57 ミリ秒を費やしました。
また、383 個のストレージ エンジン クエリが見つかったこともわかります。これらすべてのクエリのうち、再利用できるようにメモリにキャストされるクエリは 327 個あります。
2. LuckyTemplates でメジャーを分析する
次に、これら 3 つの同一の対策を最適化する必要があります。
これらのメジャーを別のファイルに抽出し、使用しているデータ モデルに接続する必要があります。
その後、サーバー タイミングを開始して、ビジュアルの設定にかかる 3 つのメジャーにかかる時間を確認します。
実行の結果は、メジャーが結果を取得するのに 1.85 秒かかっていることを示しています。
結果は、10 行と集計列に属する 3 つの拡張列で構成されるテーブルを示します。
「損失タイプ」列には、コードがインセンティブの割合を取得するために計算する 10 個の一意の値が含まれています。
コードにかかる時間は指数関数的に長くなります。いつ、どこで最適化する必要があるかということです。
LuckyTemplates の RB インセンティブ% 測定
これは、LuckyTemplates の RB インセンティブ% の尺度です。これは、この例で使用されている 3 つの主要な対策の 1 つです。
インセンティブの割合を計算しようとしていることがわかります。
これには変数 JobType があり、現在のフィルター コンテキストで失われたタイプの値を取得します。また、現在のフィルター コンテキストに表示される値が 1 つだけかどうかもチェックします。 条件が満たされるたびに対応する結果が得られるように、 関数を使用する必要があります。
この対策コードは大量のストレージ エンジン グリースを生成するため、コード全体の時間が増加します。
次に、DAX Studio に戻って、メジャーによって生成されるストレージ エンジン クエリの量を確認します。
10 行のデータを取得するだけで、実行に 600 ミリ秒かかり、ストレージ エンジン クエリが 43 回かかったことがわかります。
次に、ストレージ エンジンから要求されているデータを確認します。最初のクエリには、雇用喪失タイプと その雇用喪失タイプのDCOUNTがあります。
次のクエリには、レポート内のスライサーからの Jobs Closed Date が含まれています。
3 番目のコードには、コールバック データ ID を持つ別の損失タイプが表示されます。
別の行には、コードの最も重要な行が表示されます。
最初に表示されるのは、ジョブの支払の受領額、請求額、および実際の経費の
次は、条件とそれに対応する結果を記述するWHERE関数です。結果は、スライサーの選択と RB インセンティブ% 測定の switch ステートメントによって異なります。
12 行目と 14 行目のコードが同じであることもわかります。
右にスクロールすると、同じクエリを含む行があることがわかります。行のクエリは、RB Incentive% メジャーの switch ステートメントによって指示されます。
LuckyTemplates の RB Incentive% メジャーに戻ると、クエリが繰り返された回数と、それがストレージ エンジン クエリにどのように反映されているかを確認できます。
IF と Switch の背後にあるロジック
ここで、クエリが複数回実行される理由を理解するには、関数 とSWITCH関数のロジックを理解する必要があります。
クエリ プランで個別に実行する必要があります。ただし、その前に、必ずデータベースに接続し、クエリ プランをオンにしてください。
クエリ プランでSWITCHステートメントを実行します。次に、 ステートメントを強調表示して Enter キーを押します。
これにより、さまざまな操作を含む論理クエリ プランが生成されます。
次に、ステートメントを強調表示して Enter キーを押して、IFステートメントを実行します。
同じ論理クエリ プランが生成されることがわかります。
これは、SWITCH 関数を使用するたびに、エンジンがその関数を内部でIFステートメントに変換するためです。ただし、コードの可読性が向上するため、SWITCHステートメントの使用をお勧めします。
その後、IF関数またはSWITCH関数内でコードがどのように実行されるかを理解する必要があります。
これは内部にSWITCHステートメントを含むコード例です。
総利益、見積総額、請求総額のメジャーがあり、これらはすべてさまざまな列の合計です。また、ジョブ損失タイプのに対する 関数と、 SWITCHおよびTRUEステートメントもあります。
このコードを実行すると、関数の背後にあるロジックが表示されます。
最初のクエリは、ジョブ テーブルから個別のジョブ損失タイプを取得します。
雇用喪失タイプとは別に、雇用予測の合計も取得します。
WHERE条件内では、「ジョブ損失タイプ」列に存在する値も確認できます。
3. コード評価方法を使用する
DAX では、コードを評価する方法が 3 つあります。
これらのメソッドは、LuckyTemplates でコードまたはメジャーを最適化するのに役立ちます。
第 1 の方法: 厳密な評価
以下に示す例では、厳密な評価方法が使用されています。
その背後にあるロジックは、雇用損失タイプのコンテキストが A に等しい場合、粗利益が得られるということです。それ以外の場合は、合計見積もりが表示されます。このコードは、失業タイプの各行に対してこれを実行します。
これは、厳密な評価を使用する LuckyTemplates の別のメジャーの例です。
このコードを実行すると、5 つのストレージ エンジン クエリが生成されます。
厳密な評価では、総利益に 1.4 を乗算した値が平均推定値より大きい場合、コードは合計推定値を提供します。それ以外の場合は、粗利益が表示されます。
IF ステートメントが総利益の競合を複数回チェックするため、厳密な評価を使用すると、より多くのストレージ エンジン クエリが生成され、最終的に操作全体のパフォーマンスが妨げられることになります。
2 番目の方法: 熱心な評価
これは前の例と同じコードです。
ただし、 IFステートメント内のメジャーを計算する代わりに 、RETURN の前に 内のすべての値が計算されます。
これは、ステートメントをチェックする前に、すべての雇用損失タイプの総利益と合計見積もりのすべての値を取得することを意味します。
このコードを実行すると、ストレージ エンジンの数が 3 つに減ります。
操作全体のパフォーマンスが向上します。
最初の操作クエリでは、雇用損失タイプと、雇用予測と総利益の合計を取得します。
次のクエリは、Jobs Stable から Jobs Estimate の合計を取得します。これは、平均推定値の計算に使用されます。
最後のクエリは、 ADDCOLUMNSに書き込まれた値の個別のジョブ損失タイプを示します。
Eager Evaluation を使用すると、すべてが 1 つのデータ キャッシュに保存されます。データは数式エンジンでも評価され、反復されます。IFステートメントは、True または False の評価に応じて、 Total Estimate または Gross Profit を返します。
コードを最適化する上で、熱心な評価が常に最良の方法であるとは限りません。複雑なコードがある場合、厳密な評価によりパフォーマンスが向上します。それはすべて、DAX コード内で使用する関数によって異なります。
Eager Evaluation の欠点は、IF または SWITCH ステートメントの前に値を作成し、実行されるべきでない変数をステートメント内で使用した場合でも、エンジンがそれらの変数を計算してしまうことです。
以下に欠点の例を示します。
理想的には、ジョブ損失タイプが A に等しい場合、粗利益が得られるはずです。それ以外の場合は、Total Estimate が取得されます。
Job Loss Type 列内には A に等しい値がないため、常に Total Estimate を取得する必要があります。ただし、データ キャッシュ内の総利益は引き続き提供されます。
最初のクエリを見ると、雇用損失タイプと、雇用総利益と推定の合計が取得されます。
次のクエリでは、Jobs テーブルから個別の Jobs Loss Type を取得します。
3番目の方法: IF.EAGERの評価
次の方法は、 Eager 評価の動作を再現するIF.EAGER関数評価です。
これにより、厳密な評価を表すコードを作成し、それを熱心な評価で実行できます。
このサンプルコードを見ると、厳密な評価のコードとまったく同じです。唯一の違いは、IF の代わりにIF.EAGER関数を使用することです。
コードを実行する前に、必ず LuckyTemplates モデルに接続し、サーバー タイミングをオンにしてください。完了したら、F5 キーを押します。
3 つのストレージ エンジン クエリが生成されたことがわかります。
最初のクエリは、雇用損失タイプと、雇用推定値と総利益の合計を取得します。
2 番目のクエリは、ジョブ見積もりの合計を取得します。
最後のクエリは、ジョブ テーブルから個別のジョブ損失タイプを取得します。
Eager Evaluation と同じ動作が実行されたことがわかります。
評価方法の概要
計算のパフォーマンスを向上させるには、次の点に留意する必要があります。
ただし、レポートで使用するのに本当に最適なものを見つけるには、これら 3 つの方法をテストする必要があることに注意してください。
4. LuckyTemplates でメジャーを最適化する
このチュートリアルの主なレッスンは、コードを最適化することです。
戻って、厳密な評価を使用して実行されるRB インセンティブ%測定を確認します。次に、Eager Evaluation を使用して評価してみます。
まずは変数を作成し、 RETURN関数を入力します。
変数を使用してメジャー参照を変更します。
その後、測定結果を確認し、DAX Studio に移動して、パフォーマンスが向上したかどうかを確認します。
これは、合計時間が 642 ミリ秒であり、ストレージ エンジン クエリの合計数が 39 に減少していることを示しています。
次に、すべてのデータの変数を作成し、すべてのメジャー参照を対応する変数に変更します。
次に、メジャーを確認し、DAX スタジオでコードを実行します。
合計実行時間とストレージ エンジン クエリの合計量は、それぞれ 600 ミリ秒から 170 ミリ秒に、43 クエリから 15 クエリに短縮されました。
重複がないこともわかります。コードに変数を含めると、可読性とパフォーマンスが向上します。
LuckyTemplates のメジャーの高度な最適化
次に、DAX コードをさらに最適化する必要があります。
を使用する代わりに、 関数を使用します。
HASONEVALUE は、 フィルター コンテキストで使用可能な値の数をカウントします。これは非常に負荷の高い操作です。一方、ISINSCOPE は、指定された列がグループ化に使用されているかどうかを確認します。
関数を変更した後、DAX Studio で測定を確認して実行します。
ストレージ エンジンのクエリ数が 12 になっていることがわかります。合計実行時間も 105 ミリ秒になっています。
2 番目のクエリでは、コールバック データ ID が示されています。
これは、テキスト フィールドで SELECTEDVALUE を使用するときに発生することがあります。コールバック データが表示されると、ストレージ エンジンは数式エンジンを呼び出して、コードの複雑さを解決します。これにより、メジャーのパフォーマンスが低下します。
レポートのパフォーマンスを向上させるには、コールバック データを削除する必要があります。これを行うには、データ モデル内に構成テーブルを作成する必要があります。
「データの入力」オプションに移動し、データを貼り付けます。テーブルにLossTypeConfigTableという名前を付けます。
次に、「編集」をクリックして、インポートする列のデータ型を変更します。
損失タイプ ID のデータ型は、SELECTEDVALUE関数内で使用できるように教師値である必要があります。
モデルにロードされたら、損失タイプに基づいて Jobs テーブルと LossTypeConfigTable テーブルの間の関係を作成します。
リレーションシップを作成した後、Jobs テーブルに移動し、新しい列を追加します。これを Loss ID と名付け、数式を入力します。
関数を使用して 、損失タイプ ID を抽出します。
次に、RB インセンティブ% 測定に戻り、テキスト フィールドではなく数値フィールドを参照します。SELECTEDVALUE内で、損失タイプを損失 ID に置き換えます。
次に、コード内のすべてのメジャーを変更します。ジョブ タイプを確認する際には、テキスト値の代わりに整数値を使用します。
コードを変更したら、メジャーを確認して DAX Studio で実行します。
コールバック データ ID がクエリ内で削除され、コードの実行時間は 93 ミリ秒に短縮されます。
RB Incentive% 測定が完全に最適化されました。
5. LuckyTemplates のその他の指標を最適化する
また、WR Incentive% および QB Incentive% の尺度を最適化する必要もあります。
RB インセンティブ% 測定で使用されている正確なコードをコピーして貼り付けます。次に、3 つの対策をまとめて実行します。
合計実行時間は最適化され、1855 ミリ秒から 213 ミリ秒に短縮されました。また、ストレージ エンジンのクエリも 12 個しかありません。
最初の 2 つのクエリはフィルター コンテキストを作成し、残りはジョブ損失タイプ列内の値の正確な数を表します。
すべての対策が最適化されているため、元のコードを実行してパフォーマンスがどのように変化したかを確認します。データによると、現在は 1.9 秒で計算されています。
コード全体のパフォーマンスが最適化され、レポートがより高速かつ優れたものになります。
この新しいコースで DAX 関数を最適化する
より最適化されたデータを実現する簡単な LuckyTemplates 変換
高度な DAX を使用して LuckyTemplates 数式を最適化する
結論
LuckyTemplates レポートでは、DAX コードがスムーズに実行されるように対策を最適化する必要があります。これにより、レポートの全体的なパフォーマンスも向上します。
LuckyTemplates でメジャーを最適化するためのさまざまな方法と、レポートのコンテキストに応じてどれを使用するかを評価する方法を学びました。
Python における Self とは: 実際の例
R の .rds ファイルからオブジェクトを保存および読み込む方法を学習します。このブログでは、R から LuckyTemplates にオブジェクトをインポートする方法についても説明します。
この DAX コーディング言語チュートリアルでは、GENERATE 関数の使用方法とメジャー タイトルを動的に変更する方法を学びます。
このチュートリアルでは、マルチスレッド動的ビジュアル手法を使用して、レポート内の動的データ視覚化から洞察を作成する方法について説明します。
この記事では、フィルター コンテキストについて説明します。フィルター コンテキストは、LuckyTemplates ユーザーが最初に学習する必要がある主要なトピックの 1 つです。
LuckyTemplates Apps オンライン サービスが、さまざまなソースから生成されたさまざまなレポートや分析情報の管理にどのように役立つかを示したいと思います。
LuckyTemplates でのメジャー分岐や DAX 数式の結合などの手法を使用して、利益率の変化を計算する方法を学びます。
このチュートリアルでは、データ キャッシュの具体化のアイデアと、それが結果を提供する際の DAX のパフォーマンスにどのように影響するかについて説明します。
これまで Excel を使用している場合は、ビジネス レポートのニーズに合わせて LuckyTemplates の使用を開始するのに最適な時期です。
LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて