カテゴリー別アーカイブ: 中級

Power AppsでSUM関数を使う~落とし穴にも注意~

【Power Appsでもエクセルと同じようにSUM関数が使えますが注意が必要です】

今回の記事では、Power AppsでSUM関数を使うポイントを各種解説します

結構、Power Appsで集計を行う場合にはSUM関数に限らず注意点があります

Sharepoint リストの全ての行が集計されないことがあるからです

この集計されないポイントについても解説します

SUM関数による合計処理

ワークシート関数ではSum関数の()内に合計範囲を指定しますが、Power Appsでは次のように指定します

Sum(テーブル名,列名)

こちらのテーブル名に指定するものは、データ追加したものになります

実際にSUM関数を使用すると次のような形になります

条件付き合計処理

ワークシート関数のSUMIFS関数のような処理を行うには、SUM関数内でFILTER関数を併せて使用します

Sum(

   Filter(
          T_SUM,
          ProductID="A"           
),
SalesAmount

)

上記の場合には、FILTER関数内でテーブル内の「ProductID列」がAのもののみを抽出しています

委任問題

前述の数字ですが、条件付き合計の数字の方が全体よりも大きくなっています

これは、委任問題により500行までしか集計されていないからです

Power Appsではこの問題がつきものです

一番簡単に解決できる方法がこちらです

設定からデフォルトの設定では500行になっているところを2000行に引き上げます

表示を桁区切りにする方法

Power Appsで数値の表示を桁区切りにする場合には、TEXT関数を使います

TEXT関数の第二引数で”#,###”を指定します

ギャラリーを合計する場合

ギャラリーの内容を「.AllItems」を使用して合計する場合は注意が必要です

上の画像では、スクロールバーがの位置にあります

実はスクロールバーを下に下げていくと合計額が上がっていきます

つまり、必ずしもギャラリーの内容をAllItemsで集計する場合は、SUM関数の出力値は正しくありません

この点は注意が必要です

<まとめ>

今回は、Power AppsでSUM関数を使用する方法を解説しました

ワークシート関数と違い、条件を指定できるのが便利です

但し、データ行数が大きいと正しく集計されない可能性があります

やはり、数値集計はPower BIなどで行うのがおすすめです

Power BIで作成したダッシュボードをPower Apps内でタイルとして共有するなどの方法もあります

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

GroupBy関数を使用をして集約したテーブルをキャンバスに表示する

【テーブルの内容を集約したGalleryを作成しよう!】

Power Appsのキャンバスに、集約したテーブルを表示したい時にはGroupBy関数を使用します

とても簡単なのでぜひ覚えておきましょう!

使用データ

今回使用するのはSharepointリストです

商品や客先別に売上金額が表示されています

1階層での集計

GroupBY関数の文法は次の通りとなります

GroupBy(テーブル名,①列名,②新列名)

①の列名でグループ化の切り口となる列を指定します

②の新列名で集約された内容の表示の仕方を指定します

最初は②の扱いが少し分かりにくいかもしれません

さて、

このGroupBy関数は、下の画像のようにGalleryのItemsで使用します

前述の②の新列名はDATAで指定しています

こちらにSales列を含む「Title」以外の集計される列が含まれる形になります

実はここからが少し工夫が必要となります

①のグループ化の切り口の列をギャラリーに配置するのは、通常と一緒です

ここからTitle別にSalesを集計したいのですが、ここからは少し特殊な方法となります

上の画像のように、②新列名を経由してSales列を指定します

2階層での集計

前述の1階層の集計にもう一つ階層を追加する場合には、GroupBy関数でもう一つ列を追加します

これで新列名の「DATA」が2階層で集計されます

<まとめ>

今回はGroupBy関数を使用して、ピボットテーブルのような集計表をPower Appsのキャンバスに追加する方法を解説しました

ポイントはGroupBy関数をGalleryのItemsで設定した後に、ギャラリー内でGroupBy関数内で新列名にて指定した内容を設定する時です

