パワークエリシリーズ - ソートランキング
難易度:★ ★。☆☆☆ (1つ星)
スコープ:★ ★ ★ ☆ ☆(3つ星)
概要:
データ分析では、我々は多くの場合、データをソートする必要がある、と私たちは、プロジェクトや製品のランク、または特別な治療の前列に簡単にアクセスを知りたいです。
シナリオ:
ここではいくつかのシナリオは以下のとおりです。
- トップ5の販売に報いるために、
- トップ5の売り上げの合計
- 3の目的を達成するために排除されました
- ....
しかし、ガチョウ、ランキングの様々ながあり、ここでのチートシートです:
- ソート順(ソート1234) - この方法では、ドロー/パラレルを気にすることなく、各ラインデータのソート番号を使用します。
- また、スキップされたランクの形態、ドローと同様の方法を割り当てランクと呼ばれ、次のランク値をスキップ - 標準ゲームランキング(1224ソーティング)。この場合、私たちの価値観は、1,2,2,4,5に変更しました。
- 標準のゲームのランキング方法が似ていますが、スキップ値がドローの前に位置しています - ゲームはランク付けされた後(1334発注)に変更。この場合、我々は1,3,3,4,5を取得します
- 緻密ランキング(1223ソーティング) - このランキング処理において、/描く平行(同じ値)同じ位置を有するが、それは次の値をスキップしないであろう。この場合、我々は1,2,2,3,4,5を持っています。
- (1 / 2.5 / 2.5 / 4ソート)ランキングスコア - このランキングIは見たり使用していません。
だから、どのようにあなたもExcelやパワーBIとでそれらを表示できるように、パワークエリで構築するには?
エクセル最終的な結果は以下の通りであります:
転載へようこそ、元のリンクと著者情報を保持してください。O(∩_∩)Oありがとうございます。
パワークエリシリーズ-ソートのランキング
著者:アンクルマーティンリンク:http://www.cnblogs.com/lizardbi/p/PowerQuery-POWERBI-Ranking.html
データモデル:
ハイライト:
- スキナー索引索引
- どのようなグループ化方法をグループ化します
それをランク付けを達成するために一緒に様々な方法!
添付ファイルをダウンロードした場合、あなたはそれが上図の完全なExcelのテーブルを持っていることがわかります。説明のみSALESDATAテーブルとして選択し、次の2つの手順を簡素化するために:
Excelスプレッドシート内のセルを選択 - >データ - >テーブルから/範囲
アイテムと販売の列を選択し - >右クリック - >追加の列を削除します
負荷接続のみ
これは以下のように、私の唯一の製品名および値が含まれている単純なテーブルを与えました:
プロダクト | セールス |
---|---|
コンビタコンビタ | 500 |
Avitago子供のプロポリス | 400 |
トング仁唐蜂蜜 | 400 |
Aurinda Aurinda | 200 |
することで、健康HEALTH | 100 |
あなたが見ることができるように、売上高はでリストされている降順私たちのランキングを結びつけるための鍵です。
各ランキング法について - 実際には、我々はそれぞれの新しいクエリ(クエリ)のために、以下の方法を開始します。
参照SALESDATAクエリ(参考)
ショーを表現するために、新しいクエリランキング法の名前を変更します
これは我々が参照ステップから得るべきものであるため、この手段は、私は、上記の手順の時間ベースのビューを与えられること。
ランク1:順位(ソート1234)(序ランク)
このランキング法は、作成するのは非常に簡単です:
ソートに「売り」の列に降順
(関係ランク上のアルファベット順に)列をソートするために、「プロジェクト」に昇順
ゴー列を追加する - >インデックス列 - > 1から始まります
ランキングとして、インデックスの名前を変更
再配置の列は、必要に応じて
はい、ちょうど醤油。次のようにそれはちょうど、あなたのデータをソートするために行番号を追加します。
てみましょう ソース= SALESDATA 、 #「削除列」= 表.RemoveColumnsを(ソース、{「順位」、「標準の競争ランキング」、「競争のランキングの改革、」「密、」あなたは「スコアランキング」})、
#「追加インデックス」= 表を。 AddIndexColumn(# "列の削除"、 " インデックス "、1、1 ) で #は、 "追加のインデックス "
結果は以下の通りであります:
Avitago子供用プロポリスとトング仁唐蜂蜜は、第二と第三のリストにランク付けが、Aurinda Aurindaは、売上の面で4位ながら売上高は、それぞれ第二と第三のランキングでは、アルファベット順デフォルト400だった、と。
もちろん、あなたが名前のフラッシュバックにより順位付けと同じ販売に参加することができたときに、トング仁唐は第2位にランク、Avitagoは第3位となりました。
ランク2:標準競争ランキング(1224発注)(標準コンテストランキング)
このメソッドは、値が正しく表示されるようにランク付けするいくつかのパケットの使用を含みます:
ソートに「売り」の列に降順
1から始まるインデックス列を追加
変換に移動 - >グループ
列グループ別売上高
以下を作成します。
使用して、列「インデックス」に「最小」の操作をランキング
使用するデータ「すべての行」の操作
展开项目列
根据需要重新排列列
let Source = SalesData, #"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1), #"Grouped Rows" = Table.Group(#"Added Index", {"销售"}, {{"Rank", each List.Min([Index]), type number}, {"Data", each _, type table}}), #"Expanded Data" = Table.ExpandTableColumn(#"Grouped Rows", "Data", {"產品"}, {"產品"}), #"Reordered Columns" = Table.ReorderColumns(#"Expanded Data",{"產品", "销售", "Rank"}) in #"Reordered Columns"
结果如下:
结果正确地表明,Avitago儿童蜂胶和同仁堂蜂蜜在列表中排名第2和第3,但销售均为400,故此,分别获得第2的排名,而Aurinda 澳琳达(在列表中排名第4)的排名为4,因为并列第二名,故没有第三名。
排名方法3:修改后的比赛排名 (1334排序)(Modified Competition Rank)
要按照修改后的比赛排名方法创建排名,我们需要:
按降序对“销售”列进行排序
添加索引列,从1开始
转到转换->组
按销售列分组
创建以下列:
使用“索引”列上的“最大”运算的排名
使用“所有行”操作的数据
展开项目列
根据需要重新排列列
let Source = SalesData, #"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1), #"Grouped Rows" = Table.Group(#"Added Index", {"销售"}, {{"Rank", each List.Max([Index]), type number}, {"Data", each _, type table}}), #"Expanded Data" = Table.ExpandTableColumn(#"Grouped Rows", "Data", {"產品"}, {"產品"}), #"Reordered Columns" = Table.ReorderColumns(#"Expanded Data",{"產品", "销售", "Rank"}) in #"Reordered Columns"
此排名方法与标准竞争排名之间的唯一区别是,我们使用“索引”列的“最大值”而不是先前方法中使用的“最小值”来创建“排名”列。
结果表明,Avitago儿童蜂胶和同仁堂蜂蜜在列表中排名第2和第3,但销售均为400,故此,分别获得第3的排名,而Aurinda 澳琳达(在列表中排名第4)的排名为4。因为并列第三名,故没有第二名。
排名方法4:密集排名(1223排序)(Dense Rank)
密集排名方法要求更改标准竞争排名方法中步骤的顺序。 也就是说,Group By命令必须在添加Index列之前出现:
按降序对“销售”列进行排序
转到转换->组
按销售列分组
创建以下列:
使用“所有行”操作的数据
添加索引列,从1开始
展开项目列
根据需要重新排列列
let Source = SalesData, #"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1), #"Grouped Rows" = Table.Group(#"Added Index", {"销售"}, {{"Data", each _, type table}}), #"Added Index1" = Table.AddIndexColumn(#"Grouped Rows", "Index", 1, 1), #"Expanded Data" = Table.ExpandTableColumn(#"Added Index1", "Data", {"產品"}, {"產品"}), #"Reordered Columns" = Table.ReorderColumns(#"Expanded Data",{"產品", "销售", "Index"}), #"Renamed Columns" = Table.RenameColumns(#"Reordered Columns",{{"Index", "Rank"}}) in #"Renamed Columns"
此方法将产生以下结果:
结果正确地表明,Avitago儿童蜂胶和同仁堂蜂蜜在列表中排名第2和第3,但销售均为400,
故此,分别获得第3的排名,而Aurinda 澳琳达(在列表中排名第4)的排名为3。
这里与竞赛排名和修改后竞赛排名不同之处在于,
这里不会跳过任何一位的排名数字。
排名方法5:分数排名 (Fractional Rank)
就像我一开始提到的那样,我发现这是最奇怪的排名方法之一。
但是,像上面其他的一样,创建它非常容易。
按降序对“销售”列进行排序
添加索引列,从1开始
转到转换->组
按销售列分组
创建以下列:
使用“索引”列上的“平均”运算的排名
使用“所有行”操作的数据
展开项目列
根据需要重新排列列
let Source = SalesData, #"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1), #"Grouped Rows" = Table.Group(#"Added Index", {"销售"}, {{"Rank", each List.Average([Index]), type number}, {"Data", each _, type table}}), #"Expanded Data" = Table.ExpandTableColumn(#"Grouped Rows", "Data", {"產品"}, {"產品"}), #"Reordered Columns" = Table.ReorderColumns(#"Expanded Data",{"產品", "销售", "Rank"}) in #"Reordered Columns"
结果如下:
这个,你在哪里用到过……?
总结
实际上,可以看到,仅对应用分组Grouping方法时所选择的步骤顺序,并且/或者,汇总时进行一些小的修改即可轻松地更改排名方法:
譬如,有的先加入索引列,有的后加;有的用最大值,有的用最小值,有的用平均值。
但是,
如果你熟悉了这些,任何排序方法都难不倒你了!!
当然我们可以使用Excel公式创建每种排名方法,
但,文中的方法用Power Query实现,
酱,我们可以将结果直接加载到Power Pivot或者Power BI中。
(完)