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

このチュートリアルで説明した、各月の最初の N 営業日を動的に比較する問題をもう一度見てみましょう。この問題は、フォーラムの LuckyTemplates メンバーからのクエリに基づいていました。彼は、特定の月の最初の 5、10、15、20 の請求可能日 (週末と休日以外) を動的に調べて比較したいと考えていました。前の月。

パワー クエリを使用する代わりに、DAX コーディング言語ソリューションを考え出します。このチュートリアルの完全なビデオは、このブログの下部でご覧いただけます。

最初のビデオでは、この問題を解決する方法についてのパワー クエリ ソリューションを考え出しました。しかし、その後、LuckyTemplates の専門家の 1 人、Antriksh Sharma が、さらに深く掘り下げる価値のある、素晴らしく効率的な対策を思いつきました。彼がメジャーの開発に使用したテクニックのいくつかについて説明します。これにより、DAX ツールボックスに追加のツールが提供されます。

確かに私にとっても、これを検討した他の専門家にとってもそうでした。月をまたいだ同等の営業日の同一比較は、一般に、多くの状況で使用できる貴重なパターンです。

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

パワークエリに飛び込んで、Antrikshがここで何をしたかを見てみましょう。Month & YearTotal Sales、そして最後に、開発した what-if パラメーターに基づいて電力クエリを使用して選択したN 営業日の Total Sales があります。

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

アントリクシュはまったく異なるアプローチをとり、驚くほど短期間でこの問題全体を解決しました。コマンドの使用です。

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

これはあまり頻繁には使用しない DAX 関数ですが、この種の問題には最適です。SQL BI DAX ガイドを見ると、GENERATE 関数は 2 つの異なるテーブルを入力として使用し、SQL コマンド CROSS APPLY と同等の処理を実行するテーブル関数であると記載されています。

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

したがって、ベース テーブル (Table1) を取得してそれを反復処理し、次に 2 番目のテーブル式を取得して最初のテーブルの各行に対してそれを評価し、出力としてテーブルに返します。

Antriksh の対策を採用してテーブルに落とし込んでみましょう。前回実行したパワー クエリ ソリューションとまったく同じ結果が生成されることがわかります。これは良いことであり、両方の対策が非常にうまく検証されています。

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

この対策を分解してみましょう。ここで適用される最初のフィルターは Dates[IsBusinessDay] = TRUE です。これにより、拡張日付テーブルの IsBusinessDay フィールドに基づいて、週末および休日以外の日付がすべて取り出されます。

これについては、最初のチュートリアルで詳しく説明し、それを休日のテーブルに結び付ける方法についても説明しました。

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

この興味深い部分は、2 つのテーブル入力にあります。最初のテーブルは、日付テーブルの月と年フィールドの 1 列のテーブルです。

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

しかし、2 番目のテーブル入力では興味深いことが起こります。Antriksh はを使用し、動的パラメーターを TOPN の行数として使用しました。

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

Total Salesメジャーは 2 番目のテーブルにアタッチされ、その後、最初のテーブルに適用されます。

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

目次

DAX コーディング言語を使用した複雑なメジャーの理解

このような複雑なメジャーが何をしているのかを理解する最も簡単な方法の 1 つは、表形式エディタにアクセスすることです。この式を見て、最初にこの TOPN 式が何をしているのかを理解することができます。

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

TOPN 部分をコピーして、新しいDAX クエリを作成しましょう。DAX クエリは EVALUATE で始まることに注意してください。

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

TOPN 部分を貼り付けると、販売注文テーブルから最初の 5 つの日付が取得されていることがわかります。TOPN には、sales テーブル内のすべての注文日の値で構成されるテーブルがあります。

この TOPN 関数は、what-if パラメーターの値 (この場合は 5) を取得し、それを販売注文日フィールドに適用します。次に、そのフィールドに基づいて、フィルター コンテキスト内の最初の 5 つの日付を昇順で取得します。

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

追加のフィルター コンテキストがないことを考えると、テーブル全体から最初の 5 つの日付を取得するだけです。

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

@Sales 列は、適切なフィルター コンテキスト内の総売上高を TOPN テーブルに追加しているだけです。

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

これまでのところ、月と年の最初のテーブル、売上テーブルの最初の N 日付の TOPN の 2 番目のテーブル、そしてそれに関連付けられた総売上高ができています。

DAX コーディング言語での GENERATE テーブルの使用

この GENERATE テーブルが何をしているのかを見てみましょう。表形式エディターに戻り、新しい DAX クエリを作成します。

いつものように EVALUATE から開始し、コードの GENERATE 部分に貼り付けて、「5」をクリックします。

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

最初のテーブルの各行が反復され、@Sales 関数のコンテキストで評価された TOPN テーブルの 5 行と結合していることがわかります。

