Python における Self とは: 実際の例
Python における Self とは: 実際の例
DAX 関数を使用すべきではない理由を検討し、必要と同じ結果を得るためにいくつかの代替ソリューションを提供します。このチュートリアルのビデオ全体は、このブログの下部でご覧いただけます。
DAX でカテゴリごとの平均を取得するのは、奇妙に複雑です。CALCULATE 関数を使用してこれらの計算を解決すると、新しい DAX ユーザーは DAX コードが必要以上に理解しにくいと感じる可能性があります。良いニュースは、この問題にはもっと簡単な解決策があるということです。
目次
CALCULATE DAX 関数の概要
数か月前、私はでLuckyTemplates についてプレゼンテーションを行いました。これは DAX カウンターカルチャーと呼ばれるもので、DAX に関する別の見解をいくつか提供しました。
主なものの 1 つは、CALCULATE 関数の使用に関連しています。特に DAX を初めて使用する場合に CALCULATE を使用すべきではない理由について説明しました。
CALCULATE は、理解して使用するのが非常に複雑な関数です。データ モデルに関して特定の仮定を置き、多くの問題を引き起こす可能性があります。
また、Running Total に関する Microsoft のクイック メジャーも詳しく調べました。これは、単一テーブルの状況では機能せず、適切に機能するにはスター スキーマが必要だからです。
そこで、スター スキーマであっても単一テーブル モデルであっても、CALCULATE を必要とせずに機能する、より簡単な代替手段を示しました。
DAX 式を計算する
このブログでは、カテゴリごとの平均と呼ばれる簡単な尺度について詳しく説明します。LuckyTemplates デスクトップを使用している場合は、まず [フィールド] ウィンドウに移動し、新しいクイック メジャーを作成します。
ポップアップ表示される [クイック測定] ウィンドウで、[計算]ドロップダウンから[カテゴリごとの平均]を選択します。次に、「?」をドラッグします。[基本値]テキスト フィールドに値を入力し、[カテゴリ]フィールドに月を入力します。
次に「OK」をクリックすると、次のようなビジュアルが表示されます。
X 軸には四半期 (Quarter 1、2、3、および 4) が表示されます。
ここでやりたいことは、以下に示す各月の値を合計し、それらの値の平均を取ることです。つまり、このブログのテーマであるカテゴリごとの平均です。
このためのデータ モデルは非常にシンプルです。Dates、ランダムに生成されたValues 、およびMonth、MonthSort、およびQuarters が別々の列に含まれるテーブルがあります。
そして、Calendar Table、Month、MonthSort、Quarter の日付テーブルにも同じものがあります。これは、日付テーブルまたは最初のテーブルから四半期または月を選択できることを意味します。
カテゴリごとの平均の良い点は、単一のテーブル モデルがあるかスター スキーマがあるかに関係なく、実際に機能することです。
これらのビジュアルでは、最初のテーブルの四半期を使用しています…
…一方、これは日付テーブルの四半期を使用しています。どちらの方法でも機能します。
しかし、カテゴリごとの平均に関する問題は単に DAX コードにあります。
この DAX コードは奇妙です。DAX の専門家であっても、一見しただけではおそらく混乱するでしょう。これは奇妙なことに、フィルター句のない CALCULATE ステートメントで構成されており、sum ステートメントをラップするだけです。
実際、フォーラムで理由もなく合計をラップするだけの CALCULATE を使用している人を見ると、これは私にとって非常に腹立たしいことの 1 つです。しかし、この場合、実は理由があるのです。
これらを見るたびに私の頭は混乱してしまいます。なぜなら、これらは CALCULATE 関数を使って何をしているのか全く理解していないことを即座に示しているだけだからです。したがって、代わりにそこから遠ざかることをお勧めします。
カテゴリごとの平均の DAX コード
上記の DAX コードではを使用しています。この関数は CALCULATE セグメント内にないため、やはり奇妙になります。おそらく、この関数はドキュメントに基づいて CALCULATE ステートメントで使用するために構築されています。
このコードではも使用されていますが、これには同意しません。個別の値は、一致しない行がある場合に空白行を返す傾向があるため、VALUES は決して使用しないでください。それは多くの問題に巻き込まれる可能性がありますが、それは別のビデオの主題です。
基本的に、ここで何が起こっているのかというと、VALUES 関数を使用してすべてのカテゴリを取得しているということです。たとえば、第 1 四半期では、1 月、2 月、3 月になります。VALUES もテーブルを返しますが、 KEEPFILTER ステートメントを使用して、それをの最初のパラメータとして有効にしています。
また、KEEPFILTERS のコンテキスト内で実行する CALCULATE 関数も保持します。AVEAGEX の動作方法により、2 番目の式を取得し、最初の式のコンテキスト内で実行します。
では、何が問題なのでしょうか?
全体的には問題なく動作しますが、DAX を初めて使用する人には適していません。クイック メジャーはおそらく DAX を初めて使用する人向けであるため、Microsoft はこのクイック メジャーを作成したときに本当に乗り遅れたと思います。
「あなたは DAX を初めて使用しており、DAX について知っておくべきことをすべて知っているわけではないので、さまざまな計算を使用して一般的なメジャーをいくつか作成しましょう。」のような、簡単なメジャーは素晴らしいアイデアです。しかし、なぜ彼らはそのような奇妙で複雑な方法でそれらを構築したのでしょうか?
おそらく DAX の専門家ですらこの問題について少し頭を悩ませているのに、DAX の初心者がこれを見て何が起こっているのかを理解するにはどうすればよいでしょうか?
したがって、私にとって、彼らは CALCULATE を含めることを主張し、そこに CALCULATE を入れるために困難を飛び越えなければならないという簡単な方法で、人々が DAX を学ぶのを助ける絶好の機会を逃したことになります。
より簡単な解決策
SUMMARIZE関数の使用
前にも述べたように、より良い、より簡単な方法があります。
まず、 VAR_Tableを使用してテーブル変数を作成します。を使用してテーブルを取得し、月ごとに要約し、値列を作成して、値を合計します。
最後に、 AVEAGEX関数を使用して値の平均を取得します。
このコードはよりシンプルで、より論理的です。いずれにしても必要のない CALCULATE は含まれていません。
SUMMARIZEを批判するブログ記事を見かけるかもしれません。ブログによると、SUMMARIZE の内部的な仕組みはかなり複雑だという。
また、ある特定のケースではトラブルに巻き込まれる可能性はあるものの、決して遭遇することはないということも示唆しています。これは、計算に非常に複雑な計算と非常に大きなテーブルが含まれる場合にのみ発生します。そうして初めて、SUMMARIZE は不安定な結果をもたらします。
少なくともそれがブログ記事の主張です。また、「SUMMARIZE」を敬遠したい場合でも大丈夫です。その場合は、代わりに関数を使用してください。
GROUPBY関数の使用
GROUPBY 関数の使い方に問題がある人はいないので、その使い方も学びましょう。もう一度、VAR_Table を使用して Table 変数を作成します。次に、 Month をGROUPBY して、Value 列を作成します。
次に、CURRENTGROUP を使用して適用します。これが GROUPBY の仕組みです。Value を合計し、再度AVERAGEXを計算してみましょう。
コードは次のようになります。
結果の比較: SUMMARIZE、GROUPBY、CALCULATE DAX 関数
ここで、実行したショートカットが同じ結果を返すかどうかを確認してみましょう。
以下の画像でわかるように、「Better Average Per category」というラベルの付いた SUMMARIZE と「Better Average Per category 2」というラベルの付いた GROUPBY はどちらも同じ数値を返します。
どちらの式も、Q1 には 3.4K、Q2 には 3.6K、Q3 には 3.4K、Q4 には 3.5K を返します。ここでも、テーブルに Quarters を使用して、単一のテーブル データ モデルで動作します。
これらは、日付テーブルで四半期を使用するスター スキーマでも機能します。
簡単な対策 – LuckyTemplates内の計算関数を使用してLuckyTemplates モデルで使用する方法
LuckyTemplates で GROUPBY 関数を使用する効果的な方法
結論
CALCULATE を数式に組み込むためだけに、ねじれたコンテキスト ロジックを無理に組み込む必要はありません。単純な標準 DAX 関数を使用するだけで、同じことを実現できます。
実際、おそらく 80% ~ 90% の場合、何かに CALCULATE を使用する必要は全くありません。代わりに、よりシンプルで論理的な SUMMARIZE 関数と GROUPBY 関数を使用できます。
この PBIX ファイルを調べたい場合は、すでにこのファイルをクイック メジャー ギャラリーに公開し、ファイルにBetter Average Per Categoryという名前を付けています。ページを一番下までスクロールして、ダウンロードできる PBIX ファイルを見つけて、自分で遊んでみてください。
ではごきげんよう、
グレッグ・デックラー
Python における Self とは: 実際の例
R の .rds ファイルからオブジェクトを保存および読み込む方法を学習します。このブログでは、R から LuckyTemplates にオブジェクトをインポートする方法についても説明します。
この DAX コーディング言語チュートリアルでは、GENERATE 関数の使用方法とメジャー タイトルを動的に変更する方法を学びます。
このチュートリアルでは、マルチスレッド動的ビジュアル手法を使用して、レポート内の動的データ視覚化から洞察を作成する方法について説明します。
この記事では、フィルター コンテキストについて説明します。フィルター コンテキストは、LuckyTemplates ユーザーが最初に学習する必要がある主要なトピックの 1 つです。
LuckyTemplates Apps オンライン サービスが、さまざまなソースから生成されたさまざまなレポートや分析情報の管理にどのように役立つかを示したいと思います。
LuckyTemplates でのメジャー分岐や DAX 数式の結合などの手法を使用して、利益率の変化を計算する方法を学びます。
このチュートリアルでは、データ キャッシュの具体化のアイデアと、それが結果を提供する際の DAX のパフォーマンスにどのように影響するかについて説明します。
これまで Excel を使用している場合は、ビジネス レポートのニーズに合わせて LuckyTemplates の使用を開始するのに最適な時期です。
LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて