BI探検ノート

DAX 練習問題 11 / 31

重複を除いて数える(DISTINCTCOUNT)

目的(何のためにやるか)

重複を除いて数える(顧客数、商品の種類など)ための練習です。ただ数えると、同じものを、何回も数えてしまいます。

状況

10店舗の、1月〜3月の売上30行です。「店舗の数」を出したいのに、30と出ます。

準備

  1. CSV をダウンロードします(ダミーのデータです)。
  2. Power BI Desktop で、CSV を読み込みます。やり方は、はじめかたにあります。

やること

  1. 店舗の数(重複を除いた数)を、メジャーで出す。
  2. COUNT、COUNTA、COUNTROWS が、それぞれいくつになるか確かめる。

まず、下を見ずに、自分でやってみてください。うまくいかなければ、ここから下の解説を、上から順に、読みながら、やってみます。

解き方(ステップごとの解説・画面つき)

  1. 手順

    前提

    ダミーの売上(sales6、店舗・月・売上の3列、30行)です。店舗は10店舗で、各店舗に、1月〜3月の3行があります。

    1. 練習用の CSV(sales_stores_months.csv、30行)を、Power BI Desktop に読み込みます。プレビューで、店舗・月・売上の3列が、30行あることを確認して、「読み込み」を押します。
    CSV のプレビュー。店舗・月・売上の3列が見える
    CSV のプレビュー。店舗・月・売上の3列が見える

    読み込むと、データペインに、テーブル名(sales_stores_months)が出ます。

    データペインに、sales_stores_months が出ている
    データペインに、sales_stores_months が出ている
    1. 「ホーム」の「新しいメジャー」を押して、数式バーに、式を入れます。まず、行数です。
    数式バーに、行数 = COUNTROWS ( sales_stores_months ) と入っている
    数式バーに、行数 = COUNTROWS ( sales_stores_months ) と入っている
    1. 同じように、「店舗の数」のメジャーを作ります。
    数式バーに、店舗の数 = DISTINCTCOUNT ( sales_stores_months[店舗] ) と入っている
    数式バーに、店舗の数 = DISTINCTCOUNT ( sales_stores_months[店舗] ) と入っている
    1. 残りの2つ(COUNTA、COUNT)も作り、4つのメジャーにチェックを入れて、ビジュアルを「テーブル」にします。

    (この練習問題の画面は、上のとおり、練習用の CSV(テーブル名 sales_stores_months)で撮り直したものです。下の式は、記事を最初に書いたときのテーブル名(sales6)のままです。テーブル名を、読み替えてください。)

    「新しいメジャー」で、次の4つを作って、表のビジュアルに、並べました。

    行数 = COUNTROWS ( sales6 )
    
    店舗の数 = DISTINCTCOUNT ( sales6[店舗] )
    
    店舗のCOUNTA = COUNTA ( sales6[店舗] )
    
    店舗のCOUNT = COUNT ( sales6[店舗] )
  2. 結果

    表のビジュアル。行数は30、店舗の数は10、店舗のCOUNTAは30、店舗のCOUNTは30
    表のビジュアル。行数は30、店舗の数は10、店舗のCOUNTAは30、店舗のCOUNTは30

    練習用の CSV で作り直した表も、同じ結果でした(行数 30、店舗の数 10、COUNTA 30、COUNT 30)。

    練習用の CSV で作り直した表。30、10、30、30
    練習用の CSV で作り直した表。30、10、30、30

    重複を除いて、「店舗が10」と分かるのは、DISTINCTCOUNT だけでした。ほかの3つは、行(空でない値)を数えるので、30 になりました。

  3. 練習用の CSV の「月」の列が、日付として読まれた

    練習用の CSV(sales_stores_months.csv)の「月」の列は、CSV の中では、「1月」「2月」「3月」の文字です。ところが、Power BI に読み込むと、日付(2026/01/01、2026/02/01、2026/03/01)として読まれました(読み込みのプレビューで、そう出ていました)。

    読み込みのプレビュー。月の列が、2026/01/01 のような日付の形で出ている
    読み込みのプレビュー。月の列が、2026/01/01 のような日付の形で出ている

    そのため、この「月」の列を、マトリックスの列に入れると、年・四半期・月の階層で、英語の月名(January、February、March)として、出ました。

    マトリックス。店舗を行、月を列に入れた表。年 2026、四半期 1、January・February・March が並ぶ
    マトリックス。店舗を行、月を列に入れた表。年 2026、四半期 1、January・February・March が並ぶ

    この記事の「店舗の数」「行数」は、「店舗」の列だけを使うので、結果には、影響しません。ただ、「月」の列を、「1月」の文字のまま使いたいときは、読み込みのときに、型を「テキスト」にするか、Power Query で型を直す必要があります(この方法は、この記事では、確かめていません)。

    COUNT は、テキストの列でも動いた

    COUNT は、数字の列に使うものだと、私は、思っていました。しかし、テキストの店舗の列でも、エラーにならず、30 が出ました。Microsoft Learn の COUNT のページ(確認日 2026年10月24日)には、数えるのは、数字、日付、文字列、と書かれています。私の結果と合っています。

    同じページには、論理値(TRUE/FALSE)は数えない、論理値やテキストを数えるときは COUNTA を、という趣旨の記載もあります。記載の中で、文字列の扱いが、少し食い違って見えます。私は、画面で出た結果(30)を、そのまま書いています。論理値の列は、試していません。

答え合わせ

自分で採点する数字

DISTINCTCOUNT は 10、COUNTROWS は 30。

  • DISTINCTCOUNT(テーブル[店舗]) は 10。COUNTROWS(テーブル) は 30。
  • COUNTA も COUNT も 30(重複は除かれない)。
  • 店舗の列(テキスト)に COUNT を使っても、エラーにはならず、30 が出る。

この解説は、実機(Power BI Desktop 日本語版 2.159.883.0)で確かめた記事から、まとめています。確認していないことは、記事の最後に書いています。
元の記事を読む →

確認日: 2026-10-25。CSV はダミーのデータで、無料です。