画像に alt 属性が指定されていません。ファイル名: image-75.png

この場合は、新列名を経由して該当の列を指定します

更なる問題としては、この新列名で設定した内容で並び替えを行う時です

いきなりSortByColumns関数を使用しても、新列名では並び替えができません

この場合には、ボタンを使用してAddColumns関数にて新しい列を追加した方が早いです

変数を2回に分けて設定するのもポイントです

ClearCollect(

myData1,GroupBy(地域データ,"Title","DATA"));
ClearCollect(myData2,
  AddColumns(myData1,"合計",Sum(DATA,Sales)
)

)

実際には、Itemsにて次の関数で並び替えを行います

SortByColumns(myData2,”合計”,SortOrder.Descending)

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村
にほんブログ村 IT技術ブログ VBAへ

検索ボックスを作成する~委任警告対策含む~

【ギャラリーの中身を検索する検索ボックスを関数を使用して作成します!】

今回の記事では、データを一覧表示するギャラリーを検索する検索ボックスを自作します

検索ボックスは関数を使用します。ただ、よくこんな警告メッセージを見ると思います

こちらの警告メッセージは関数の使い方で回避することができます

部分的ではありますが、こちらのメッセージの回避方法も解説します

ポイント

検索ボックスの仕組みは、検索ボックスとは別にギャラリーの「Items」欄に組み込みます

今回の記事ではこの「Items」にSearch関数、もしくはFilter関数を組み込みます

上記の画像では、警告が出ていますが、こちらが委任警告のメッセージです

データソースがSharepointリストの場合、Sharepointリストが検索にはあまり向いていない仕組みのためにこのメッセージがでます

ですので、通常ですと500件までしか表示されません

今回はこちらの委任警告に対する対策も併せて解説を行います

ちなみに、委任警告についてはこちらに分かりやすい記事がありますので参考までにご紹介しておきます

検索ボックスフォームの作成

検索ボックスは四角とアイコンを組み合わせてフォームを作成します

アイコンを入れるとことで検索ボックスらしくなりますが、通常の設定ですと検索アイコンと入力した検索文字が重なってしまいます

こちらはパティングの「左」の値を調整して、入力位置の間隔をあけます

Search関数

Search関数は以下の文法で作成します

=Search(データソース,検索文字,検索対象文字列)

検索文字は検索フォームのテキストボックスを指定します

単にテキストボックスの名前だけを指定するとエラーになりますので注意が必要です

×:txtSearch ⇒ 〇:txtSearch.Text

Filter関数

Search関数と同様にFILTER関数でも検索が行えます

FILTER関数内にはStartsWith関数も組み合わせます

Filter(地域データ,StartsWith(Title,txtSearch.Text))

FILTER関数関数では、データソースから指定条件のものを絞り込んで抽出します

通常はFilter(データソース、列名=××)という感じで指定します

今回は、指定条件の箇所をStartsWith関数(①列名,②指定文字列)で置き換えることで、指定列①の中で指定文字列②ではじまるものを抽出しています

このFilter関数とStartsWith関数の組み合わせだと、何がいいのかというと、委任警告のメッセージが消えます

この辺の仕組みはMicrosoftのHPにも解説されています

詳しく知りたい方はこちらの記事もぜひご確認ください

<まとめ>

今回はSearch関数、Filter関数を使用して検索ボックスを作成する方法を解説しました

委任警告のメッセージについても触れましたが、この問題はPower Appsでは必ずついてくるものです

対策は今回紹介した関数の工夫が望ましいです

ただ、設定で対策も行えることを最後に紹介しておきます

上の画像の箇所は2000まで増やすことができます

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

独自の入力チェックを導入して、アプリ運営を効率化する方法

【入力チェックを効果的に行うことでアプリ運用を適切に行えるようにしましょう!】

アプリを実際に運用しだすと「こんな風に入力しないで・・・」という問題が必ずおきます。この問題はできるだけアプリ内で事前に防げるようにしましょう

