Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Business

Announcements
Now accepting applications for the Qlik Luminary and Partner Ambassador Programs: Apply by July 6!
cancel
Showing results for 
Search instead for 
Did you mean: 

Analytics & AI

Forums for Qlik Analytic solutions. Ask questions, join discussions, find solutions, and access documentation and resources.

Data Integration & Quality

Forums for Qlik Data Integration solutions. Ask questions, join discussions, find solutions, and access documentation and resources

Explore Qlik Gallery

Qlik Gallery is meant to encourage Qlikkies everywhere to share their progress – from a first Qlik app – to a favorite Qlik app – and everything in-between.

Support

Chat with us, search Knowledge, open a Qlik or Talend Case, read the latest Updates Blog, find Release Notes, and learn about our Programs.

Events

Learn about upcoming Qlik related events, webinars and local meetups.

Groups

Join a Group that is right for you and get more out of your collaborations. Some groups are closed. Closed Groups require approval to view and participate.

Qlik Community

Get started on Qlik Community, find How-To documents, and join general non-product related discussions.

Blogs

This space offers a variety of blogs, all written by Qlik employees. Product and non product related.

Qlik Resources

Direct links to other resources within the Qlik ecosystem. We suggest you bookmark this page.

Qlik Academic Program

Qlik gives qualified university students, educators, and researchers free Qlik software and resources to prepare students for the data-driven workplace.

Community Sitemap

Here you will find a list of all the Qlik Community forums.

