Ana içeriğe geç
Kesit Power BI
Orta · Veri Hazırlama

Pivot, Unpivot ve Transpose: tablonun yönünü değiştirmek

PL-300 maddesi “Pivot, unpivot, and transpose”: üçünün farkı, Diğer ve Seçili sütunlar, toplama işlevi, sütun adını korumak, hangisi model için doğru.

Uygulamada aç, 10 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Üç komut, üç farklı dönüş

KomutNe yaparÖnceSonra
UnpivotSütunları satıra çevirir: genişten uzunaKategori | Oca | ŞubKategori | Ay | Hedef
Pivot sütunuBir sütunun değerlerini başlık yapar: uzundan genişeBölge | Ay | TutarBölge | Oca | Şub | Mar
TransposeTabloyu çevirir: her satır sütun, her sütun satır olurSatır başlıkları soldaColumn1, Column2, ...

Yıldız şemada olgu tablosu uzun olur: ay bir sütundur, ölçü bir sütundur. Unpivot bu yüzden Pivot’tan çok daha sık kullanılır. Pivot’u sunum için ya da satır başına bir nesne gerektiğinde (örneğin her müşteri için tek satır, anahtar ve değer çiftlerinden gelen veri) kullan.

Unpivot: Diğer mi, Seçili mi?

Şeritte üç komut var. Learn’e göre Unpivot columns ve Unpivot other columns yenilemede yeni sütunu da satıra çevirir; Unpivot only selected columns çevirmez. Kod düzeyinde fark şu iki işlevdedir:

Table.UnpivotOtherColumns(Hedefler, {"Kategori"}, "Ay", "Hedef")
Table.Unpivot(Hedefler, {"Oca", "Şub"}, "Ay", "Hedef")

İlki yalnız sabit kalacak sütunu yazar; yeni ay gelince o da satıra döner. İkincisi dönecek sütunları yazar; yeni ay sütun olarak kalır. Aylık büyüyen dosyada Other Columns doğrudur. Unpivot Only Selected ise yeni sütun dönmesin istediğin dosyalarda doğrudur. Hangi kodun üretildiğini formül çubuğundan oku. null hücreler satır üretmez: Giyim’in Mart’ı yok, sonuçta o satır da yoktur.

Pivot: değer listesi ve toplama

Pivot sütunu kutusu değer sütununu ve toplama işlevini sorar. Learn’deki iki durum:

Table.Pivot(
    Table.FromRecords({
        [key = "x", attribute = "a", value = 1],
        [key = "x", attribute = "c", value = 3],
        [key = "x", attribute = "c", value = 5],
        [key = "y", attribute = "a", value = 2]
    }),
    {"a", "b", "c"}, "attribute", "value", List.Max
)

Toplama işlevini silersen, “x ve c” kesişimine iki değer düştüğü için o hücre hata olur. Kesişimi olmayan hücreler null gelir. Şerit değer listesini List.Distinct(t[Ay]) diye yazar; yenilemede yeni ay yeni sütun demektir. Bu modelin sütun yapısını değiştirir, bu yüzden model tablosunda pivot riskli, son sunum adımında daha güvenlidir.

Metin dışı başlıkPivot edilen sütun metin olmalı: sütun adları metindir. Sayı ya da tarih sütununu Pivot’tan önce metne çevir; şerit bunu kendisi ekler.

Transpose: başlık kaybolur

Transpose sütun adlarını siler. Korumak için önce Use headers as first row (Başlıkları ilk satıra indir), sonra Transpose, sonra Use first row as headers:

let
    Indir = Table.DemoteHeaders(Hedefler),
    Cevir = Table.Transpose(Indir),
    Basliklar = Table.PromoteHeaders(Cevir)
in
    Basliklar

Sonuçta her kategori bir sütun, her ay bir satır olur. Transpose genellikle Excel’deki yan yatık özet tablolarını düzeltmek içindir. Çift başlıklı tablo gibi işlerde Unpivot ile birlikte kullanılır.

Alıştırmalara geç (10)