ポイント

実はデータカード内にはエラーメッセージ表示用の仕組みがあります

例えば、入力必須の項目が未入力の場合には上記の画像の箇所/ErrorMessage・・・から表示されます

表示は「Parent.Error」で行われます

この記事ではこのParent.Errorをうまく使いこなせるようにします

Parent.Errorはあくまでエラーが発生した時にだけ表示されます

エラーが発生した時の「Parent.Errorのメッセージ」を活かしつつ、エラーが発生する前にもメッセージを表示するためにCoalesce関数という関数を使用します

この関数は空白でない文字列の最初のものを表示します

つまり、エラーが発生していない時は「Parent.Errorでないもの」を表示します

エラーが発生した時には「Parent.Error」を表示します

ちなみに「parent.Error」は上の画像のようにText欄に設定されます

入力必須の設定

入力チェックの一番の基本は「入力必須」です

こちらは下の画像の「詳細設定」で行います

詳細設定の「Required」をtrueにするとチェックが設定されます

「Required」をtrueにした箇所を空欄にしたままSubmit関数を実行するとエラーメッセージがでます

入力範囲のチェック

入力項目の中には「いくら以上で」とか「いくら未満で」といった風に、範囲を制限するケースがあります

このケースではCoalese関数とIF関数を組み合わせます

下は500以上の入力を必須にするケースです

Coalesce(Parent.Error,If((Value(DataCardValue2.Text)<500) && !IsBlank(DataCardValue2.Text),”500以上で入力してください”))

上の数式ではCoalese関数を使用することにより、エラーが実際には発生していない時にはIf関数の中身を表示します

IF関数内では条件を2つ、AND条件で設定しています

①(Value(DataCardValue2.Text)<500) && ②!IsBlank(DataCardValue2.Text)

①は値が500未満という数字の制限です

②は!(否定)を付けることで値がブランクでない場合という制限です

形式のチェック

数字形式の入力が必須の箇所で、文字列が入力されるとエラーが表示されるようにします

今回もCoalese関数とIf関数を組み合わせます

但し、IsMatch関数という関数も組み合わせて使用します

IsMatch関数では事前定義済みパターンというものを設定します

IsMatch関数内でパターンに一致しない場合にはメッセージを表示できるようにします

Coalesce(Parent.Error,If(!IsMatch(DataCardValue5.Text,Match.MultipleDigits) && !IsBlank(DataCardValue5.Text),”数字のみで入力してください”))