最初のテーブルの最後に到達するまで、4 月の最初の 5 営業日、5 月の最初の 5 営業日、6 月の最初の 5 営業日というように続きました。

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

これはまさに私たちが必要としているものであり、これらの値を合計するという比較的単純な問題になります。結果 (GENERATE 結果のテーブル変数) が得られたので、@Sales 関数を合計する必要があります。

コンテキスト内で、4 月の最初の 5 営業日、5 月の最初の 5 営業日などを合計して合計 $23,737,430 になるまで集計します。この場合、運用する月と年のコンテキストはありません。 。

これにより、@Sales 列全体が合計され、パワー クエリ ソリューションで取得したのとまったく同じ合計が得られます。

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

スライサーを 10 に変更すると、パワー クエリで行ったのと同じ結果が DAX コーディング言語で動的に得られることがわかります。

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

また、加えた変更を反映するために動的に調整される下部の棒グラフもあります。

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

小節タイトルを動的に調整する

もう一つ紹介したいトリックがあります。what-if パラメータに動的な調整を作成し、それをメジャー タイトルに動的に結び付けることができます。

たとえば、上部のスライサーを 15 に変更すると、下部のメジャーの名前が「Total Sales for the First 15 Business Days of Each Month」に動的に変更されます。

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

DAX では、条件付き書式設定を使用してこれを簡単に行う方法があります。基本的には 3 つの文字列を取得するだけです。1 つ目はTotal Sales for Firstで、それを what-if パラメーターから取得した値と連結し、それをタイトルの残りの部分に結び付けます。

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

次に、ビジュアルに移動し、タイトルの条件付き書式設定に移動して、fxをクリックします。

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

フィールド値によって書式設定し、動的なタイトル メジャーを選択します。これにより、what-if パラメーターの選択が変更されます。

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

結論

私たちが現在持っているのは、DAX コーディング言語を使用した完全なソリューションです。GENERATE 関数を使用してそれを行うための非常に創造的で効率的な方法について説明しました。素晴らしい DAX 知識を私たちに共有してくれた Antriksh に感謝したいと思います。私は彼の DAX ソリューションを試しながら多くのことを学びました。あなたも同様に学んだことを願っています。

Leave a Comment

Power Automate の文字列関数: Substring と IndexOf

Power Automate の文字列関数: Substring と IndexOf

Microsoft フローで使用できる 2 つの複雑な Power Automate String 関数、substring 関数とindexOf 関数を簡単に学習します。

LuckyTemplates でビジュアル ツールチップを作成する

LuckyTemplates でビジュアル ツールチップを作成する

LuckyTemplates ツールチップを使用すると、より多くの情報を 1 つのレポート ページに圧縮できます。効果的な視覚化の手法を学ぶことができます。

Power Automate で HTTP 要求を行う

Power Automate で HTTP 要求を行う

Power Automate で HTTP 要求を作成し、データを受信する方法を学んでいます。

LuckyTemplates で日付テーブルを作成する方法

LuckyTemplates で日付テーブルを作成する方法

LuckyTemplates で簡単に日付テーブルを作成する方法について学びましょう。データの分析と視覚化のための効果的なツールとして活用できます。

2 つの方法による SharePoint 列の検証

2 つの方法による SharePoint 列の検証

SharePoint 列の検証の数式を使用して、ユーザーからの入力を制限および検証する方法を学びます。

SharePoint リストを Excel または CSV ファイルにエクスポート

SharePoint リストを Excel または CSV ファイルにエクスポート

SharePoint リストを Excel ファイルおよび CSV ファイルにエクスポートする方法を学び、さまざまな状況に最適なエクスポート方法を決定できるようにします。

Power Automate のオンプレミス データ ゲートウェイ

Power Automate のオンプレミス データ ゲートウェイ

ユーザーがコンピューターから離れているときに、オンプレミス データ ゲートウェイを使用して Power Automate がデスクトップ アプリケーションにアクセスできるようにする方法を説明します。

DAX 数式での LASTNONBLANK の使用

DAX 数式での LASTNONBLANK の使用

DAX 数式で LASTNONBLANK 関数を使用して、データ分析の深い洞察を得る方法を学びます。

CROSSJOIN 関数の使用方法 – LuckyTemplates および DAX チュートリアル

CROSSJOIN 関数の使用方法 – LuckyTemplates および DAX チュートリアル

LuckyTemplates で予算分析とレポートを実行しながら、CROSSJOIN 関数を使用して 2 つのデータ テーブルをバインドする方法を学びます。

TREATAS 関数を使用して LuckyTemplates で仮想リレーションシップを作成する

TREATAS 関数を使用して LuckyTemplates で仮想リレーションシップを作成する

このチュートリアルでは、LuckyTemplates TREATAS を使用して数式内に仮想リレーションシップを作成する方法を説明します。