Recent Blog Posts

  • Image Not found
    blog

    Qlik Academic Program

    Qlik Academic Program and Penn State Partnership Promotes Student Success!

    Spoiler (Highlight to read)How joining the Qlik Academic Program can enhance your university student offerings!How joining the Qlik Academic Program c... Show More
    Spoiler
    How joining the Qlik Academic Program can enhance your university student offerings!

    Penn State Great Valley.JPG

     

     

     

     

     

     

     

    The Qlik Academic Program partnered with Penn State Great Valley Campus, offering students the opportunity to succeed in the data driven workforce! 

    Partnering with Penn State allowed the university to address and solve the challenges they had in ensuring their students were receiving the most up to date tools and industry opportunities. By partnering with Qlik, Penn State was able to help s
    tudents gain professional software and high-quality
    training from industry experts,  support local industry needs by providing students with data analytics skills, and broaden the university’s educational offering and student involvement.

    Learn more about the benefits of this partnership by visiting  https://bit.ly/3r6LxWA

    If you are interested in learning how the Academic Program can support you or your university you can apply as an educator or student by visiting qlik.com/us/company/academic-program  

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    取り込み済みテーブルからのデータ読み取りと集計処理-Resident Load, Group By, Order By

    はじめにResident Loadを使うことにより、既にQlik Sense内に取り込んだテーブル上のデータを読み取ることができます。Resident Loadは既に読み込んだデータをOrder byでソートする場合や、Crosstable, Join, Intervalmatchなどの各種の変換処... Show More

    はじめに

    Resident Loadを使うことにより、既にQlik Sense内に取り込んだテーブル上のデータを読み取ることができます。Resident Loadは既に読み込んだデータをOrder byでソートする場合や、Crosstable, Join, Intervalmatchなどの各種の変換処理を実行する場合に利用されます。

     

    準備

    このエントリでは、「Qlik Senseロードスクリプトによる変換処理の基礎」が完了していることを前提に作業を進めます。もし作業をまだ実施されていなければ、以下のリンク先の手順に従って作業を実施して下さい。

    >>「Qlik Senseロードスクリプトによる変換処理の基礎」

    以下のデータモデルの中から「売上明細」のテーブルのデータをResident Loadで読み取り、集計などを行って別のテーブルに格納する処理を行います。

     

    image-143.png

    Resident Loadの基本的な使い方 – Group Byの例

    ではまず、以下のスクリプトをロードスクリプトの最後尾に追加してみたいと思います。

    売上集計:
    Load 
    	商品コード,
        Sum(数量) AS 数量集計,
        Sum(販売価格) AS 売上集計
    Resident 売上明細
    Group By 商品コード;

    Resident句の後に「売上明細」を指定し、「売上明細」のテーブルからデータを読み取ります。また、Group By句で「商品コード」を集計軸と指定し、「数量」と「販売価格」をSumで集計してそれぞれ「数量集計」と「売上集計」の項目に格納する処理を行います。結果のデータを「売上集計」のテーブルに格納します。

    上記の処理を追加してロードを実行すると、以下の形で売上集計のテーブルが追加されます。プレビューでデータの内容を確認すると、「商品コード」をキーとして集計値が「数量集計」と「売上集計」の項目に格納されていることが確認できます。

    1-19.jpg

    この様に、Resident Loadを利用することで既にQlik Sense内に取り込んだテーブル上のデータを読み取って集計などの処理を施し、新たなテーブルに格納することができます。

     

    Resident Loadを利用する際の注意点 – Order Byの例

    では、次にResident Loadを利用する際の注意点を幾つかご説明したいと思います。その説明のために、今回は先ほどの処理の代わりにResident Loadを使って「売上明細」のデータを「販売日付」でソートする処理を行ってみたいと思います。

    先ほど追加したスクリプトを削除し、以下のスクリプトをロードスクリプトの最後尾に追加してデータのロードを実行します。

    売上明細_日付ソート済み:
    Load 
        伝票番号,
        販売日付,
        都道府県コード,
        顧客コード,
        商品コード,
        数量,
        販売価格,
        販売原価
    Resident 売上明細
    Order by 販売日付;

    実行後にデータモデルビューアを開いてデータモデルを確認してみます。どの様な状況になっているでしょうか?今回はテーブルが新たに追加されていません。

     

    3-17.jpg

    その原因は「テーブルの自動連結と強制連結-Concatenate」のエントリでご説明したように、Qlik Senseではロードされた複数のテーブルの項目名と項目数が完全に合致する場合、これらのテーブルは一つに纏めるという「自動連結」が行われることが理由です。今回のケースでは元の「売上明細」と新たにResident Loadで作成しようとした「売上明細_日付ソート済み」のテーブルの項目名と項目数が完全に一致するため、全てのデータが既存の「売上明細」に連結されて纏められてしまいました。そのため、プレビューで「売上明細」テーブルの行数を確認すると実行前の倍になっていることが確認できます。

    では、新たなテーブルを作成するにはどのようにすれば良いのでしょうか?「テーブルの自動連結と強制連結-Concatenate」の最後に触れた「Noconcatenate」プレフィックスを利用すると、連結を回避することができます。

    売上明細_日付ソート済み:
    Noconcatenate Load 
        伝票番号,
        販売日付,
        都道府県コード,
        顧客コード,
        商品コード,
        数量,
        販売価格,
        販売原価
    Resident 売上明細
    Order by 販売日付;

    ただし、この処理を実行すると次は以下の様な合成キーの警告が表示されます。これは、今度は「売上明細_日付ソート済み」が新たなテーブルとして作成されたのですが、「売上明細」と項目名が同じなためこれらの2つのテーブル間で合成キーが作成されてしまっているからです。

    image-144.png

     

    この様な合成キーの作成を避けるために、最後に以下の処理を追加して再度ロードを実行します。

    Drop Table 売上明細;
    Rename Table 売上明細_日付ソート済み To 売上明細;

     

    ソート済みデータが新たな「売上明細_日付ソート済み」テーブルに格納された後で、ここではDrop Tableで「売上明細」テーブルを一旦削除し、「売上明細_日付ソート済み」テーブルの名称を元の「売上明細」に戻す処理を行っています。

    そうすると、結果のデータモデルは元の以下の形となっていることが確認できます。

     

    image-145.png

     

    また、データを確認すると、以下の形で「売上明細」のデータが「販売日付」でソートされていることが確認できます。

     

    image251.png

     

    まとめ 

    ここでは、既にQlik Sense内に取り込んだテーブル上のデータを読み取って集計処理などを行うことができるResident Loadの利用方法と、利用する上での注意点についてご説明しました。

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    テーブルの自動連結と強制連結-Concatenate

    はじめに年や月単位で売上データを同じフォーマットで別々のファイルで管理している場合などには、それらのファイルのデータを一つのテーブルに纏める必要があります。Qlik Senseではこれらの複数のファイルの項目名と項目数が完全に合致する場合には自動的に一つのテーブルに連結して纏めてくれます。また、項目... Show More

    はじめに

    年や月単位で売上データを同じフォーマットで別々のファイルで管理している場合などには、それらのファイルのデータを一つのテーブルに纏める必要があります。Qlik Senseではこれらの複数のファイルの項目名と項目数が完全に合致する場合には自動的に一つのテーブルに連結して纏めてくれます。また、項目が異なる場合でも指定を行えば強制的に一つのテーブルに連結することも出来ます。このエントリではそれらのテーブル連結についてご説明します。

     

    準備

    このエントリでは、「Qlik Senseロードスクリプトによる変換処理の基礎」が完了していることを前提に作業を進めます。もし作業をまだ実施されていなければ、以下のリンク先の手順に従って作業を実施して下さい。

    >>「Qlik Senseロードスクリプトによる変換処理の基礎」

    また今回、追加で「売上明細_追加1.xlsx」、「売上明細_追加2.xlsx」の2つのファイルを利用します。以下からダウンロードして下さい。

    >>「追加データ」のダウンロード

     

    自動連結

    Qlik Senseではロードされた複数のテーブルの項目名と項目数が完全に合致する場合、これらのテーブルは一つに纏められます。これを「自動連結」と呼びます。ここでは、既にロード済みの「売上明細」テーブルと同じ項目定義の「売上明細_追加1.xlsx」のファイルを読み込み、データを連結して追加したいと思います。

    まず、「データモデルビューア」を開いて「売上明細」テーブルを選択し、行数を確認します。1,000行格納されていることが確認できます。

    image243.png

     

    ダウンロードした「追加データ」を解凍して保存し、「Qlik Senseロードスクリプトによる変換処理の基礎」でご説明した手順に従って解凍したフォルダをデータ接続先として追加します。

    1-18.jpg

    データ接続定義~「追加データ」の「データを選択」アイコンをクリックして「売上明細_追加1.xlsx」のファイルを選択し、「売上明細_追加1.xlsx」のファイルを読み込むスクリプトを「自動生成セクションタブ」の最後尾に追加します。そしてデータのロードを実行します。

    2-21.jpg

     

    ロードの完了後、「データモデルビューア」で再度「売上明細」テーブルの行数を確認します。1,025行に増えていることを確認して下さい。この様に同じ項目名と項目数を持つファイルは自動的に連結されます。

    image245.png

     

    尚、ここでは実際に実行は行いませんが、以下の形でファイル名に「*(ワイルドカード)」を使うことで複数のファイルを一度にロードすることも可能です。この様にして、同様のフォーマットのファイルはまとめて取り込んで一つのテーブルに連結することも可能です。

    image287.png

    強制連結

    「売上明細_追加2.xlsx」のファイルを同様の手順で追加します。既存の「売上明細」テーブルには「都道府県コード」の項目が含まれていますが、このファイルにはこの項目が含まれていません。まずはこのような場合にそのままデータを取り込むとどのようになるかを確認してみます。

    先ほどと同様の手順で「売上明細_追加2.xlsx」のファイルを読み込むスクリプトを「自動生成セクションタブ」の最後尾に追加し、データのロードを実行します。

    image-141.png

    データロードを実行すると、以下のように「合成キー」が作成された警告が表示されます。

    image247.png

    「データモデルビューア」を確認すると「売上明細」とは別に「売上明細-1」というテーブルが作成され、こちらに先ほどロードしたデータが格納されてしまっていることが確認できます。またそのため、「合成キー」が作成されてしまっています。Qlik Senseでは同名の項目をキーとして自動で紐付けますが、テーブル間で複合キーの関係が存在する場合にはこの「合成キー」が作成されます。(合成キーの詳細については「合成キーと循環参照」のエントリをご参照ください。)

    image248.png

     

    Qlik Senseでは2つのテーブルが全く同じ項目の構造を持たない場合でも、「Concatenate」プレフィックスを利用することで2つのテーブルの結合を強制することができます。先ほど追加したスクリプトに以下の赤字の部分を追加してデータのロードを再度実行します。

    Concatenate(売上明細) LOAD
        伝票番号,
        販売日付,
        顧客コード,
        商品コード,
        数量,
        販売価格,
        販売原価
    FROM [lib://追加データ/売上明細_追加2.xlsx]
    (ooxml, embedded labels, table is 売上明細);

    「データモデルビューア」を確認すると先ほどのテーブルが追加されておらず、売上明細のテーブルにデータが追加されて行数が1,050行となっていることが確認出来ます。

    image249.png

    この時データを確認すると、追加した「売上明細_追加2.xlsx」のデータは「売上明細」テーブルに強制的に結合されていますが、「都道府県コード」を含まないためヌル値となっていることが確認できます。この様に項目が異なる場合でも強制的にテーブルを連結して纏めることが可能です。

    image-142.png

    連結の回避

    上記のケースとは逆に、「Noconcatenate」プレフィックスを使うことで項目名と項目数が完全に合致する複数のテーブルの結合を回避することも出来ます。

    image250.png

    まとめ

    以上、Qlik Senseでの複数ファイルの自動連結および強制連結についてご説明しました。

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    合成キーと循環参照

    ■はじめにQlik Senseでは取り込んだ複数テーブルに同じ名称の項目が存在する場合、自動的にこれらの項目をキーとして関連付けてデータモデルを作成します。この時、「合成キー」や「循環参照」が発生した場合にはデータモデルに問題がある可能性が高いため警告が出力され、データ分析で正しい結果を得るためには... Show More

    ■はじめに

    Qlik Senseでは取り込んだ複数テーブルに同じ名称の項目が存在する場合、自動的にこれらの項目をキーとして関連付けてデータモデルを作成します。この時、「合成キー」や「循環参照」が発生した場合にはデータモデルに問題がある可能性が高いため警告が出力され、データ分析で正しい結果を得るためにはこれらの発生を解消するようデータロードの処理内容を修正する必要性がある場合があります。ここでは「合成キー」や「循環参照」がどのようなものか、またこれらを発生しないようにするにはどうすればよいかの対応方法をご説明します。

    ■データロード時に発生する警告

    データロード実行に発生する代表的な警告として「合成キー」や「循環参照」の2つが挙げられます。

    合成キー

    合成キーが作成された場合、データロード実行時に以下の様な警告が出力されます。

    image-172.png

     

    この警告が発生した場合には、データモデルビューアーを確認すると以下の様に「$Syn」で始まるテーブルが作成されています。以下の例では2つのテーブルが「製品コード」と「製品名」の2つの項目をキーとして関連付けられており、このように2つ以上の項目がキーとなっているものを「合成キー」と呼びます。この合成キーは取り込んだテーブルに共通の項目が2個以上ある場合に発生します。

    image-173.png

    2つのテーブルが複数のキーで関連付けられるべき場合がありますので、合成キーは必ずしも問題であるわけではありませんが、例えば上記の場合ではキーに「製品コード」と「製品名」の2つが含まれてしまっており、データモデル上問題となっています。このような場合にはデータロードの処理内容を修正して合成キーの発生を解消する必要があります。

     

    循環参照

    循環参照が発生した場合には、データロード実行時に以下の様な警告が出力されます。

    image-174.png

     

    「循環参照」とは以下の形でテーブル間の関連付けがループしてしまう状態を指します。この様な形でデータモデルの関連付けがループしている場合には正しく処理されませんので、データモデルを修正する必要があります。

    image-175.png

     

    ■まずはテーブルを1つずつ取り込んでみる

    複数テーブルを一度に取り込んで、合成キーや循環参照が複数個所で発生しまっている場合には、どこが原因でこれらが発生しているのか特定するのが難しい場合があります。その場合には一度に複数のテーブルを取り込むのではなく、一つずつテーブルを追加していって問題個所を特定するアプローチを取るのが最善です。

     

    ■データモデルの修正方法

    その上で、データモデルを修正して「合成キー」や「循環参照」を解消するには、状況や要件に応じて以下の様なアプローチがあります。

     

    項目の削除

    まず一つ目は、項目を取り込み対象外とすることで項目の削除を行う方法です。先ほど合成キーの例では、「製品名」が「製品マスタ」と「売上伝票」両方に含まれてしまっており、冗長となってしまっていました。

    1-22.jpg

     

    この場合には「販売伝票」の「製品名」を削除することで以下の様な形で「製品コード」のみで2テーブル間が正しく紐付けられる形となります。

    image-176.png

    項目の名称変更

    次に以下の様な形で「単価」が「製品マスタ」と「売上伝票」の両方に含まれているケースを見てみたいと思います。ここで、先ほどと同様な形で「単価」の項目を一方のテーブルで削除して対応することも可能ですが、ここでは製品マスタでは「仕入単価」、売上伝票では「売上単価」をそれぞれ指しており、同じ名称で異なる内容のデータが含まれているため両方のデータを残したい場合があります。

    2-23.jpg

    この様な場合は、以下の様な形で項目の名称を変更することで対応が可能です。

    3-20.jpg

     

    複合キーの作成

    以下の例では、「売上伝票」と「顧客マスタ」が「国コード」と「顧客コード」で紐付いています。ここで、顧客が「国コード」と「顧客コード」で一意に特定される場合には、データの紐付きとしては問題なく、集計は正しく行われます。

    5-15.jpg

     

    ただし、データモデルとしてより洗練化するアプローチとしては、複合キーを作成する方法があります。

    複合キーは以下の形で複数のキー項目を区切り文字(以下の例では「|」を利用)で連結して一つのキー項目に纏めたものを指します。

    LOAD
        顧客コード & '|' & 国コード AS 顧客キー, 
        顧客名
    FROM [lib://顧客データ/顧客マスタ.csv]
    (txt, codepage is 932, embedded labels, delimiter is ',', msq);

    そうすると以下の形で複合キーが一つのキー項目に纏められます。

    image-177.png

     

    また、上記の形の複合キーは文字列となっているため、キー項目としては処理効率が良くありません。ベストプラクティスとしては、以下の形でAutoNumber関数を利用すると一意な数値に置き換えられるため、パフォーマンスの観点から最適化されます。

    LOAD
        AutoNumber(顧客コード & '|' & 国コード) AS 顧客キー, 
        顧客名
    FROM [lib://顧客データ/顧客マスタ.csv]
    (txt, codepage is 932, embedded labels, delimiter is ',', msq);

     

    テーブルの結合(Join,ApplyMap)

    また、上記の複合キーで取り上げた例に対応するもう一つのアプローチとして、ApplyMapやJoinを利用してテーブルを結合する方法があります。先ほどの例と同様顧客が「国コード」と「顧客コード」で一意に特定されることを前提に、これらをキーとしてJoinでテーブルを結合した結果が以下の形となります。

    image-178.png

     

    ApplyMapやJoinの手順についての詳細は「テーブルの結合–ApplyMap, Lookup, Join, Keep」のエントリをご参照ください。

     

    Concatenate句を利用したテーブルの強制連結

    Qlik Senseではロードされた複数のテーブルの項目名と項目数が完全に合致する場合、これらのテーブルは一つに纏められます。これを「自動連結」と呼びます。

    ただし、以下のケースでは一方のテーブルには「都道府県コード」の項目が存在しますが、他方のテーブルには存在しないため、2つのテーブルに分かれてしまっているものの複数の共通項目を持っているために合成キーが作成されています。

    6-13.jpg

     

    この様な場合にはConcatenate句を利用してテーブルを強制連結するアプローチが有効です。手順の詳細については「テーブルの自動連結と強制連結-Concatenate」をご参照ください。

     

    リンクテーブルの作成

    売上実績データと、予算データなど、集計と対象となるテーブルが複数存在するようなデータモデルを一般的に「マルチファクト」と呼びますが、それらのテーブルは多くの場合は複数の共通項目を持つため、取り込むと以下の形で合成キーが発生します。

    image_thumb-150.png

     

    そのような場合に対応する方法として挙げられるのがLink Tableです。Link Tableは複数のファクトテーブルを紐付ける全てのキー項目を格納したテーブルで、このLink Tableを中心としてファクトテーブルとディメンションテーブル(マスタテーブル)を紐付ける役割を担います。

    12_thumb-4.jpg

    LinkTableの詳細は「複数のファクトテーブルのリンク-Link Table」で紹介していますので、そちらをご参照ください。

     

    ■まとめ

    このエントリでは、「合成キー」や「循環参照」についてご説明し、これらを解消するための幾つかのアプローチについてご説明しました。

     

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    複数のファクトテーブルのリンク-Link Table

    ■はじめに売上の分析などを行う場合、売上の実績データと、別にファイルで管理している予算・計画のデータを組み合わせて分析を行う場合があります。このような形で集計と対象となるテーブルが複数存在するようなデータモデルを一般的に「マルチファクト」と呼びますが、ここではLink Tableを利用したそのような... Show More

    ■はじめに

    売上の分析などを行う場合、売上の実績データと、別にファイルで管理している予算・計画のデータを組み合わせて分析を行う場合があります。このような形で集計と対象となるテーブルが複数存在するようなデータモデルを一般的に「マルチファクト」と呼びますが、ここではLink Tableを利用したそのようなデータモデルの扱いについてご説明します。

     

    ■シンプルな複数ファクトテーブルの扱い

    では、まずシンプルな例から始めていきたいと思います。以下のロードスクリプトで予算と実績のデータをそれぞれ「予算データ」と「実績データ」テーブルに格納します。

    [予算データ]:
    Load * Inline [
    年月,支店ID,製品ID,予算
    201501,1,1,200
    201501,1,2,120
    201501,2,1,220
    201501,2,2,230
    201502,1,1,120
    201502,1,2,130
    201502,2,1,200
    201502,2,2,80
    201503,1,1,120
    201503,1,2,90
    201503,2,1,150
    201503,2,2,170
    ];
    
    
    [実績データ]:
    Load * Inline [
    年月,支店ID,製品ID,顧客ID,実績
    201501,1,1,1,120
    201501,1,1,2,120
    201501,1,2,1,100
    201501,2,1,1,100
    201501,2,1,2,90
    201501,2,2,2,260
    201502,1,1,1,90
    201502,1,2,2,140
    201502,2,1,1,100
    201502,2,1,2,130
    201502,2,2,1,30
    201502,2,2,2,60
    201503,1,1,2,130
    201503,1,2,2,80
    201503,2,1,1,80
    201503,2,1,2,90
    201503,2,2,1,90
    201503,2,2,2,100
    ];

    このケースでは、「予算」と「実績」が別々のテーブルに格納されていますが、両データとも共通で「年月」「支店ID」「製品ID」を持っており、それらをキーとして「予算」と「実績」を紐付けることができます。

    上記のスクリプトを実行すると、以下のデータモデルが作成されます。「年月」「支店ID」「製品ID」が複合キーとなってしまっていますが、問題なく「予算」と「実績」のデータは紐付いています。

    image-152.png

     

    また、データモデルをもう少し改善させるには、以下の形でJoinを使って2つ目のテーブルを一つ目のテーブルに結合させれば、テーブルが一つに纏まってデータモデルがよりシンプルで分かり易くなります。(Joinの詳細については「テーブルの結合–ApplyMap, Lookup, Join, Keep」のエントリをご参照ください。)

    Join([予算データ])
    Load * Inline [
    年月,支店ID,製品ID,顧客ID,実績
    201501,1,1,1,120
    201501,1,1,2,120
    201501,1,2,1,100
    201501,2,1,1,100
    201501,2,1,2,90
    201501,2,2,2,260
    201502,1,1,1,90
    201502,1,2,2,140
    201502,2,1,1,100
    201502,2,1,2,130
    201502,2,2,1,30
    201502,2,2,2,60
    201503,1,1,2,130
    201503,1,2,2,80
    201503,2,1,1,80
    201503,2,1,2,90
    201503,2,2,1,90
    201503,2,2,2,100
    ];

    image-153.png

    ■複数ファクトテーブルの扱いにおける課題

    上記の形で予算や実績といった複数のファクトテーブルを纏めることができれば手順として非常にシンプルですが、実際のケースではよりデータモデルが複雑となってしまってなかなか上手くいかないケースもあります。

    例えば以下のロードスクリプトを実行してみます。

    [実績データ]:
    Load * Inline [
    年月,支店ID,製品ID,顧客ID,実績
    201501,1,1,1,120
    201501,1,1,2,120
    201501,1,2,1,100
    201501,2,1,1,100
    201501,2,1,2,90
    201501,2,2,2,260
    201502,1,1,1,90
    201502,1,2,2,140
    201502,2,1,1,100
    201502,2,1,2,130
    201502,2,2,1,30
    201502,2,2,2,60
    201503,1,1,2,130
    201503,1,2,2,80
    201503,2,1,1,80
    201503,2,1,2,90
    201503,2,2,1,90
    201503,2,2,2,100
    ];
    
    [支店マスタ]:
    Load * Inline [
    支店ID, 支店名
    1,関東支店
    2,関西支店
    ];
    
    [製品マスタ]:
    Load * Inline [
    製品ID, 製品名, 製品カテゴリID
    1,製品A,1
    2,製品B,2
    ];
    
    [製品カテゴリマスタ]:
    Load * Inline [
    製品カテゴリID,製品カテゴリ名
    1,製品カテゴリA
    2,製品カテゴリB
    ];
    
    [顧客マスタ]:
    Load * Inline [
    顧客ID,顧客名
    1,顧客A
    2,顧客B
    ];

    そうすると、以下のような形でデータモデルに循環参照などが作成されてしまっており、正しく集計がされない状態となってしまっています。これは、「予算データ」は「製品カテゴリID」の項目を含んでいますが、「実績データ」は「製品ID」の項目を含んでおり、「製品カテゴリマスタ」を介してデータモデルがループしてしまう構造となってしまっています。

    image-154.png

    この様に、予算では月、支店、製品カテゴリレベルでデータを持っているが、実績では年月、営業担当、顧客、製品レベルでデータを持っている等、持っているデータの粒度が異なるなどの理由で、先ほど挙げたシンプルな例の様に上手くデータを紐付けれないことがあります。

    また、さらに予算、実績、速報、見込み等といった形でファクトテーブルの数が増えたり、マスタテーブルが多くなったりするとデータモデルが複雑となり、なかなか求める形のものが作成できないケースも起こります。

    そのような場合に活用できるのがここでご紹介するLink Tableです。Link Tableは複数のファクトテーブルを紐付ける全てのキー項目を格納したテーブルで、このLink Tableを中心としてファクトテーブルとディメンションテーブル(マスタテーブル)を紐付ける役割を担います。

    12-5.jpg

     

    ■Link Tableを使った複数テーブルのリンク

    では、実際にLink Tableを作成したいと思います。Link Tableは以下の3つのステップを踏んで作成します。

    • 共通の項目を含んだ複数のファクトテーブルをロード
    • 複数のファクトテーブルから一意な共通項目の値を抽出してLink Tableを作成
    • ディメンションテーブル(マスタデータ)をロード

    また、上記作業を完了してデータが問題なく紐付けられたことを検証した上で、ベストプラクティスの観点から以下の作業を行うことが推奨されます。

    • 複合キーへのAutoNumberの追加

    尚、ここで作成するアプリのサンプルは以下からダウンロードが可能です。

    >>LinkTableのサンプルアプリをダウンロード

     

    共通の項目を含んだ複数のファクトテーブルをロード

    まず複数のファクトテーブルをロードします。この時、以下の2つのことを行う必要があります:

    • データの粒度が異なる場合にはその粒度も合わせる必要があります。先ほどの例では「予算データ」は「製品カテゴリID」、「実績データ」は「製品ID」とそれぞれ異なる階層の項目で集計されていたため、ここではより上位階層の「製品カテゴリID」に粒度を揃えます。
    • 複数ファクトテーブル間を紐付ける共通のキー項目を複合キーとして一つの項目に纏めます。

    まず、予算データをロードします。予算データは「製品カテゴリID」を含んでいるため粒度を揃える作業は不要で、共通キーを複合キーとして纏める処理のみを行います。「|」で区切って「年月」「支店ID」「製品カテゴリID」の項目を連結して「Key」という名前の項目に格納しています。

    //「年月」「支店ID」「製品カテゴリID」の複合キーを作成して予算データをロード
    [予算データ]:
    Load
        年月 & '|' & 支店ID  & '|' &  製品カテゴリID AS Key,
        予算
    Inline [
    年月,支店ID,製品カテゴリID,予算
    201501,1,1,200
    201501,1,2,120
    201501,2,1,220
    201501,2,2,230
    201502,1,1,120
    201502,1,2,130
    201502,2,1,200
    201502,2,2,80
    201503,1,1,120
    201503,1,2,90
    201503,2,1,150
    201503,2,2,170
    ];

    尚、複合キーには以下の様な形でデータが格納されます。

    image-155.png

    次に実績データをロードしますが、その前にApplyMapを使って「製品ID」を「製品カテゴリID」に変換するための「Mapping_Product」という名称のMapping Tableを作成します。(ApplyMapの詳細については「テーブルの結合–ApplyMap, Lookup, Join, Keep」のエントリをご参照ください。)

    //「製品ID」を「製品カテゴリID」に変換するためのMapping Tableを作成
    Mapping_Product:
    Mapping Load 
    	製品ID,
        製品カテゴリID
    Inline [
    製品ID, 製品名, 製品カテゴリID
    1,製品A,1
    2,製品B,2
    ];

    そして、実績データをロードします。ここでも先ほど同様に共通項目を複合キーとして「Key」という項目に格納していますが、「製品カテゴリID」は「製品ID」を引数として「Mapping_Product」のMapping Tableから取得している点に注意して下さい。また、共通項目とは別に、この実績データのみが持っている「製品ID」と「顧客ID」を残しておくことができます。

    //「製品カテゴリID」はApplyMap関数を使ってMapping Tableより取得
    //「年月」「支店ID」「製品カテゴリID」の複合キーを作成して実績データをロード
    [実績データ]:
    Load
        年月 & '|' & 支店ID  & '|' &  ApplyMap('Mapping_Product',製品ID) AS Key,
        製品ID,
        顧客ID,
        実績
    Inline [
    年月,支店ID,製品ID,顧客ID,実績
    201501,1,1,1,120
    201501,1,1,2,120
    201501,1,2,1,100
    201501,2,1,1,100
    201501,2,1,2,90
    201501,2,2,2,260
    201502,1,1,1,90
    201502,1,2,2,140
    201502,2,1,1,100
    201502,2,1,2,130
    201502,2,2,1,30
    201502,2,2,2,60
    201503,1,1,2,130
    201503,1,2,2,80
    201503,2,1,1,80
    201503,2,1,2,90
    201503,2,2,1,90
    201503,2,2,2,100
    ];

     

    複数のファクトテーブルから一意な共通項目の値を抽出してLink Tableを作成

    ここではLink Tableを作成します。Link Tableは全てのファクトテーブルとディメンションテーブル(マスタテーブル)の間の共通項目をキーとして紐付を行う役目を果たします。そのために、このテーブルには以下のデータをファクトテーブルから格納します:

    • 共通項目を1つの項目に纏めて作成した複合キー(ここでの例では「Key」の項目)
    • 全ての共通の項目(ここでの例では「年月」「支店ID」「製品カテゴリID」)

    全てのファクトテーブルから上記データの一意な組み合わせを全てLink Tableに格納すれば、Link Tableを介して全てのファクトテーブルとディメンションテーブル(マスタテーブル)を紐付けることができるということになります。

    予算データと実績データの上記の項目を以下の形でロードします。今回はLink Tableに対してDistinctを指定してロードを行います。

    //予算データの一意な共通項目の値ををLink Tableに格納
    LinkTable:
    Load Distinct
    	年月 & '|' & 支店ID  & '|' &  製品カテゴリID AS Key,
        年月,
        支店ID,
        製品カテゴリID
    Inline [
    年月,支店ID,製品カテゴリID,予算
    201501,1,1,200
    201501,1,2,120
    201501,2,1,220
    201501,2,2,230
    201502,1,1,120
    201502,1,2,130
    201502,2,1,200
    201502,2,2,80
    201503,1,1,120
    201503,1,2,90
    201503,2,1,150
    201503,2,2,170
    ];
    
    //実績データの一意な共通項目の値ををLink Tableに格納
    LinkTable:
    Load Distinct
    	年月 & '|' & 支店ID  & '|' &  ApplyMap('Mapping_Product',製品ID) AS Key,
        年月,
        支店ID,
        ApplyMap('Mapping_Product',製品ID) AS 製品カテゴリID
    Inline [
    年月,支店ID,製品ID,顧客ID,実績
    201501,1,1,1,120
    201501,1,1,2,120
    201501,1,2,1,100
    201501,2,1,1,100
    201501,2,1,2,90
    201501,2,2,2,260
    201502,1,1,1,90
    201502,1,2,2,140
    201502,2,1,1,100
    201502,2,1,2,130
    201502,2,2,1,30
    201502,2,2,2,60
    201503,1,1,2,130
    201503,1,2,2,80
    201503,2,1,1,80
    201503,2,1,2,90
    201503,2,2,1,90
    201503,2,2,2,100
    ];

    上記スクリプトを実行すると以下の内容を含むLink Tableが作成されます。

    image-156.png

    ディメンションテーブル(マスタデータ)をロード

    最後にディメンションテーブル(マスタデータ)をロードします。ここで注意が必要なのは、共通項目としてLink Tableに紐付くマスタテーブルと、個別に特定のファクトテーブルに紐付くマスタテーブル間でキーの紐付きがなされないようにする必要があります。今回の例では個別に実績データのみに紐付く「製品マスタ」に「製品カテゴリID」を含んだままにしてしまうと、共通項目の「製品カテゴリマスタ」とも紐付いてしまうため、循環参照が発生してしまいます。そのため、「製品マスタ」から「製品カテゴリID」を削除してロードしています。

    [支店マスタ]:
    Load * Inline [
    支店ID, 支店名
    1,関東支店
    2,関西支店
    ];
    
    [製品マスタ]:
    Load 
        製品ID, 
        製品名
    Inline [
    製品ID, 製品名, 製品カテゴリID
    1,製品A,1
    2,製品B,2
    ];
    
    [製品カテゴリマスタ]:
    Load * Inline [
    製品カテゴリID,製品カテゴリ名
    1,製品カテゴリA
    2,製品カテゴリB
    ];
    
    [顧客マスタ]:
    Load * Inline [
    顧客ID,顧客名
    1,顧客A
    2,顧客B
    ];

     

    上記スクリプトを実行すると、最終的に以下の形のデータモデルが作成されます。

    image-157.png

     

    複合キーへのAutoNumberの追加

    これまでの作業で「年月」「支店ID」「製品カテゴリID」の3つの項目を纏めて「Key」という名称の1つの項目を作成しました。このように複数のキー項目を一つにまとめたキー項目を「複合キー」と呼びます。

    この複合キーは区切り文字で連結しているため、以下の様な文字列のデータとなっており、キー項目としては処理効率が良くありません。

    image-179.png

    そこで、以下の様な形で複合キーを作成する処理にAutoNumberを追加します。

    AutoNumber(年月 & '|' & 支店ID  & '|' &  製品カテゴリID)

    AutoNumberでは、引数として与えられた値が同一であれば同一アプリ内であれば同じ値で連番を作成します。つまり、キー項目の文字列を以下の形で数値に置き換えることができます。

    image-180.png

     

    この様な形で、複合キーについては全てAutoNumberを追加して数値に置き換えることが推奨されます。

     

    ■まとめ

    予算データと実績データでは持っているデータの粒度が異なるなどの理由で、これらのマルチファクトのデータを上手くデータを紐付けれないことがありますが、そのような場合に活用できるLink Tableの手法をご説明させて頂きました。

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    テーブルの結合–ApplyMap, Lookup, Join, Keep

    ■はじめにQlik Senseでは取り込んだ複数テーブル間は共通の名称を持つ項目をキーとして自動的に紐付けられ、以下の様な形でデータモデルが作成されます。 ただ、演算や変換処理を行うためや管理性を高める目的、もしくはパフォーマンス上の効率化の観点から複数のテーブルを一つのテーブルに結合する処理を行う... Show More

    ■はじめに

    Qlik Senseでは取り込んだ複数テーブル間は共通の名称を持つ項目をキーとして自動的に紐付けられ、以下の様な形でデータモデルが作成されます。

    image-79.png

    ただ、演算や変換処理を行うためや管理性を高める目的、もしくはパフォーマンス上の効率化の観点から複数のテーブルを一つのテーブルに結合する処理を行う場合があります。

    ここではそういったことを行うためのApplyMap, Lookup, Join, Keepといった処理をそれぞれ見ていきたいと思います。ではまず準備として、以下の国データを含んだテーブルを作成します。

    国テーブル:
    Load * Inline [
      国ID,国コード,国名
      1,JP,日本
      2,US,アメリカ合衆国
      3,CN,中国
      4,GB,イギリス
    ];
    image-80.png

    ■値のルックアップ

     

    ApplyMap

    ApplyMapはいわゆるルックアップを行うために利用します。「キー」と「値」の2列を含んだMappingテーブルを事前に作成し、「キー」を持つ他のテーブルデータの取込み時にこのMappingテーブルを参照して「値」を取得することができます。

    ここでは、追加する顧客テーブルに「国ID」を含んでおり、この値を「国名」に置き換える例を扱います。では、既に作成済みの「国」テーブルから、「国ID」と「国名」の列をそれぞれ「キー」と「値」としたMappingテーブルを以下の形で作成します。

    Map_Country:
    Mapping Load 国ID, 国名
    Resident 国テーブル;

    Loadステートメントの先頭に「Mapping」を付加することでMappingテーブルを作成することができます。このテーブルはルックアップを行うために一時的に作成されるテーブルで、ロード処理が完了すると自動的に消去されます。

    次に、以下の形で顧客テーブルを追加します。

    顧客テーブル:
    Load
      ID,
      顧客,
      ApplyMap('Map_Country',国,Null()) AS 国名
    Inline [
      ID,顧客,国
      1,顧客A,1
      2,顧客B,3
      3,顧客C,6
      4,顧客D,2
    ];
    Drop Table 国テーブル;

    ここで、ApplyMapの関数を使い、作成したMappingテーブルを参照して、国のキーから国名を取得する処理を行っています。

    • ApplyMap(‘Mappingテーブル名’, キー名, デフォルト値)

    Mappingテーブル名は「’ (シングルクオート)」で囲み、キー名はクオートで囲まずにこのテーブル自身のキー名(ここでは「顧客テーブル」の「国」)を指定します。また、マッチするキーが無かった場合のデフォルト値としてここでは「Null(ヌル値)」を指定しており、必要に応じて文字列などの指定が可能です。(デフォルト値を指定しない場合にはキー名がそのまま返されます。)

    これらの処理を実行すると、以下の内容の「顧客テーブル」が作成され、国のコード値から国名に変換されていることが確認できます。

    image-81.png

    このApplyMapはこの後ご説明しますLookupやJoinなどの処理と比べてパフォーマンスに優れますので、ApplyMapで対応できる処理についてはApplyMapの利用が推奨されます。

     

    Lookup

    先ほどのApplyMapでは、「国テーブル」から「キー」と「値」の2列を含んだMappingテーブルを作成して参照しましたが、このLookupを利用すると直接「国テーブル」を参照することができます。

    顧客テーブル:
    Load
      ID,
      顧客,
      Lookup('国名','国ID',国,'国テーブル') AS 国名
    Inline [
      ID,顧客,国
      1,顧客A,1
      2,顧客B,3
      3,顧客C,6
      4,顧客D,2
    ];
    
    Drop Table 国テーブル; 

    Lookupの引数については以下となり、「参照元テーブルのキー名」のみは「’ (シングルクオート)」で囲まない点に注意が必要です。

    • Lookup(‘参照先テーブルの取得値を含む列名’ ,’参照先テーブルのキー名’,  参照元テーブルのキー名, ‘参照先テーブル名’)

     

    Join

    次に、2つのテーブルの結合を行うのがJoinになります。Joinを行うには、以下の形でLoadステートメントの先頭に「Join(結合先のテーブル名)」を指定します。

    Join(国テーブル)
    顧客テーブル:
    Load * Inline [
      ID,顧客,国ID
      1,顧客A,1
      2,顧客B,3
      3,顧客C,6
      4,顧客D,2
    ];

    この処理を実行すると、以下の形で結合された一つのテーブルが作成されます。結合のキーは両テーブルに存在する同名の項目が利用され、複数の項目をキーとして結合することも可能です。(結合を行ったキー項目の「国ID」は不要となるため、上記処理後に「Drop Field 国ID;」のステートメントで削除することができます。)

    image-82.png

    Joinに特に指定を行わない場合には、「Outer Join」として処理され、2つのテーブルに存在する全ての行が結合後のテーブルに含まれます。その他に、以下のJoinの方式を指定することが可能です。

    • Inner Join: 両方のテーブルに共通して存在する行のみが結合後のテーブルに含まれます。
    image-83.png

    • Left Join: 左側(1つ目)のテーブルに存在する行のみが結合後のテーブルに含まれます。
    image-84.png

    • Right Join: 右側(2つ目)のテーブルに存在する行のみが結合後のテーブルに含まれます。

    image-85.png

     

    Keep

    KeepもJoinと同様にOuter, Inner, Left, Rigftを指定して利用し、同様の考え方で行が残されます。Joinと異なる点は、Joinではテーブルが結合されましたが、Keepではテーブルは分割されたままとなります。

    例えば、以下の形でRight Keepを指定します。

    Right Keep(国テーブル)
    顧客テーブル:
    Load * Inline [
      ID,顧客,国ID
      1,顧客A,1
      2,顧客B,3
      3,顧客C,6
      4,顧客D,2
    ];

     

    その結果、Joinと異なり以下の形でテーブルは2つ作成されます。

    image-86.png

     

    ただし、Right Joinと同様に右側(2つ目)のテーブルに当たる「顧客テーブル」に存在する行がのみが残されます。

    [顧客テーブル]

    image-87.png

     

    [国テーブル]

    image-88.png

     

    ■まとめ

    ここでは、複数のテーブルを一つのテーブルに結合するために利用される、ApplyMap, Lookup, Join, Keepの処理をご説明しました。

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    集計関数の活用-Sum,Total,Count,Distinct,Avg

    はじめにこれまでの「10分で試すQlik Senseでデータ分析」などのチュートリアルでは主にSumを使ったシンプルな集計を扱ってきました。ここではSum,Total,Count,Distinct,Avgなどの集計関数やオプションを使って、様々な集計の要件に対応するための方法をより細かくご説明します... Show More

    はじめに

    これまでの「10分で試すQlik Senseでデータ分析」などのチュートリアルでは主にSumを使ったシンプルな集計を扱ってきました。ここではSum,Total,Count,Distinct,Avgなどの集計関数やオプションを使って、様々な集計の要件に対応するための方法をより細かくご説明します。

     

    軸を跨った合計の算出-Total

    以下は基本的なSum関数の使い方となり、軸に設定した「商品カテゴリ」毎の売上を集計しています。

     

    image-127.png

    では、ここで「全体の売上に対する各商品カテゴリの売上構成比」を算出したい場合にはどうすれば良いでしょうか?この様な時に利用するのがTotal句となります。以下の形でSum()の中にTotalを利用すると、軸に設定されている「商品カテゴリ」を跨って全体の売上合計を出力します。

    Sum(Total [販売価格])
     

    image-128.png

     

    そして、以下の形とすると、全体の売上に対する各商品カテゴリの売上構成比を算出することができます。

    Sum([販売価格])/Sum(Total [販売価格])

    image-129.png

    また、以下の様に「商品カテゴリ」>「商品名」という形で2軸となっている場合を見てみましょう。ここで先ほどのTotalを使うと、先ほど同様に全体の売上が集計されます。ただ、このような2軸で集計を行った場合、全体の売上ではなく「商品カテゴリの売上合計に対する、カテゴリに含まれる各商品の売上構成比」を算出したい場合があると思います。

    image-130.png

    そのような場合は以下の形でTotalの後に集計を行う単位の軸の名前を<>で括って指定します。そうすると以下の様な形で全体ではなく「商品カテゴリ」ごとの合計を計算して、各商品カテゴリの中での各商品の売上構成比を算出することができます。

    Sum(Total<商品カテゴリ>  [販売価格])

    image-131.png

     

    選択を無視した合計の算出 – SET分析の活用

    次にSET分析を活用して、選択を無視した合計の算出を行う以下の例を見てみます。ここでは、SET分析の「{1}」を指定しており、現在の選択範囲を無視して常に全体のレコードセットを対象として集計を行います。(SET分析については「思い通りのチャート集計を実現–Qlik SenseのSET分析」のエントリをご参照ください。)

    Sum({1} [販売価格])
    image-132.png

     

    そうすると、例えば上記の例では「都道府県」で「東京」のみの絞り込みを行っており、「Sum([販売価格])」にはその選択が適用されますが、「Sum({1} [販売価格])」には適用されないため、「商品カテゴリ毎の東京都での売上」を算出することができます。

    同様に他の項目で絞り込みを行うと、軸に設定した「商品カテゴリ」単位で、全体のレコードに対する選択で絞り込まれたレコードの売上割合を出力することができます。

     

    レコード数のカウント – Count, Count Distinct

    レコード数のカウントはCount関数を使い、例えば以下の形で「伝票番号」の数をカウントして「商品カテゴリ」毎の取引数を集計することができます。

    image-133.png

     

    ただ、Count関数を利用するときには「延べ数」をカウントするのか、「ユニーク数」をカウントするかを意識することが必要な点に注意する必要があります。以下の例では、「Count([販売日付])」とすると延べ数をカウントしているので上記の「伝票番号」をカウントした値と同じになっていますが、「Count(Distinct [販売日付])」とすると重複が排除されてユニークな日付数がカウントされています。

    image.png

    ただここで注意が必要なのは、キーとなっている項目に対するCount関数の利用する場合です。例えば以下の様なデータモデルで「Count([商品コード])」で集計した場合、どの様な集計が行われると期待するでしょうか?「商品コード」がキーとして「商品マスタ」と「売上明細」の両テーブルに含まれているため、数式の定義があいまいになってしまっています。

    image-135.png

     

    このように集計の定義があいまいになってしまうため、このような形でキーとなっている項目をCount関数で利用する場合には、求めていない値が算出されないように常にDistinctを付けた数式で利用することが基本的には推奨されます。

    Count(Distinct [商品コード])

     

    平均値の算出 – Avg, Sum()/Count(), Aggr

    平均値の算出にはAvg関数が用意されており、以下の形で利用します。

    image-136.png

     

    ここで注意が必要なのは「何の平均値を算出しているか?」で、このような形で売上明細テーブルの販売価格に対してAvg関数を利用すると「取引(=伝票番号)毎の平均値」を算出します。

    ただ、多くの場合では取引単位ではなく、例えば月や商品単位などの平均値を算出するようなことを行います。そのような場合には以下の様な数式を利用します。この例では、商品カテゴリでグループ化して、商品毎の平均売上高を算出しています。

    Sum([販売価格])/Count(Distinct [商品名])
    image-137.png

     

    また、商品毎といった形で1層での平均ではなく、商品と都道府県といった形で複数層での平均を算出する場合には、以下の形で文字列を結合することで可能です。

    Sum([販売価格])/Count(Distinct [商品名] & '|' & [都道府県])
    image-138.png

    尚、以上の計算はAggr関数を利用して行うことも可能で、それぞれ以下の形となります。(Aggr関数は「Qlik SenseのAggrによる高度な集計処理」で詳細をご紹介しています。)

    Avg(Aggr(Sum([販売価格]),[商品名]))
    Avg(Aggr(Sum([販売価格]),[商品名],[都道府県]))

     

    まとめ

    以上、Sum,Total,Count,Distinct,Avgなどを使った集計の方法をご説明しました。

    Show Less
  • Image Not found
    blog

    Japan

    Qlik Showcase(日本語版デモアプリサイト)のご利用について

     ■ Qlik Showcaseとは?『Qlik Showcase』はユーザー登録を行って頂くことで、公開された数多くのQlik Sense及びQlikViewの日本語版デモアプリをご自由に試して利用頂くためのパブリックサイトです。 ■ 利用開始方法以下の手順でQlik Showcaseへサインイン... Show More

    showcase_top.jpg

    ■ Qlik Showcaseとは?

    『Qlik Showcase』はユーザー登録を行って頂くことで、公開された数多くのQlik Sense及びQlikViewの日本語版デモアプリをご自由に試して利用頂くためのパブリックサイトです。

    image (1).png

     

    ■ 利用開始方法

    以下の手順でQlik Showcaseへサインイン・ログオンを行います。

     

    ① Qlik Showcaseのサイトへのアクセス:以下のURLをクリックしてサイトにアクセスします。

    https://qtjsc.ap.qlikcloud.com/

    showcase_button.jpg

     

    ② サイトへのサインアップ:サインアップは以下のいずれかの方法で行うことができます。

    1. Googleアカウントによるログイン
    2. Facebookアカウントによるログイン
    3. 新規アカウントの登録(ID、パスワードの登録)

    image_thumb-8.png

     

    ■ サイト利用における基本操作

     

    アプリを開く

    以下の手順でアプリを開きます。

    image_thumb-9.png

     

    スペースの切り替え

    アプリはスペースと呼ばれる単位で、アプリの業界別・目的別にカテゴリ分けされており、スペースを切り替えることでアプリ表示の絞り込みを行うことができます。

    image_thumb-10.png

     

    アプリの検索

    検索ボックスでキーワードを入力して[Enter]を押すことで、アプリの検索を行うことができます。

    image_thumb-11.png

     

    タグでの絞り込み

    アプリにはタグが付加されており、タグでアプリの絞り込みを行うことができます。

    image_thumb-12.png

     

    コレクション(お気に入り)へのアプリの追加

    アプリをコレクションに追加し、ホーム画面やコレクション画面に整理して表示させることができます。

    image_thumb-14.png

     

    ■ サイト利用における注意点

    • サイトの設定上、アプリ上でデータストーリーテリングやブックマークを作成することが可能となっています。ただし、他の利用者の迷惑にならないように他ユーザーへの共有などは控えてください。
    • サイトでのメール送信の機能は無効としていますので、メール送信機能を利用するチャート画像のメール共有などの機能はご利用いただけません。
    • Qlik Showcaseは複数の利用者で共有して利用するコミュニティサイトとなっています。他の利用者の迷惑になる行為や違法行為は行わないでください。当サイト利用における規約や行動規範については利用規約をご参照ください。

     

    ■ 公開デモアプリの募集

    当サイトで公開するデモアプリを募集しています。当サイトのご利用者ご自身が作成されたデモアプリの中で公開可能なアプリをお持ちの場合、当ページ下部の連絡先までぜひご連絡ください。

     

    ■ 利用規約

    当サイトはQlikTech, Inc.の日本法人が運用するQlikコミュニティサイトとして位置付けれ、以下のQlikサイトの利用規約に従って運営されています。

     

    ■ 連絡先

    Qlik社の社員に直接ご連絡頂くか、以下イベントコミュニティサイトの[グループに関するお問い合わせ]よりご連絡ください。(TECH PLAYのアカウント登録が必要です。)

    https://techplay.jp/community/qlik

    image-18.png

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    日本語サンプルアプリ3

    Qlik Sense の日本語サンプルアプリを公開します。 添付のqvfファイルをダウンロードし、Qlik Sense Desktopで開くか、Qlik Sense Businessにアップロードしてご覧いただくことができます。アプリの追加方法は下記をご参照ください。>>Qlik Senseへのアプ... Show More

    Qlik Sense の日本語サンプルアプリを公開します。 添付のqvfファイルをダウンロードし、Qlik Sense Desktopで開くか、Qlik Sense Businessにアップロードしてご覧いただくことができます。

    アプリの追加方法は下記をご参照ください。

    >>Qlik Senseへのアプリの追加方法

     

    Qlik連想技術

    図8.png

    Qlikの連想技術はどのようにビジネスにおいて役立つのでしょうか。クエリーベースのツールと比較しながら、連想技術の特長を確認します。動画もご参照ください。

    >> Qlikの連想技術(デモ動画)

     

    消費者販売の分析

    図7.png

    消費者向け製品の販売会社の分析です。営業員、地域、製品などで分析します。

     

    環境マネジメント(CSR)

    図6.png

    事業活動が地球環境に与える影響を常に認識していなければなりません。企業は、持続可能な社会の実現に向けて、社会的責任を意識した活動を推進することが求められています。そのため、サプライチェーンを含めた環境マネジメントが求められています。本アプリでは、グローバルに拠点を持つ日本の機械メーカーの環境経営について解説します。

     

    サプライチェーンリスクマネジメント

    図5.png

    製品の共有を滞らせないためのサプライチェーンリスクを管理するためのアプリケーションです。部品調達、製造フロー、地理的リスクを分析します。

    >> サプライチェーンリスクマネジメント(デモ動画)

     

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    日本語サンプルアプリ2

    Qlik Sense の日本語サンプルアプリを公開します。 添付のqvfファイルをダウンロードし、Qlik Sense Desktopで開くか、Qlik Sense Businessにアップロードしてご覧いただくことができます。アプリの追加方法は下記をご参照ください。>>Qlik Senseへのアプ... Show More

    Qlik Sense の日本語サンプルアプリを公開します。 添付のqvfファイルをダウンロードし、Qlik Sense Desktopで開くか、Qlik Sense Businessにアップロードしてご覧いただくことができます。

    アプリの追加方法は下記をご参照ください。

    >>Qlik Senseへのアプリの追加方法

     

    調達

    図1.png

    組織が支出と契約を分析する方法を示しています。ユーザーは、発注書、契約範囲、支払いパターンなどを使用して調達を分析し、組織のどの部分が期限内に支払いを行い、残高があるかを判断し、契約のステータスと重要な契約日をモニターできます。

     

    保険金請求の分析

    図2.png

    このアプリにより、ユーザーは自動車保険会社の請求ポートフォリオを分析できます。請求の概要、コスト、期間及び不正請求を発見するための分析を行うサンプルとなっています。

     

    医療のばらつき分析

    図4.png

    さまざまなタイプの医療のばらつきに注目し、不当な医療のばらつきを削減するために何ができるかに焦点を当てています。医療提供者にサービス改善の重要な追加情報を提供する、洗練されたアプローチの可能性を強調しています。

     

    患者費用分析

    図3.png

    このアプリケーションは、患者記録、財務、および運用医療システムから取得したデモデータで開発しました。このアプリを使用すると、医師の費用プロファイルを確認し、個々の患者レベルとそれらの患者の治療に使用されたリソースにドリルダウンできます。 [行動]タブでは、個々のDRG別処置を選択し、臨床医毎の経費と在院期間のばらつきを確認できます。

     

    Show Less
  • Image Not found
    blog

    Qlik Academic Program

    Meet our newest Educator Ambassador César Brochero Castel!

    Today I would like to introduce César Brochero Castel, an Academic Program Educator Ambassador for 2022!Cesar lives in Argentina where he is an Educat... Show More

    Sarah_Miller_0-1649087979261.pngToday I would like to introduce César Brochero Castel, an Academic Program Educator Ambassador for 2022!

    Cesar lives in Argentina where he is an Educator and has been teaching for 7 years at both the Universidad de Palermo and the Universidad Católica. He was inspired to join the Academic Program after discussing with his colleague the difficulties he had using other analytics solutions. During his first several years he taught QlikView and then he migrated to Qlik Sense and has been using that ever since!  In addition to Qlik Sense, he also incorporates the Data Literacy training he is provided as part of his membership. Throughout his course the students are required to develop an analytical application using Qlik Sense in which each student freely explores the data with the aim of finding insights and sharing it with others.  To help them, they use the social network connector available in Qlik Sense and other resources to go beyond normal dashboard reporting.  During his time teaching Cesar has seen several students decide to use Qlik Sense during their employment which gives him great satisfaction to know that he has helped them out in their professional careers.

    Cesar is also the Founder of QuAlytics SpA Chile which provides analytics solutions to South American companies using Qlik Sense. 

    When asking Cesar where he believes the industry is going, he replies “I feel that analytical skills are required today more than ever. Today's world requires people trained in data literacy to face the challenges that the world demands. The data is there today, but we must be able to understand it and get something good out of it. We must all go in that direction.”

    When Cesar is not teaching or building his business, he spends time with his family who just welcomed baby Olivia!

    Educators and students looking for free analytics software and training can apply to the Academic Program today by visiting qlik.com/us/company/academic-program 

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    日本語サンプルアプリ1

    Qlik Sense の日本語サンプルアプリを公開します。 添付のqvfファイルをダウンロードし、Qlik Sense Desktopで開くか、Qlik Sense Businessにアップロードしてご覧いただくことができます。アプリの追加方法は下記をご参照ください。>>Qlik Senseへのアプ... Show More

    Qlik Sense の日本語サンプルアプリを公開します。 添付のqvfファイルをダウンロードし、Qlik Sense Desktopで開くか、Qlik Sense Businessにアップロードしてご覧いただくことができます。

    アプリの追加方法は下記をご参照ください。

    >>Qlik Senseへのアプリの追加方法

     

    CRMダッシュボード

    ヘルプデスク管理 - ダッシュボード _ シート - Qlik Sense - Google Chrome 2022_04_04 20_45_25 (2).png

    CRMデータを分析するダッシュボードです。顧客や商談、営業担当者のパフォーマンスまで分析し、受注金額トップ10の案件や、案件のステータス、顧客の数と案件の規模と受注数の相関関係などを見ることができます。

     

    ヘルプデスク管理

    ヘルプデスク管理 - ダッシュボード _ シート - Qlik Sense - Google Chrome 2022_04_04 21_02_21.png

    社内の従業員がIT部門に依頼した用件のデータを可視化しています。これには、コンピューターのアップグレードの要求や、携帯電話の故障などが含まれます。各用件はIT担当に割り当てられますが、ITマネージャーは、どの用件が優先度が高いか、またはどの用件がまだ担当に割り当てられていないかを認識する必要があります。

     

    財務ツールキット

    図2.png

    このアプリケーションでは、Qlikで解決できる、為替換算、キャッシュフロー、損益分岐点など財務チーム向けの10種類の分析をご紹介します。

     

    人材管理

    図1.png

    従業員の人口統計、離職率、新入社員、退職、給与を分析できます。このアプリのデータのほとんどは人事管理システムから取得されていますが、給与・報酬システム、採用システム、Active Directory(LDAP)、学習管理システム、その他のローカルソース(XLS、CSVなど)などの他のソースからのデータも含まれます。

     

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    Qlik Senseへのアプリの追加方法

    ■ はじめに別の環境で開発されたアプリや、Communityサイトからダウンロードしたサンプルアプリなどを、自分の Qlik Sense 環境に追加して使用することができます。Qlik Senseのアプリケーションは、拡張子 qvf のファイルとして格納されますが、このファイルを自分のQlik Se... Show More

    ■ はじめに

    別の環境で開発されたアプリや、Communityサイトからダウンロードしたサンプルアプリなどを、自分の Qlik Sense 環境に追加して使用することができます。Qlik Senseのアプリケーションは、拡張子 qvf のファイルとして格納されますが、このファイルを自分のQlik Sense環境に取り込む方法をご説明します。

     

    ■クラウド版 Qlik Sense の場合

    ハブ画面右上の[+新規作成]>[アプリをアップロード]をクリックします。

    図1.png

     

    qvfファイルをドラッグアンドドロップするか、フォルダからファイルを指定して、追加先のスペースを指定して、[アップロード]をクリックします。

    図3.png

     

    複数同時に追加することもできます。

     

    ■Qlik Sense Desktop の場合

    ローカルフォルダの「C:\Users\%username%\Documents\Qlik\Sense\Apps」にダウンロードした.qvfファイルを配置することで、Qlik Senseのハブ上にアプリが追加されます。

    Show Less
  • Image Not found
    blog

    Japan

    Qlik アドボケイトのオンラインミートアップ開催報告

    3月16日に Qlik アドボケイトのオンラインミートアップが開催されました。当日は Qlik Luminary も含め、16名の方にご参加いただきました。まず、Qlik より最新の製品アップデートをご紹介しました。  続いて「Qlik 愛を社内外に発信していただく」というアドボケイトに対する Ql... Show More

    3月16日に Qlik アドボケイトのオンラインミートアップが開催されました。当日は Qlik Luminary も含め、16名の方にご参加いただきました。

    まず、Qlik より最新の製品アップデートをご紹介しました。

    スクリーンショット 2022-04-04 13.07.29.pngスクリーンショット 2022-04-04 13.07.47.png

    image.png

     

    続いて「Qlik 愛を社内外に発信していただく」というアドボケイトに対する Qlik からの期待を表明いたしました。

     

     

     

    また、多くの皆さんが抱えている課題を提示いたしました。​

    • 社内で効果的かつ使ってもらえるアプリとは?​
    • Qlik を使ってどのようにビジネスを改善・向上できるか?​
    • 社内でどうしたら Qlik ユーザーが広がるか?​
    • 質の高い分析のためにはデータ基盤はどうあるべきか?

     

    続いて、「アプリ開発(技術)」「教育・拡張」「データ基盤」の3つの分科会に分かれ、Qlik 社員を交えて意見交換を行っていただきました。

    image.png

    スクリーンショット 2022-04-04 13.01.51.png

     

     

     

     

     

     

    さらに、それぞれのトピックにとどまらず、以下のような課題やストプラクティスも共有されました。

    • データセキュリティに関して技術部門と非技術部門で温度差がある
    • 必要なデータを部門が出したがらないサイロ問題
    • 閲覧されたダッシュボードのランキングを公開、上位にはプレゼント提供などでモチベーションアップ
    • アプリを作る際には、現場と要件を固めて一緒に作るようにする

    今後も継続的なミートアップを開催し、意見交換を通じてノウハウを蓄積し、ユーザーのみなさまへフィードバックできる機会も設けていきます。ご期待ください。

     

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    Qlik Senseロードスクリプトによる変換処理の基礎

    ■ はじめにQlik SenseではGUIでのウィザードベースの操作によるデータ追加や管理を行えますが、それに加えてロードスクリプトによる処理も可能です。実際のビジネスの現場では、分析する前に多岐に渡る複雑な変換処理が求められることが多いですが、ロードスクリプトによりそのような要求に対応することが出... Show More

    ■ はじめに

    Qlik SenseではGUIでのウィザードベースの操作によるデータ追加や管理を行えますが、それに加えてロードスクリプトによる処理も可能です。実際のビジネスの現場では、分析する前に多岐に渡る複雑な変換処理が求められることが多いですが、ロードスクリプトによりそのような要求に対応することが出来ます。

    スクリーンショット 2022-04-03 153051.png

     

    ここでは、まずQlik Senseでのデータ管理のコンセプトをご紹介した上で、ロードスクリプトの基本をご説明したいと思います。

     

    ■事前の準備

    このエントリでは、「10分で試すQLIK SENSEでデータ分析」の手順に従って、Qlik Sense Business(SaaS版)の無料トライアルを開始、またはQlik Sense Desktopのインストールを行い、アプリの作成(「売上分析」アプリ)が完了していることを前提に作業を進めます。もし作業をまだ実施されていなければ、以下のリンク先の手順に従って作業を実施して下さい。

    >>「10分で試すQLIK SENSEでデータ分析」

    また今回、追加で「顧客マスタ.xlsx」のファイルを利用します。以下からダウンロードして下さい。

    >> 「顧客マスタ」のダウンロード

     

    ■Qlik Senseのデータ管理のコンセプト

    Qlik Senseでは、取り込むデータの管理方法としては大きく2つの方法があります。

    「データマネージャー」による管理

    GUIでのウィザードベースの操作でデータの追加などを行える管理方法です。技術に精通しないユーザーでも簡単にデータの取り込みなどを行うことができ、これまでのチュートリアルの作業で主に利用してきた方法となります。ファイルのドラッグ&ドロップによるデータの追加(クイックデータロード)もこの方法に含まれます。

    「データマネージャー」へはナビゲーションバーの準備タブからアクセスすることが可能です。

    図1.png

     

    以下の画面上でデータ追加のウィザードを呼び出したり、データの削除を行うことが可能です。

    スクリーンショット 2022-04-03 153503.png

     

     

    「データロードエディタ」による管理

    Qlik Senseでは複雑な変換処理などを実装できる強力なロードスクリプトが提供されています。ロードスクリプトはこの「データロードエディタ」で管理を行うことができます。

    「データロードエディタ」はナビゲーションバーの準備タブから呼び出すことが可能です。

    図2.png

     

    「データマネージャー」でデータが追加された場合には、それに対応するデータ追加のスクリプトが自動的に生成されます。これまで「データマネージャー」で行ったデータの取り込み、変換などの処理が、以下の形でスクリプトとして記述されていることが確認できます。

    スクリーンショット 2022-04-03 153609.png

     

    また、アプリ作成直後に以下の様なメニューが表示されていたかと思いますが、右側の「ファイルおよびその他のソース」が「データマネージャー」による管理、下段の「データロードエディタ」が「データロードエディタ」による管理をそれぞれ選択する形となります。「データカタログ」はクラウド版のみの機能で、ここからもデータの追加が行えます。

    スクリーンショット 2022-04-03 153717.png

     

     

    「データマネージャー」から「データロードエディタ」への管理切り替え

    「データマネージャー」でデータが追加された場合には、「自動生成セクション」タブに対応するスクリプトが追加され、このタブはデータマネージャーの管理下に置かれます。この「自動生成セクション」はロックされ、編集が出来ない状態となっています。

    スクリーンショット 2022-04-03 153848.png

     

    これまでのチュートリアルでは別のタブを追加してスクリプトを追加しましたが、この「自動生成セクション」を編集しない限りでは「データマネージャー」と「データロードエディタ」の両方での管理を併存して行うことが可能です。

    また、「自動生成セクション」のロックを解除して「データロードエディタ」上で編集を行うことも可能です。ただし、一旦ロックを解除するとデータマネージャーを使用してこの「自動生成セクション」に含まれていたデータの管理やこれらのデータに対するプロファイリングが出来なくなりますので注意が必要です。

    ここでは、「自動生成セクション」のロック解除を行って編集をしていきたいと思います。「自動生成セクション」タブを選択し、「ロック解除」ボタンをクリックします。警告が表示されますので、再度「ロック解除」ボタンをクリックします。

    図3.png

     

     

    ■データロードエディタでの基本作業

    顧客マスタのアップロード

    ダウンロードした「顧客マスタ」を新たにクラウド上にアップロードして追加します。まず、「自動生成セクション」タブを開いて「商品マスタ」のロード文の最後尾を改行してカーソルを合わせます。

    図8.png

     

    そして「データロードエディタ」右側の「データ接続」欄の DataFiles フォルダのテーブルアイコンをクリックします。

    図5.png

     

    「ファイルを選択」画面の下部、「ここにファイルをドロップするか、ファイルをクリックして選択します。」欄に、「顧客マスタ」をドラッグアンドドロップします。

    図6.png

     

    データがアップロードされました。

     

    データロードのスクリプト追加

    次に同じ画面で一覧から「顧客マスタ」を選択し「選択」をクリックします。

    図9.png

     

    「スクリプトを挿入」をクリックします。

    図10.png

     

    データロードのスクリプトが挿入されました。

    図11.png

     

     

    ■ロードスクリプトによる変換処理

    ロード文での変換処理

    追加されたスクリプトには先頭にLOAD文が含まれています。このLOAD文に変換処理を追加することで、FROM以下で定義されたファイルから取り込まれたデータに対してQlik Sense内で様々な変換処理を行うことが出来ます。

    スクリーンショット 2022-04-03 165527.png

     

    先ほど取り込んだ顧客マスタのデータ形式は以下の様になっています。

    スクリーンショット 2022-04-03 154812.png

     

    ここでは、このデータに対して以下の変換処理を行います。

    • 「顧客登録番号」の項目名を「顧客コード」に変換
    • 「顧客登録番号」に含まれるデータの先頭の「CU-」の部分を削除
    • 「生年月日」の項目を削除

     

    これらの変換処理の実装後のスクリプトは以下になります。

    顧客マスタ:
    LOAD
        SubField(顧客登録番号, '-', 2) AS 顧客コード,
        氏名,
        性別,
        //生年月日,
        年齢,
        血液型
    FROM [lib://DataFiles/顧客マスタ.xlsx]
    (ooxml, embedded labels, table is 顧客マスタ);


    ここでは以下の様な処理を行っています。

    • SubFieldでは区切り文字を指定してサブストリングを取得することが出来ます。ここでは「-」を区切り文字に指定し、2番目のサブストリング(入力値が「CU-1001」の場合は「1001」の部分)を取得しています。
    • ASにより項目名の指定・変更を行えます。ここでは1項目の名称として「顧客コード」を指定しています。
    • 「生年月日」は「//」でコメントアウトすることで取り込み対象から外しています。


    また、先頭に「顧客マスタ:」を追加していますが、これにより格納先のテーブル名を明示的に指定できます。(既定ではファイル名がテーブル名に設定されます。)

    スクリプトの修正が完了したら右上の「データのロード」ボタンをクリックし、ロードを実行します。

    図12.png

     

    ロードの完了後、「データモデルビューア」を開いて取り込まれたデータを確認します。以下の形で「顧客コード」で「売上明細」と自動的に関連付けがなされ、想定通りに変換されたデータが格納されていることがプレビューから確認できます。

    スクリーンショット 2022-04-03 155537.png

     

     

    先行ロード文

    ここまでロード文に変換処理を追加してきましたが、さらに先頭にロード文を追加し、下のロード文の出力データを入力として数珠つなぎでさらに変換処理を継続することができます。ここでは以下の変換処理をさらに追加したいと思います。

    • 「顧客連番」の項目を追加し、1からの連番を格納
    • 「顧客コード」と「氏名」をハイフンで連結した「顧客コード・氏名」の項目を追加

     

    以下の赤字の部分が追加されたスクリプトになります。

    顧客マスタ:
    LOAD 
        *,
        RowNo() AS 顧客連番,
        顧客コード & '-' & 氏名 AS 顧客コード・氏名
        ;
    LOAD
        SubField(顧客登録番号, '-', 2) AS 顧客コード,
        氏名,
        性別,
        //生年月日,
        年齢,
        血液型
    FROM [lib://DataFiles/顧客マスタ.xlsx]
    (ooxml, embedded labels, table is 顧客マスタ);


    追加された部分では以下の様な処理を行っています。

    • 「*(ワイルドカード)」により下のロード文から入力として受け取った全ての項目をそのまま出力しています。
    • 読み取られているレコードの行数を1から始まる整数で返すRowNo()関数を使い、「顧客連番」の列を生成しています。
    • 「&」で顧客コード、ハイフン、氏名の文字列の連結を行った新たな項目を生成し、「顧客コード・氏名」の項目名称としています。

     

    再度ロード処理を実行します。実行後データを確認すると、以下の形で項目が追加されていることが確認できます。

    スクリーンショット 2022-04-03 155738.png

     

     

    ■まとめ

    Qlik Senseでは複雑な変換処理などを実装できる強力なロードスクリプトが提供されており、このエントリでは基本的なロードスクリプトの利用と変換処理の追加方法をご説明しました。

    Show Less
  • Image Not found
    blog

    Qlik Learning

    Free Live Webinar - Welcome to the Qlik Continuous Classroom

    This introductory webinar explores the Qlik Learning Portal and the different ways to locate and access our content.With over 300 courses, personalize... Show More

    This introductory webinar explores the Qlik Learning Portal and the different ways to locate and access our content.

    With over 300 courses, personalized learning plans and qualifications, let us help you start to become familiar with all the Qlik Continuous Classroom has to offer!

    Host: Kristina Parks
    Language: English
    Session duration: 45 minutes

    Access a recorded session now or register for a 45-minute live sessions held monthly on first Tuesday of the month at 11:00am EDT. Sessions are recorded; register to receive the on-demand recording. 

    Happy Learning!

    Show Less
  • Image Not found
    blog

    Product Innovation

    Delivering Explainable BI – Qlik expands lineage capabilities

    We expanded our lineage capabilities to not only visually show data history by table but also the specific field within a table - starting with end-us... Show More

    lineage4.gif

    We expanded our lineage capabilities to not only visually show data history by table but also the specific field within a table - starting with end-user applications all the way back to the original source. 

    QlikProductUpdates_2-1648560066913.png

    This enhancement also means that if you are using the Qlik Lineage Connectors, you will now be able to see field-level lineage for content within Qlik Sense Client-managed, Tableau, PowerBI and various on-premise data repositories. Remember that any Qlik Sense SaaS customer can use the Qlik Lineage Connectors for free with Qlik-related sources.  


    Since being able to provide field-level lineage helps users establish more trust in the data, we’ve also added a new chart option that enables any user to select a data lineage summary that shows the origin of all related dimensions and measures. 

    QlikProductUpdates_3-1648560165972.png

     

    Finally, we’re also making a distinction between Impact Analysis and Lineage.  Lineage is more focused on looking upstream (ex. “where did this data in the app come from?”) while Impact Analysis is more about looking downstream (ex. “which apps are using this data field?”).  There are now selections for both “Impact Analysis” or “Lineage” within the app drop-down menu.  Selecting “Impact Analysis” (which initially will only be available to Tenant Admins) produces a new screen that shows which databases, apps, files or links are directly or indirectly impacted if the value of a particular field was changed.  

    QlikProductUpdates_4-1648560193824.png

     

    To learn more, visit help.qlik

     

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    ランキング(順位)の表示 – Rank

     はじめにRank関数を利用して、レコードのランキング(順位)を表示させる手順をここでご紹介します。 Rank関数の基本的な使い方Rank関数は以下の様な形で数式を引数に与えて利用すると、ランキングを表示します。Rank(Sum(売上)) 上記の例では、「Sum(売上)」によって集計される売上高の大... Show More

     

    はじめに

    Rank関数を利用して、レコードのランキング(順位)を表示させる手順をここでご紹介します。

     

    Rank関数の基本的な使い方

    Rank関数は以下の様な形で数式を引数に与えて利用すると、ランキングを表示します。

    Rank(Sum(売上))

    image-23.png

     

    上記の例では、「Sum(売上)」によって集計される売上高の大小に従って製品を軸としてランキングを行っています。

     

    2軸以上でのランキング

    先ほどの例では「製品」の1軸のみでランキングを表示しましたが、例えば以下の様な形で「製品カテゴリ」と「製品」といった形で2軸とした場合、上位軸の「製品カテゴリ」でグループ化された中で「製品」のランキングが算出されます。

    image-24.png

     

    これを軸を跨ってランキングを算出するには以下の形で「Total」句を利用します。

    Rank(Total Sum(売上))

    image-25.png

     

    このようにTotal句を利用すると全ての軸を跨ったランキングの表示が行われます。

     

    テキスト表現の表示方法の変更

    先ほどの例では同一順位のレコードの順位は「3-4」(最小値-最大値)という形で表示されていました。Rankには追加で2つの数値を引数として指定することが可能となっており、2つ目の数値の引数で以下の指定可能となっています。(「3-4」の順位の例に有る通り、3は順位上は「最高順位」となりますが、ここでは「最小値」と表現し、「最低順位」の4を「最大値」としていますのでご注意ください。)

    • 0 (デフォルト)  最小値-最大値 (例: 3-4)
    • 1 最小値
    • 2 最初の行は最小値で、その後は空白

     

    2つ目の数値の引数に1を指定すると、以下の形で最小値のみが表示されます。

    Rank(Sum(売上),0,1)

    image-26.png

     

    2つ目の数値の引数に2を指定すると、最初の行は最小値で、その後は空白が表示されます。

    Rank(Sum(売上),0,2)

    image-27.png

     

    数値表現の表示方法の変更

    次にRankの数値の表現方法の変更についてご説明します。RankはQlik Sense内部にDualと呼ばれるデータ形式で「テキスト表現」と「数値表現」の2値がそれぞれのレコードに対して保持されています。この「テキスト表現」については先ほどご説明させて頂きましたが、以下の形でNum関数でRank関数を括ることでRankの数値表現を表示させることができます。

    Num(Rank(Sum(売上)))

    1-1.jpg

     

    出力を確認すると、先ほどのRank関数とは異なる値が表示されていることが確認できます。このNum関数を利用した場合にはDualの数値表現が表示され、ランキング全体の中間値以下の場合は最小値、中間値をまたぐ場合は平均順位、中間値以上の場合は最大値がここに表示されています。

    この数値表現の表示方法については、1つ目の数値の引数で以下の指定可能となっています。

    • 0 (デフォルト)    ランキング全体の中間値以下の場合は最小値、中間値をまたぐ場合は平均順位、中間値以上の場合は最大値
    • 1    最小値
    • 2    平均順位
    • 3    最大値
    • 4    最初の行は最低順位、その後は1ずつ増加

     

    まず1つ目の数値の引数に1を指定すると、以下の形で最小値のみが表示されます。

    Num(Rank(Sum([売上]),1,0))

    image-28.png

     

    引数に2を指定すると、以下の形で平均値のみが表示されます。

    Num(Rank(Sum([売上]),2,0))

    image-29.png

     

    引数に3を指定すると、以下の形で最大値のみが表示されます。

    Num(Rank(Sum([売上]),3,0))

    image-30.png

     

    引数に4を指定すると、最初の行は最小値が表示され、その後は1ずつ増加されます。

    Num(Rank(Sum([売上]),4,0))

    image-31.png

     

    まとめ

    以上、Rank関数を利用してレコードのランキング(順位)を表示させる手順をご説明しました。

     

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    Qlik SenseのAggrによる高度な集計処理

     はじめにQlik SenseではAggr関数という強力な関数が提供されています。このAggr関数を使うことにより、指定した軸と数式に基づいて仮想的なテーブルを作成し、さらにこの仮想的なテーブルに対して集計処理を行って結果を出力する、といった形で多段階の集計処理を行うことができます。これにより、集計... Show More

     

    はじめに

    Qlik SenseではAggr関数という強力な関数が提供されています。このAggr関数を使うことにより、指定した軸と数式に基づいて仮想的なテーブルを作成し、さらにこの仮想的なテーブルに対して集計処理を行って結果を出力する、といった形で多段階の集計処理を行うことができます。これにより、集計処理の柔軟性が高まって、かつ非常に高度な集計処理も行えるようなり、Qlik Senseで実現できる集計処理の幅が広がります。このエントリではこのAggr関数を以下の3つの用法に分けてご説明します。

    • Aggrの基本的な利用方法
    • AggrのCOUNTIFとしての利用
    • Aggrの数式軸での利用

     

    事前の準備

    このエントリでは、「10分で試すQLIK SENSEでデータ分析」で利用した以下の売上データを利用します。

    >>サンプルデータ(売上データ)のダウンロード

    データの取り込み方などの詳細については、「10分で試すQLIK SENSEでデータ分析」をご参照ください。

     

    Aggrの基本的な利用

    「商品カテゴリ」を軸としたテーブルで分析を行う中で、まずは基本的な用途としてどういった場合にAggr関数が必要となるかを見ていきたいと思います。

    まず、「各商品カテゴリに含まれる商品毎の平均売上金額」を算出するには「商品カテゴリ」を軸に設定し、以下の数式を入力します。(平均ということで「Avg([販売価格])」としてしまわない点に注意が必要です。この場合にAvgとするとレコード(=伝票)毎の平均が算出されてしまいます。)

    Sum([販売価格])/Count([商品名])

    image288.png

     

    各カテゴリごとに売上の合計を商品数で割ることで、商品ごとの売上の平均を算出形になっています。

    では次に、「各商品カテゴリに含まれる商品毎の最大平均売上金額」を表示するにはどうすれば良いでしょうか?一旦商品毎の平均を上記の形算出して、その上で最大値を求める多段階の計算ステップが必要で、一筋縄にはいかないように見えます。このような場合にAggr関数を使うことが出来ます。

    Aggr(Sum([販売価格])/Count([商品名]), [商品カテゴリ], [商品名])

     

    これは、[商品カテゴリ], [商品名]の2軸で「Sum([販売価格])/Count([商品コード])」を集計する数式となっています。この数式より一時的に以下の様な一時的な仮想テーブルが作成されることをイメージすれば分かりやすいかと思います。

    image292.png

     

    その上で、上記の数式を以下の形でMax関数で全体を括って最大値を取得します。

    Max(Aggr(Sum([販売価格])/Count([商品名]), [商品カテゴリ], [商品名]))

     

    この数式をテーブルにメジャーとして追加した結果が以下となります。先ほどの仮想テーブルの中の平均売上金額の最大値が「商品カテゴリ」毎に取得・表示されています。

    image290.png

     

    次に、ここで算出した商品毎の平均購入額が最大となる商品はどれかを明らかにするためにその商品名を表示する列を追加したいと思います。

    それを実現するために、以下の形でFirstSortedValue関数を利用します。

    FirstSortedValue([商品名], -Aggr(Sum([販売価格])/Count([商品名]), [商品カテゴリ], [商品名]))

     

    上記数式では先ほどと同様、、Aggrを使って[商品カテゴリ], [商品名]の2軸で「Sum([販売価格])/Count([商品コード])」を算出しています。先頭に「- (マイナス)」が付いているのは、その結果返される数値を降順でソートするように指示するためです。FirstSortedValueにより、この降順でソートされた結果の先頭の値(=最大値)の[商品名]を返しています。結果は以下の様になります。

    image291.png

     

    AggrのCOUNTIFとしての利用

    次に、集計した値が指定した値を超えたレコードのみをカウントする、COUNTIFの用法としてのAggrの使い方をご説明します。

    ここでは、先ほどと同様のAggrの数式を利用して「平均購入金額が\10,000,000を超える商品の数」を商品カテゴリごとにカウントしたいと思います。式は以下となります。

    Sum(If(Aggr(Sum([販売価格])/Count([商品名]), [商品カテゴリ], [商品名])>10000000, 1, 0))

     

    まず、If(Aggr・・により、平均売上金額が10,000,000以上の商品には1、それ以外の商品には0のフラグを付与しています。この数式より一時的に以下の様なイメージのテーブルが作成されます。

    image293.png

     

    そして、上記テーブルの一番右側に追加されたフラグをSum()で商品カテゴリ毎に集計する形となります。新たなテーブルを作成して上記数式をメジャーとして追加した結果は以下となります。

    image294.png

     

    Aggrの数式軸での利用

    「顧客の購入回数」毎に軸を分けて、それぞれの購入回数ごとに「購入金額合計」を集計する棒グラフを作成したいと思います。そのためにはまず「顧客毎の購入回数」を集計し、その購入回数を軸として顧客をグループ化して購入金額合計を算出する必要があります。

    棒グラフを作成して以下の数式を軸に追加します。

    =Aggr(Count(Distinct [伝票番号]), [顧客コード])

     

    そして以下をメジャーに追加します。

    Sum([販売価格])

     

    そしてメジャーの「数値でソート」で昇順のソート設定を行うと、以下の形で「顧客の購入回数毎の購入金額合計」のチャートを作成することが出来ます。

    image252.png

     

    まとめ

    以上、3つの用法に分けてAggr関数の利用方法をご説明しました。Aggr関数を使うことで、ここでご説明したような形で高度な集計処理も行えるようなり、Qlik Senseで実現できる集計処理の幅を広げることが出来ます。

     

    Show Less
  • qlik-nontechnicalblogs.jpg
    blog

    Japan

    テストデータの作成方法–Load InlineとAutogenerate

     はじめに検証のためにアプリやチャートを試しに作ってみたりするに当たって、テストデータ作成は手間がかかる場合が多いのですが、Qlik Senseではロードスクリプトを利用して内部的にテストデータを作成することが可能です。ここではテストデータ作成の幾つかの手法についてご紹介します。 Load .. I... Show More

     

    はじめに

    検証のためにアプリやチャートを試しに作ってみたりするに当たって、テストデータ作成は手間がかかる場合が多いのですが、Qlik Senseではロードスクリプトを利用して内部的にテストデータを作成することが可能です。ここではテストデータ作成の幾つかの手法についてご紹介します。

     

    Load .. Inlineを使ったインラインテーブルの作成

    まずは、テーブル形式のデータを直接入力してデータを作成する方法です。件数の少ないデータを手早く入力してテーブルを作成し、チャートを試しに作ってみるといった場合によく利用される方法です。

    ロードスクリプトに以下を入力してロードを実行します。

    売上データ:
    Load * Inline [
    国,売上,売上原価
    US,100,80
    UK,200,180
    JP,300,250
    ];

     

    ここで、「国,売上,売上原価」はデータのヘッダー、それ以下の「US,100・・」はデータのレコードに当たります。この処理を実行すると、以下の様なテーブルが作成されます。

    image-38.png

     

    また、「Load * Inline 」の「*」はその下の部分で入力した全項目(国,売上,売上原価)をロードするということを示していますが、例えば以下の様な形でこの部分に変換処理を加えることも出来ます。

    売上データ:
    Load
     RowNo() AS NO, //RowNo関数で連番を追加
     *, //Inline内で入力した全項目
     (売上-売上原価) AS 利益 //利益の項目を追加
    Inline [
    国,売上,売上原価
    US,100,80
    UK,200,180
    JP,300,250
    ];

     

    そうすると、以下の様なデータが生成されます。

    image-39.png

    Load .. Autogenerateを利用したデータ生成

    Autogenerateでは生成するレコード件数を指定することができ、件数の多いデータを利用する場合などに利用されます。

    テストデータ:
    Load 
    	RowNo() AS NO,
    	'AAAAA' AS Char
    Autogenerate(10);

     

    上記のスクリプトを実行すると、Autogenerateに指定された件数分の10件のデータが生成されます。ただ、先ほどの「Load .. Inline 」とは違ってレコードは手入力を行わず、どの様なレコードを生成するかをLoadの後に項目定義を入力する必要あり、上記の例ではRowNoによる連番と固定の文字列をレコードの値として定義しています。

    また、文字列、数値、日付などのデータのランダムな値を生成する便利な方法が以下のサイトに掲載されており、ここでご紹介します。

    まず、文字、数値、日付などのランダムな値を生成するための以下の変数を定義します。(文字、上段文字、下段文字については文字列を生成できる様、上記サイトのサンプルにRepeat関数を追加しています。)

    SET vRandChar = Repeat(Chr(Floor(Rand() * 94 ) + 33), $1); //文字
    SET vRandCharU = Repeat(Chr(Floor(Rand() * 26 ) + 65), $1); //上段文字
    SET vRandCharL = Repeat(Chr(Floor(Rand() * 26 ) + 97), $1); //下段文字
    SET vRandNo = Round(Rand() * ($2 - $1)) + $1; //$1 ~ $2の数値
    SET vRandDt = Date(Floor(Rand() * (YearEnd(MakeDate($2)) - MakeDate($1))) + Num(MakeDate($1)), 'YYYY-MM-DD'); // $1 ~ $2の日付
    SET vRandTime = MakeTime(Floor(Rand() * ($2 - $1) + $1), Floor(Rand() * 60), Floor(Rand() * 60)); //$1 ~ $2の時間
    SET vRandND = Round(NormInv(Rand(), $1, $2), $3); //平均 $1, 標準偏差 $2, 精度 $3の正規分布の値

     

    そして、以下の形でロード文を定義します。

    テストデータ:
    Load 
        $(vRandChar(1)) AS 文字,
        $(vRandCharU(5)) AS 上段文字,
        $(vRandCharL(10)) AS 下段文字,
        $(vRandNo(0,100)) AS 数値,
        $(vRandDt(2010,2015)) AS 日付,
        $(vRandTime(0,24)) AS 時間,
        $(vRandND(0,1,.1)) AS 正規分布
    Autogenerate (1000);

     

    そうすると、以下の様なデータを作成することができます。

    image-40.png

     

    また、同じく上記のサイトで紹介されている方法として、Mokarooというサイトで名前、email、性別などの項目を選択して1,000件までのデータを作成することができ、そのデータを活用することもできます。例えば「顧客マスタ」のテストデータ作成をイメージして、以下の様な定義のデータを作成します。

    mockaroo.png

     

    そして、以下の形でMockarooで作成した「顧客マスタ」データを取り込み、ファクト/トランザクションのデータに当たる売上データを先ほどの手順で作成します。

    image-42.png

     

    そうすると、以下の様な形でデータモデルが作成され、より実践に近いデータを利用することができます。

    image-43.png

     

    まとめ

    ここでは、Load .. Inline および Load … Autogenerateを利用したテストデータ作成の方法についてご紹介させて頂きました。

    Show Less