ちなみに上記のIF式内では「!(否定)」を使用して!IsMatch(~、つまり~が一致しない場合としています

今回はMultipleDigitsという事前定義済みパターンを使用しています

こちらのパターンは「1 桁以上の数と一致します」というパターンです

MultipleDigits以外にも様々なパターンがありますのでぜひこちらを確認してみてください⇒詳細

<まとめ>

今回はPower Appsで入力チェックを行う方法を解説しました

Parent.Errorと空欄を無視するCoalese関数をうまく活用するのがポイントです

作成したPower Appsを使用してもらっても、入力されたデータが不完全だとあまり意味がありません

今回の入力チェックの仕組みはぜひうまく使いこなしましょう!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

コンボボックスを使いこなす~検索、フィルター他~

【Power Appsとエクセルとの違いの一つがこのコンボボックスです】

今回は、Power Appsをうまく使いこなすの一つである「コンボボックス」について深堀し、幾つかコンボボックスの便利機能を紹介します

Power Appsのコンボボックスの機能は多岐にわたるので、知っているか知っていないかで使い方で大きな差がでてきます

特にコンボボックスはマスターデータと組み合わせて使うと大きな効果を生みます

コンボボックスの表示設定

コンボボックスは「挿入」から設定します

コンボボックスの中身は「Item」から設定します

コンボボックスで中身を選択する際は、参照データも表示することができます

上の画像のように、2列のデータを「Item」に設定します

次に「フィールド」をクリックします

次に表示される画面では「二重線」を選択します

そして「副次的なテキスト」にて選択する列とは別の列を指定します

するとコンボボックス内で2列分の内容が表示されます

ただし、表示は2列でもあくまでコンボボックスで設定されるのは「主要なテキスト」の内容です

2列で表示できるようにすることで、顧客マスターなどのマスターデータをコンボボックスで設定する際にとても便利です

「A001・・・」などのコードが表示されても該当のコードがよくわかりませんので、顧客名も同時に表示するといいでしょう!

検索

コンボボックス内で表示される内容が大量になる場合には、検索が行えるようにするのがいいです

まずはプロパティ画面で「検索の許可」をオンにします

その後「SearchField」を設定します

これでコンボボックス内で検索できるようになります

フィルター

マスターデータをコンボボックスで選択する際、使っていないコードは表示したくない場合があります

例えば、下の画像の「Active」列にてFALSEのコードをコンボボックスに表示したくない場合などです

この場合はコンボボックス「Item」にFilter関数を使います

数式は次の通りとなります

Filter(myCustomer,Active=”TRUE”)

これで、マスターの中で「TRUE」のもののみが表示されます

<まとめ>

今回はコンボボックスの便利機能について解説しました

上記の便利機能を使えると、アプリ内でマスターデータをうまく活用できるようになります

ところで、ドロップダウンリストとコンボボックスはどう違うのでしょうか?

ドロップダウンリスト

一見、違いはありません

ドロップダウンリストの場合は、コンボボックスと違い「複数選択」「検索」などの機能がありません

このコンボボックスとドロップダウンリストの違いはぜひ押さえておきましょう

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Update関数とUpdateIf関数について~レコードの置き換え~

【今回はレコードの置き換えを行うUpdate関数とUpdateIf関数について解説を行います】

過去に解説したPatch関数と今回解説するUpdate関数とUpdateIf関数を組み合わせて活用できるようになると、レコードの扱い格段に強くなれます

Update関数

レコードの全体を置き換える関数になります

この全体の意味合いは、特定の列だけ「置き換えないということがない」といことになります

myCollect

今回はデータソース:myCollect*内で価格が100のもののうち、最初のレコードを置き換えます

*myCollectはGalleryのItemsになり、列は価格:myPriceと数量:myQuantityになります

Update関数の文法は次のようになります

Update(データソース,対象レコード,{列1:値1,列2:値2・・・})

価格が100のもののうち、最初のレコードを対象にするにはFilter関数とFirst関数を使用します

First(Filter(myCollect,myPrice=100))

上記の関数を組み合わせると、今回の関数は次のようになります

Update(myCollect,First(Filter(myCollect,myPrice=100)),{myPrice:0,myQuantity:0})

これで価格が100の最初の行が価格も数量も0に置き換えることができました

UpdateIf関数

UpdateIf関数はエクセルワークシート関数のSumIfs関数と同じように、条件に合うものを一括で処理します

文法は次の通りとなります

UpdateIf(データソース,対象レコード(条件式),{列1:値1,列2:値2・・・})

Update関数とは違い、特定の列だけ置き換えることもできます

今回は価格が100未満のものを一括で0にします

UpdateIf(myCollect,myPrice<100,{myPrice:0,myQuantity:0})

下のGIF画像内で価格が100未満のものが置き換えられています

もちろん、置き換える数量をテキストボックスで指定することもできます

テキストボックス:txtModifyを組み入れたUpdateIf関数の式は次の通りとなります

UpdateIf(myCollect,myPrice<100,{myPrice:0,myQuantity:Value(txtModify.Text)})

価格が100未満のデータがテキストボックスの数字で置き換えられます

<まとめ>

今回はUpdate関数とUpdateIf関数について解説させて頂きました

Patch関数、Update関数、UpdateIf関数はそれぞれ機能が似ているようでそれぞれ違いがあるので注意が必要です

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Collect関数を使用して画面内でデータを自由に扱う

【今回はデータのコレクション/一式を自由自在に画面内で取り扱えるようにします】

前回はPatch関数を使用して、既存のテーブルにデータの挿入や修正を行いました。今回は変数を組み合わせて画面内でデータのコレクションを新たに生み出して取り扱えるようにします

用意すること

挿入用一式

テキストボックス2つ:txtPrice,txtQuantityとボタン2つを準備します

ギャラリー

変数に格納されたデータ一式を一覧化するギャラリー:Gallery1を準備します

修正用一式

ギャラリーで選択された内容を修正するための一式についても、挿入用一式と同様に準備します

但し、ボタンは1つでいいです

Collect関数によるデータ一式の設定

Collect関数によりテーブルではなく、任意に設定する変数:myCollectにデータ一式を格納します

Collect関数の文法は次の通りです

Collect(変数,{変数内の列1:設定したい値1,変数内の列2:設定したい値2})

今回は変数:myCollect内のmyPriceとmyQuantity列にテキストボックスに設定した値を設定します

Collect(myCollect,{myPrice:txtPrice.Text,myQuantity:txtQuantity.Text})

こちらの関数をボタンの「OnSelect」に設定します

*上記は文字列形式での設定になります。数値形式での設定はValue関数を使用します(myPrice:Value(txtPrice.Text))

事前にギャラリーのItemsには「変数:myCollect」を設定しておきます

これでギャラリーに対して、ボタン一つでデータ一式を挿入する仕組みができました

ギャラリーに設定したデータ一式を一括で消去するには「Clear関数」を使用します

ギャラリーの削除ボタン

Remove関数を使用することで、選択行を削除する機能を作成することができます

ゴミ箱ボタンの「OnSelect」に次の数式を入れることでこの機能を実現できます

Remove(myCollect,ThisItem)

選択行の意味合いで「ThisItem」を使用するのがポイントです

Patch関数によるデータ一式の修正

Patch関数による修正の仕組みを作成するのですが、その前に一工夫を行います

ギャラリーで選択された行の内容が一式に反映されるようにします

テキストボックスの「Default」を「Gallery1.Selected.変数の列名」にします

こうすることで、ギャラリーの内容が反映されます

Patch関数については、ボタンの「OnSelect」に次のように設定します

Patch(myCollect,Gallery1.Selected,{myPrice:txtPrice_1.Text,myQuantity:txtQuantity_1.Text})

2番目の引数、対象データをギャラリーの選択行にするのがポイントです

修正用一式の表示を切り替える

ギャラリーの行を選択した時⇒表示、修正ボタン⇒非表示にする仕組みを解説します

こちらは、変数の値をtrueかfalseにすることで調整します

まず、変数の設定を始める前に修正一式をグループ化します

グループ化は一式を選択した後に、下の画像の「ボタン」を押せばできます

グループ化した内容を選択した上で、Visibleを選択してください

通常はtrueが設定されています

今回は該当のグループのVisibleに変数:showUpを設定します

これで変数:showUpを通じて、表示の切り替えを行う準備ができました

次にギャラリーの「OnSelect」にSet関数を設定します

Set(showUp,true)

これで、変数:showUpがtrueになるので修正用一式が表示されます

一方、前述のようにグループの非表示化は修正ボタンでおこないます

こちらに「変数をfalseに設定するSet関数」を設定します

<まとめ>

今回はCollect関数を使用して画面内でデータ一式を追加、修正する方法を解説しました

Collect関数以外にもClear関数、Remove関数、Patch関数も活用しました

これらの関数を組み合わせれば、データの扱いに関してはかなりの事が行えるようになります

ぜひマスターしておきましょう!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Patch関数を使用して、データレコードの追加・修正画面を作成する

【今回はPatch関数を使用して、ギャラリーと併存した便利な追加・修正画面を作成します】

入門で解説したデータ追加・修正画面は一覧と追加・修正画面がわかれていました。今回は一覧から該当データを選択しながら追加・修正できる画面を作成します

上のGIF画像では、右のギャラリー/一覧から選択したデータが左の画面に設定されています

一方、画面左上の+ボタンを押すと左の画面には空欄が設定されます

そして、

SUBMITボタンを押すと、右の画面が「新規用」として設定されている場合には「レコードの新規追加」が行われます

右の画面が「修正用」として設定されている場合にはレコードの修正が行われます

ポイント

変数を使用して、新規と修正とを切り替えます

変数が空白の場合は新規。変数が空白でない場合は修正となります

そして、

前述のようにレコードを追加したり、修正したりするPatch関数の中身も変数が空白かどうかにより変更できるようにします

データソース

今回の記事では、アプリのデータソースはSharePointリストを使用します

テーブル名はIDEAになります

TITLE-1行テキスト

NAME-1行テキスト

DECRIPTION-複数行テキスト

CHOICE-選択肢(NEW,FINISH,STOP)

アプリ画面の用意

「作成」⇒「空のアプリ」からアプリを作成します

アプリの名前を付けたら、まずテキストボックスを3つ用意し、加えてギャラリー*も用意します

*データソースの設定が必要です

加えて「SUBMIT」ボタンも加えます

新規追加の仕組み作成

Patch関数

レコードを追加・修正するPatch関数を作成する前にテキストボックスの名前を整理しておきます

上記のtxtはテキストボックスの意味合いになります

そして、txtの後のTitleはテキストボックスの名称になります

各テキストボックスの内容とCHOICEの内容を、SUBMITボタンの「OnSelect」からPatch関数にて追加することになります

Patch(IDEA,Defaults(IDEA),{Title:txtTitle.Text,NAME:txtNAME.Text,DECRIPTION:txtDESCRIPTION.Text,CHOICE:{Value:”NEW”}})

Patch関数の文法は以下の通りとなります

Patch(データソース,データソース内の対象レコード,{追加及び変更内容/列ベース})

2番目の引数、対象のレコードについては新規の場合は「Defaults(テーブル名)」で設定します

追加する列が「選択肢」の場合には「列名:{Value:“選択肢”}」と設定します

修正の仕組みの作成

選択内容にて変数設定

ギャラリーにて修正をしたい内容を選択した場合には、選択内容が変数/varIdeaに設定されるようにします

こちらは「OnSelect」を選択した上で、SET関数により変数を設定します

各テキストボックスは「Default」を選択した場合、変数に連動して内容が反映されるようにします

新規追加と修正の切り替え

+ボタンを追加し、「OnSelect」にSet関数を設定します

こうすることで+ボタンを押すと、変数:varIDEAに空白が設定されます

変数に空白が設定されると、各テキストボックスも連動して空白が設定されます

ここで前述のSUBMITボタンの「OnSelect」の内容も変更します

対象レコードを指定する引数の箇所を、変数:varIDEAが空白なら新規レコード、空白でない場合はギャラリーで選択したレコードが変数を通じて間接的に反映されるようにします

これで新規追加と修正の切り替えが行えるようになりました

その他

ギャラリーの並び順の変更

レコードの追加や修正があった場合にはSORT関数を使用し、ギャラリーの一番上に表示されるようにして追加と修正内容の確認を行いやすくします

選択箇所の色を変更

ギャラリーの選択箇所の色が変わるようにします

ギャラリーの「TemplateFill」の欄に次のようにIF関数を設定します

If(ThisItem.IsSelected,AliceBlue,RGBA(0, 0, 0, 0))

これで選択箇所がAliceBlue色に変るようになります

複数行テキストの設定

複数行テキストのテキストボックスのモード設定は「複数行」に設定しておきましょう

<まとめ>

今回はPatch関数を使用して、レコードの追加や修正を行う画面を作成しました

変数の内容により、追加と修正を切り替えるのが大きなポイントです

今回の内容は、Patch関数の箇所以外もアプリの内容を充実させるためのヒントが満載です

ぜひ取り組んでみてください

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