Grup perhitungan

Berlaku untuk: SQL Server 2019 dan yang lebih baru Analysis Services Azure Analysis Services Fabric/Power BI Premium

Grup penghitungan dapat secara signifikan mengurangi jumlah pengukuran redundan dengan mengelompokkan ekspresi pengukuran umum sebagai item perhitungan. Grup perhitungan didukung dalam model tabular pada tingkat kompatibilitas 1500 dan lebih tinggi.

Keuntungan

Grup penghitungan mengatasi masalah dalam model kompleks di mana mungkin ada proliferasi langkah-langkah redundan menggunakan perhitungan yang sama - paling umum dengan perhitungan inteligensi waktu. Misalnya, analis penjualan ingin melihat total penjualan dan pesanan berdasarkan bulan ke tanggal (MTD), triwulan hingga saat ini (QTD), tahun ke tanggal (YTD), pesanan tahun ke tanggal untuk tahun sebelumnya (PY), dan sebagainya. Pemodel data harus membuat langkah-langkah terpisah untuk setiap perhitungan, yang dapat menyebabkan puluhan langkah. Bagi pengguna, ini dapat berarti harus mengurutkan langkah-langkah sebanyak mungkin, dan menerapkannya satu per satu ke laporan mereka.

Mari kita lihat terlebih dahulu bagaimana grup perhitungan muncul untuk pengguna di alat pelaporan seperti Power BI. Kita kemudian akan melihat apa yang membentuk grup perhitungan, dan bagaimana mereka dibuat dalam model.

Grup penghitungan diperlihatkan dalam melaporkan klien sebagai tabel dengan satu kolom. Kolom tidak seperti kolom atau dimensi umum, sebaliknya mewakili satu atau beberapa penghitungan yang dapat digunakan kembali, atau item perhitungan yang dapat diterapkan ke ukuran apa pun yang sudah ditambahkan ke filter Nilai untuk visualisasi.

Dalam animasi berikut, pengguna menganalisis data penjualan untuk tahun 2012 dan 2013. Sebelum menerapkan grup perhitungan, ukuran dasar umum Penjualan menghitung jumlah total penjualan untuk setiap bulan. Pengguna kemudian ingin menerapkan perhitungan inteligensi waktu untuk mendapatkan total penjualan untuk bulan ke tanggal, kuartal hingga saat ini, tahun ke tanggal, dan sebagainya. Tanpa grup perhitungan, pengguna harus memilih langkah-langkah inteligensi waktu individual.

Dengan grup perhitungan, dalam contoh ini bernama Inteligensi Waktu, saat pengguna menyeret item Perhitungan Waktu ke area filter Kolom , setiap item perhitungan muncul sebagai kolom terpisah. Nilai untuk setiap baris dihitung dari ukuran dasar, Penjualan.

Grup penghitungan sedang diterapkan di Power BI

Grup penghitungan bekerja dengan langkah-langkah DAX eksplisit . Dalam contoh ini, Penjualan adalah ukuran eksplisit yang sudah dibuat dalam model. Grup penghitungan tidak berfungsi dengan langkah-langkah DAX implisit. Misalnya, dalam pengukuran implisit Power BI dibuat saat pengguna menyeret kolom ke visual untuk menampilkan nilai agregat, tanpa membuat pengukuran eksplisit. Saat ini, Power BI menghasilkan DAX untuk pengukuran implisit yang ditulis sebagai perhitungan DAX sebaris - yang berarti ukuran implisit tidak dapat berfungsi dengan grup perhitungan. Properti model baru yang terlihat dalam Model Objek Tabular (TOM) telah diperkenalkan, DiscourageImplicitMeasures. Saat ini, untuk membuat grup penghitungan properti ini harus diatur ke true. Ketika diatur ke true, Power BI Desktop dalam mode Live Connect menonaktifkan pembuatan tindakan implisit.

Grup penghitungan juga mendukung kueri Multidimensional Data Expressions (MDX). Ini berarti, pengguna Microsoft Excel, yang mengkueri model data tabular dengan menggunakan MDX, dapat memanfaatkan sepenuhnya grup perhitungan dalam lembar kerja PivotTable dan bagan.

Cara kerjanya

Sekarang setelah Anda melihat bagaimana grup perhitungan menguntungkan pengguna, mari kita lihat bagaimana contoh grup perhitungan Inteligensi Waktu ditampilkan dibuat.

Sebelum kita masuk ke detailnya, mari kita perkenalkan beberapa fungsi DAX baru khusus untuk grup perhitungan:

SELECTEDMEASURE - Digunakan oleh ekspresi untuk item perhitungan untuk mereferensikan ukuran yang saat ini dalam konteks. Dalam contoh ini, ukuran Penjualan.

SELECTEDMEASURENAME - Digunakan oleh ekspresi untuk item perhitungan untuk menentukan ukuran yang dalam konteks berdasarkan nama.

ISSELECTEDMEASURE - Digunakan oleh ekspresi untuk item perhitungan untuk menentukan ukuran yang dalam konteks ditentukan dalam daftar pengukuran.

SELECTEDMEASUREFORMATSTRING - Digunakan oleh ekspresi untuk item perhitungan untuk mengambil string format pengukuran yang sesuai konteks.

Contoh Inteligensi Waktu

Nama tabel - Inteligensi Waktu
Nama kolom - Perhitungan Waktu
Prioritas - 20

Item penghitungan Inteligensi Waktu

Saat ini

SELECTEDMEASURE()

MTD

CALCULATE(SELECTEDMEASURE(), DATESMTD(DimDate[Date]))

QTD

CALCULATE(SELECTEDMEASURE(), DATESQTD(DimDate[Date]))

YTD

CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))

PY

CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR(DimDate[Date]))

PY MTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "MTD"
)

PY QTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "QTD"
)

PY YTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "YTD"
)

YOY

SELECTEDMEASURE() -
CALCULATE(
    SELECTEDMEASURE(),
    'Time Intelligence'[Time Calculation] = "PY"
)

YOY%

DIVIDE(
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="YOY"
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="PY"
    )
)

Untuk menguji grup perhitungan ini, jalankan kueri DAX di SSMS atau DAX Studio sumber terbuka. Catatan: YOY dan YOY% dihilangkan dari contoh kueri ini.

Kueri Inteligensi Waktu

EVALUATE
CALCULATETABLE (
    SUMMARIZECOLUMNS (
        DimDate[CalendarYear],
        DimDate[EnglishMonthName],
        "Current", CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "Current" ),
        "QTD",     CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "QTD" ),
        "YTD",     CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "YTD" ),
        "PY",      CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY" ),
        "PY QTD",  CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY QTD" ),
        "PY YTD",  CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY YTD" )
    ),
    DimDate[CalendarYear] IN { 2012, 2013 }
)

Pengembalian kueri Inteligensi Waktu

Tabel pengembalian memperlihatkan perhitungan untuk setiap item perhitungan yang diterapkan. Misalnya, lihat QTD untuk Maret 2012 adalah jumlah Januari, Februari, dan Maret 2012.

Pengembalian kueri inteligensi waktu

String format dinamis

String format dinamis dengan grup penghitungan memungkinkan penerapan string format kondisional untuk mengukur tanpa memaksanya mengembalikan string.

Model tabular mendukung pemformatan pengukuran dinamis dengan menggunakan fungsi FORMAT DAX. Namun, fungsi FORMAT memiliki kelemahan untuk mengembalikan string, memaksa langkah-langkah yang jika tidak numerik juga akan dikembalikan sebagai string. Ini bisa memiliki beberapa batasan, seperti tidak berfungsi dengan sebagian besar visual Power BI tergantung pada nilai numerik, seperti bagan.

Di Power BI, String format dinamis untuk pengukuran juga memungkinkan penerapan string format kondisional ke ukuran tertentu tanpa memaksanya mengembalikan string dan tanpa menggunakan grup perhitungan. Untuk mempelajari selengkapnya, lihat String format dinamis untuk pengukuran.

String format dinamis untuk kecerdasan waktu

Jika kita melihat contoh Inteligensi Waktu yang ditunjukkan di atas, semua item perhitungan kecuali YOY% harus menggunakan format pengukuran saat ini dalam konteks. Misalnya, YTD yang dihitung pada ukuran basis Penjualan harus mata uang. Jika ini adalah grup perhitungan untuk sesuatu seperti ukuran dasar Pesanan, formatnya akan numerik. YOY%, bagaimanapun, harus menjadi persentase terlepas dari format ukuran dasar.

Untuk YOY%, kita dapat mengambil alih string format dengan mengatur properti ekspresi string format ke 0,00%;-0,00%; 0,00%. Untuk mempelajari selengkapnya tentang properti ekspresi string format, lihat Properti Sel MDX - FORMAT Konten STRING.

Dalam visual matriks ini di Power BI, Anda akan melihat Penjualan Saat Ini/YOY dan Pesanan Saat Ini/YOY mempertahankan string format ukuran dasar masing-masing. Penjualan YOY% dan Pesanan YOY%, namun, mengambil alih string format untuk menggunakan format persentase .

Kecerdasan waktu dalam visual matriks

String format dinamis untuk konversi mata uang

String format dinamis menyediakan konversi mata uang yang mudah. Pertimbangkan model data Adventure Works berikut. Ini dimodelkan untuk konversi mata uang satu-ke-banyak seperti yang didefinisikan oleh jenis Konversi.

Tingkat mata uang dalam model tabular

Kolom FormatString ditambahkan ke tabel DimCurrency dan diisi dengan string format untuk masing-masing mata uang.

Format kolom string

Untuk contoh ini, grup perhitungan berikut kemudian didefinisikan sebagai:

Contoh Konversi Mata Uang

Nama tabel - Konversi Mata Uang
Nama kolom - Perhitungan Konversi
Prioritas - 5

Item perhitungan untuk Konversi Mata Uang

Tidak Ada Konversi

SELECTEDMEASURE()

Mata Uang Terkonversi

IF(
    //Check one currency in context & not US Dollar, which is the pivot currency:
    SELECTEDVALUE( DimCurrency[CurrencyName], "US Dollar" ) = "US Dollar",
    SELECTEDMEASURE(),
    SUMX(
        VALUES(DimDate[Date]),
        CALCULATE( DIVIDE( SELECTEDMEASURE(), MAX(FactCurrencyRate[EndOfDayRate]) ) )
    )
)

Format ekspresi untai (karakter)

SELECTEDVALUE(
    DimCurrency[FormatString],
    SELECTEDMEASUREFORMATSTRING()
)

Catatan

Ekspresi pilihan untuk grup perhitungan saat ini dalam pratinjau dan dapat digunakan untuk menerapkan konversi mata uang otomatis pada grup perhitungan, menghapus kebutuhan untuk memiliki dua item perhitungan terpisah.

Ekspresi string format harus mengembalikan string skalar. Ini menggunakan fungsi SELECTEDMEASUREFORMATSTRING baru untuk kembali ke string format ukuran dasar jika ada beberapa mata uang dalam konteks filter.

Animasi berikut menunjukkan konversi mata uang format dinamis dari pengukuran Penjualan dalam laporan.

String format dinamis konversi mata uang diterapkan

Ekspresi pilihan (pratinjau)

Ekspresi pilihan adalah properti opsional yang ditentukan untuk grup perhitungan. Ada dua jenis ekspresi pilihan:

  • multipleOrEmptySelectionExpression. Ekspresi pilihan ini diterapkan ketika beberapa item penghitungan telah dipilih, item perhitungan yang tidak ada telah dipilih atau ketika pilihan yang bertentangan telah dibuat.
  • noSelectionExpression. Ekspresi pilihan ini diterapkan ketika grup perhitungan tidak difilter.

Kedua ekspresi pilihan ini juga memiliki ekspresi string format dinamis format FormatStringDefinition.

Singkatnya, pada grup perhitungan berikut ini dapat ditentukan:

...
"calculationGroup": {
  "multipleOrEmptySelectionExpression": {
    "expression": "",
    "formatStringDefinition": {...}
  },
  "noSelectionExpression": {
    "expression": "",
    "formatStringDefinition": {...}
  }
...
}

Catatan

Ekspresi ini, jika ditentukan, hanya diterapkan untuk situasi tertentu yang disebutkan. Pilihan untuk item perhitungan tunggal tidak terpengaruh oleh ekspresi ini.

Berikut adalah gambaran umum ekspresi ini dan perilaku defaultnya jika tidak ditentukan:

Jenis pilihan Ekspresi pilihan tidak ditentukan (default) Ekspresi pilihan ditentukan
Pilihan tunggal Pilihan diterapkan Pilihan diterapkan
Beberapa pilihan Grup penghitungan tidak difilter Mengembalikan hasil evaluasi multipleOrEmptySelectionExpression
Pilihan kosong Grup penghitungan tidak difilter Mengembalikan hasil evaluasi multipleOrEmptySelectionExpression
Tidak ada pilihan Grup penghitungan tidak difilter Mengembalikan hasil evaluasi noSelectionExpression

Pilihan Beberapa atau Kosong

Jika beberapa pilihan pada grup perhitungan yang sama dibuat, grup perhitungan akan mengevaluasi dan mengembalikan hasil multipleOrEmptySelectionExpression jika ditentukan. Jika ekspresi ini belum ditentukan, grup penghitungan akan mengembalikan hasil berikut:

SELECTEDMEASURE()

Sebagai contoh, mari kita lihat grup perhitungan yang disebut MyCalcGroup yang memiliki multipleOrEmptySelectionExpression yang dikonfigurasi sebagai berikut:

IF (
ISFILTERED ( 'MyCalcGroup' ),
    "Filters: " 
         & CONCATENATEX ( 
  	            FILTERS ( 'MyCalcGroup'[Name] ),
            'MyCalcGroup'[Name], 
            ", "
     	   )
)

Sekarang, bayangkan pilihan berikut pada grup perhitungan:

EVALUATE
{
    CALCULATE (
        [MyMeasure],
        'MyCalcGroup'[Name] = "item1" || 'MyCalcGroup'[Name] = "item2"
    )
}

Di sini, kita memilih dua item pada grup perhitungan, "item1" dan "item2". Ini adalah beberapa pilihan dan karenanya multipleOrEmptySelectionExpression dievaluasi dan mengembalikan hasil berikut: "Filter: item1, item2".

Selanjutnya, ambil pilihan berikut pada grup penghitungan:

EVALUATE
{
    CALCULATE (
        [MyMeasure],
        'MyCalcGroup'[Name] = "item4" -- item4 does not exists
    )
}

Ini adalah contoh pilihan kosong, karena "item4" tidak ada pada grup perhitungan ini. Oleh karena itu, multipleOrEmptySelectionExpression dievaluasi dan mengembalikan hasil berikut: "Filter: ".

Tidak ada pilihan

NoSelectionExpression pada grup perhitungan akan diterapkan jika grup perhitungan belum difilter. Ini sebagian besar digunakan untuk melakukan tindakan default tanpa perlu pengguna untuk mengambil tindakan sambil tetap memberikan fleksibilitas kepada pengguna untuk mengambil alih tindakan default. Misalnya, mari kita lihat konversi mata uang otomatis dengan Dolar AS sebagai mata uang pivot pusat.

Kita dapat menyiapkan grup perhitungan dengan noSelectionExpression berikut:

IF (
    //Check one currency in context & not US Dollar, which is the pivot currency:
    SELECTEDVALUE (
        DimCurrency[CurrencyName],
        "US Dollar"
    ) = "US Dollar",
    SELECTEDMEASURE (),
    SUMX (
        VALUES ( DimDate[DateKey] ),
        CALCULATE (
            DIVIDE ( SELECTEDMEASURE (), MAX ( FactCurrencyRate[EndOfDayRate] ) )
        )
    )
)

Kami juga akan mengatur formatStringDefinition untuk ekspresi ini:

SELECTEDVALUE(
  DimCurrency[FormatString],
  SELECTEDMEASUREFORMATSTRING()
)

Sekarang, jika tidak ada mata uang yang dipilih semua mata uang akan secara otomatis dikonversi ke mata uang pivot (Dolar AS) seperlunya. Selain itu, Anda masih dapat memilih mata uang lain untuk dikonversi ke mata uang tersebut tanpa harus beralih item perhitungan seperti yang harus Anda lakukan tanpa noSelectionExpression.

Prioritas

Prioritas adalah properti yang ditentukan untuk grup perhitungan. Ini menentukan urutan grup perhitungan dikombinasikan dengan ukuran yang mendasar saat menggunakan SELECTEDMEASURE() dalam item perhitungan.

Contoh prioritas

Mari kita lihat contoh sederhana. Model ini memiliki ukuran dengan nilai tertentu 10, dan dua grup perhitungan, masing-masing dengan satu item perhitungan. Kita akan menerapkan kedua item perhitungan grup penghitungan ke ukuran. Ini adalah cara kami menyiapkannya:

'Measure group'[Measure] = 10

Grup perhitungan pertama adalah 'Calc Group 1 (Precedence 100)' dan item perhitungan adalah 'Calc item (Plus 2)':

'Calc Group 1 (Precedence 100)'[Calc item (Plus 2)] = SELECTEDMEASURE() + 2

Grup perhitungan kedua adalah 'Calc Group 2 (Precedence 200)' dan item perhitungan adalah 'Calc item (Times 2)':

'Calc Group 2 (Precedence 200)'[Calc item (Times 2)] = SELECTEDMEASURE() * 2

Anda dapat melihat grup perhitungan 1 memiliki nilai prioritas 100, dan grup perhitungan 2 memiliki nilai prioritas 200.

Dengan menggunakan SQL Server Management Studio (SSMS) atau alat eksternal dengan fitur baca-tulis XMLA, seperti Editor Tabular sumber terbuka, Anda dapat menggunakan skrip XMLA untuk membuat grup perhitungan dan mengatur nilai prioritas. Di sini kami menambahkan "Calc group 1 (Precedence 100)":

{
  "createOrReplace": {
    "object": {
      "database": "CHANGE TO YOUR DATASET NAME",
      "table": "Calc group 1 (Precedence 100)"
    },
    "table": {
      "name": "Calc group 1 (Precedence 100)",
      "calculationGroup": {
        "precedence": 100,
        "calculationItems": [
          {
            "name": "Calc item (Plus 2)",
            "expression": "SELECTEDMEASURE() + 2",
          }
        ]
      },
      "columns": [
        {
          "name": "Calc group 1 (Precedence 100)",
          "dataType": "string",
          "sourceColumn": "Name",
          "sortByColumn": "Ordinal",
          "summarizeBy": "none",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        },
        {
          "name": "Ordinal",
          "dataType": "int64",
          "isHidden": true,
          "sourceColumn": "Ordinal",
          "summarizeBy": "sum",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        }
      ],
      "partitions": [
        {
          "name": "Partition",
          "mode": "import",
          "source": {
            "type": "calculationGroup"
          }
        }
      ]
    }
  }
}

Dan skrip ini menambahkan "Calc group 2 (Precedence 200)":

{
  "createOrReplace": {
    "object": {
      "database": "CHANGE TO YOUR DATASET NAME",
      "table": "Calc group 2 (Precedence 200)"
    },
    "table": {
      "name": "Calc group 2 (Precedence 200)",
      "calculationGroup": {
        "precedence": 200,
        "calculationItems": [
          {
            "name": "Calc item (Times 2)",
            "expression": "SELECTEDMEASURE() * 2"
          }
        ]
      },
      "columns": [
        {
          "name": "Calc group 2 (Precedence 200)",
          "dataType": "string",
          "sourceColumn": "Name",
          "sortByColumn": "Ordinal",
          "summarizeBy": "none",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        },
        {
          "name": "Ordinal",
          "dataType": "int64",
          "isHidden": true,
          "sourceColumn": "Ordinal",
          "summarizeBy": "sum",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        }
      ],
      "partitions": [
        {
          "name": "Partition",
          "mode": "import",
          "source": {
            "type": "calculationGroup"
          }
        }
      ]
    }
  }
}

Dalam Power BI Desktop, kami memiliki visual kartu yang menunjukkan ukuran dan pemotong untuk setiap grup perhitungan dalam tampilan laporan:

Mengukur ekspresi terpisah grup.

Ketika kedua pemotong dipilih, kita perlu menggabungkan ekspresi DAX. Untuk melakukannya, kita mulai dengan item perhitungan prioritas tertinggi, 200, lalu mengganti argumen SELECTEDMEASURE() dengan tertinggi berikutnya, 100.

Jadi, item perhitungan prioritas tertinggi ekspresi DAX kami adalah:

SELECTEDMEASURE() * 2 

Dan item perhitungan prioritas tertinggi kedua ekspresi DAX kami adalah:

SELECTEDMEASURE() + 2 

Sekarang mereka digabungkan dengan mengganti bagian SELECTEDMEASURE() dari item perhitungan prioritas tertinggi dengan item perhitungan prioritas tertinggi berikutnya, seperti ini:

( SELECTEDMEASURE() + 2 ) * 2

Kemudian jika ada lebih banyak item perhitungan yang kita lanjutkan sampai kita sampai ke ukuran yang mendasar. Hanya ada dua grup perhitungan dalam model ini, jadi kami sekarang mengganti SELECTEDMEASURE() dengan ukuran itu sendiri, seperti ini:

( ( [Measure] ) + 2 ) * 2

Sebagai kami Measure = 10, ini sama dengan:

( ( 10 ) + 2 ) * 2

Ketika tidak ada lagi argumen SELECTEDMEASURE(), ekspresi DAX gabungan dievaluasi:

( ( 10 ) + 2 ) * 2 = 24

Dalam Power BI Desktop, ketika kedua grup perhitungan diterapkan dengan pemotong, output pengukuran terlihat seperti ini:

Mengukur ekspresi gabungan grup.

Tetapi perlu diingat, kombinasi bersarang sededimikian sehingga outputnya tidak akan menjadi 10 + 2 * 2 = 14 seperti yang Anda lihat di sini:

Mengukur ekspresi berlapis grup.

Untuk transformasi sederhana, evaluasinya adalah dari prioritas yang lebih rendah ke yang lebih tinggi. Misalnya, 10 memiliki 2 ditambahkan, maka dikalikan dengan 2. Di DAX, ada fungsi seperti CALCULATE yang menerapkan filter atau perubahan konteks ke ekspresi dalam. Dalam hal ini, semakin tinggi prioritas mengubah ekspresi prioritas yang lebih rendah.

Prioritas juga menentukan string format dinamis mana yang diterapkan ke ekspresi DAX gabungan untuk setiap pengukuran. String format dinamis grup perhitungan prioritas tertinggi adalah satu-satunya yang diterapkan. Jika ukuran itu sendiri memiliki string format dinamis, itu dianggap prioritas yang lebih rendah untuk grup perhitungan apa pun dalam model.

Prioritas dengan contoh rata-rata

Mari kita lihat contoh lain menggunakan model yang sama seperti yang ditunjukkan dalam contoh inteligensi waktu yang dijelaskan sebelumnya dalam artikel ini. Tetapi kali ini, mari kita tambahkan juga grup perhitungan Rata-Rata . Grup perhitungan Rata-rata berisi perhitungan rata-rata yang independen dari kecerdasan waktu tradisional karena tidak mengubah konteks filter tanggal - mereka hanya menerapkan perhitungan rata-rata di dalamnya.

Dalam contoh ini, perhitungan rata-rata harian ditentukan. Perhitungan seperti barel rata-rata minyak per hari umum dalam aplikasi minyak dan gas. Contoh bisnis umum lainnya termasuk rata-rata penjualan toko di ritel.

Meskipun perhitungan tersebut dihitung secara independen dari perhitungan inteligensi waktu, mungkin ada persyaratan untuk menggabungkannya. Misalnya, pengguna mungkin ingin melihat barel minyak per hari YTD untuk melihat laju minyak harian dari awal tahun hingga tanggal saat ini. Dalam skenario ini, prioritas harus diatur untuk item perhitungan.

Asumsi kami adalah:

Nama tabel adalah Rata-rata.
Nama kolom adalah Perhitungan Rata-Rata.
Prioritas adalah 10.

Item perhitungan untuk Rata-rata

Tidak Ada Rata-Rata

SELECTEDMEASURE()

Rata-rata Harian

DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))

Berikut adalah contoh kueri DAX dan tabel pengembalian:

Kueri rata-rata

EVALUATE
    CALCULATETABLE (
        SUMMARIZECOLUMNS (
        DimDate[CalendarYear],
        DimDate[EnglishMonthName],
        "Sales", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "Current",
            'Averages'[Average Calculation] = "No Average"
        ),
        "YTD", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "YTD",
            'Averages'[Average Calculation] = "No Average"
        ),
        "Daily Average", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "Current",
            'Averages'[Average Calculation] = "Daily Average"
        ),
        "YTD Daily Average", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "YTD",
            'Averages'[Average Calculation] = "Daily Average"
        )
    ),
    DimDate[CalendarYear] = 2012
)

Pengembalian kueri rata-rata

Pengembalian kueri rata-rata

Tabel berikut ini memperlihatkan bagaimana nilai Maret 2012 dihitung.

Nama kolom Penghitungan
YTD Jumlah Penjualan untuk Jan, Feb, Mar 2012
= 495.364 + 506.994 + 373.483
Rata-rata Harian Penjualan untuk Mar 2012 dibagi dengan # hari pada bulan Maret
= 373.483 / 31
Rata-rata Harian YTD YTD untuk Mar 2012 dibagi dengan # hari di Jan, Feb, dan Mar
= 1.375.841 / (31 + 29 + 31)

Berikut definisi item perhitungan YTD, diterapkan dengan prioritas 20.

CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))

Berikut Rata-Rata Harian, diterapkan dengan prioritas 10.

DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))

Karena prioritas grup penghitungan Inteligensi Waktu lebih tinggi dari grup perhitungan Rata-Rata, grup tersebut diterapkan seluas mungkin. Perhitungan Rata-Rata Harian YTD menerapkan YTD untuk pembingguna dan penyebar (hitungan hari) dari perhitungan rata-rata harian.

Ini setara dengan ekspresi berikut:

CALCULATE(DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate)), DATESYTD(DimDate[Date]))

Bukan ekspresi ini:

DIVIDE(CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date])), COUNTROWS(DimDate)))

Rekursi samping

Dalam contoh Inteligensi Waktu di atas, beberapa item perhitungan mengacu pada item lainnya dalam grup perhitungan yang sama. Ini disebut rekursi samping. Misalnya, YOY% mereferensikan YOY dan PY.

DIVIDE(
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="YOY"
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="PY"
    )
)

Dalam hal ini, kedua ekspresi dievaluasi secara terpisah karena menggunakan pernyataan penghitungan yang berbeda. Jenis rekursi lainnya tidak didukung.

Item perhitungan tunggal dalam konteks filter

Dalam contoh Inteligensi Waktu kami, item perhitungan PY YTD memiliki ekspresi hitung tunggal:

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "YTD"
)

Argumen YTD ke fungsi CALCULATE() mengambil alih konteks filter untuk menggunakan kembali logika yang sudah ditentukan dalam item perhitungan YTD. Tidak dimungkinkan untuk menerapkan PY dan YTD dalam satu evaluasi. Grup penghitungan hanya diterapkan jika satu item perhitungan dari grup perhitungan berada dalam konteks filter.

Memesan

Secara default, saat kolom dari grup penghitungan ditempatkan dalam laporan, item perhitungan diurutkan menurut abjad berdasarkan nama. Urutan item penghitungan yang muncul dalam laporan dapat diubah dengan menentukan properti Ordinal. Menentukan urutan item perhitungan dengan properti Ordinal tidak berubah diutamakan, urutan di mana item penghitungan dievaluasi. Ini juga tidak mengubah urutan item penghitungan muncul di Penjelajah Model Tabular.

Untuk menentukan properti ordinal untuk item perhitungan, Anda harus menambahkan kolom kedua ke grup perhitungan. Tidak seperti kolom default di mana Tipe Data adalah Teks, kolom kedua yang digunakan untuk mengurutkan item penghitungan memiliki tipe data Bilangan Bujur. Satu-satunya tujuan untuk kolom ini adalah untuk menentukan urutan numerik tempat item perhitungan dalam grup perhitungan muncul. Karena kolom ini tidak menyediakan nilai dalam laporan, yang terbaik adalah mengatur properti Tersembunyi ke True.

Kolom untuk pengurutan

Setelah kolom kedua ditambahkan ke grup perhitungan, Anda dapat menentukan nilai properti Ordinal untuk item perhitungan yang ingin Anda pesan.

Properti ordinal

Untuk mempelajari selengkapnya, lihat Untuk memesan item perhitungan.

Membuat grup penghitungan

Grup perhitungan didukung di Visual Studio dengan Analysis Services Projects VSIX update 2.9.2 dan yang lebih baru. Grup perhitungan juga dapat dibuat dengan menggunakan Tabular Model Scripting Language (TMSL) atau Editor Tabular sumber terbuka.

Untuk membuat grup penghitungan dengan menggunakan Visual Studio

  1. Di Penjelajah Model Tabular, klik kanan Grup Penghitungan, lalu klik Grup Penghitungan Baru. Secara default, grup penghitungan baru memiliki satu kolom dan satu item perhitungan.

  2. Gunakan Properti untuk mengubah nama dan memasukkan deskripsi untuk grup perhitungan, kolom, dan item perhitungan default.

  3. Untuk memasukkan ekspresi rumus DAX untuk item perhitungan default, klik kanan lalu klik Edit Rumus untuk membuka Editor DAX. Masukkan ekspresi yang valid.

  4. Untuk menambahkan item penghitungan lainnya, klik kanan Item Penghitungan, lalu klik Item Perhitungan Baru.

Untuk mengurutkan item perhitungan

  1. Di Penjelajah Model Tabular, klik kanan grup perhitungan, lalu klik Tambahkan kolom.

  2. Beri nama kolom Ordinal (atau sesuatu yang serupa), masukkan deskripsi, lalu atur properti Tersembunyi ke True.

  3. Untuk setiap item perhitungan yang ingin Anda pesan, atur properti Ordinal ke angka positif. Setiap angka berurutan, misalnya, item perhitungan dengan properti Ordinal 1 muncul terlebih dahulu, properti 2 muncul kedua, dan sebagainya. Item penghitungan dengan default -1 tidak disertakan dalam pengurutan, tetapi muncul sebelum item yang diurutkan dalam laporan.

Batasan

Keamanan tingkat objek (OLS) yang ditentukan pada tabel grup perhitungan tidak didukung. Namun, OLS dapat didefinisikan pada tabel lain dalam model yang sama. Jika item perhitungan mengacu pada objek aman OLS, kesalahan umum akan dikembalikan.

Keamanan tingkat baris (RLS) tidak didukung. Tentukan RLS pada tabel dalam model yang sama, tetapi tidak pada grup perhitungan itu sendiri (secara langsung atau tidak langsung).

Ekspresi Baris Detail tidak didukung dengan grup perhitungan.

Naratif cerdas visual di Power BI tidak didukung dengan grup perhitungan.

Agregasi kolom implisit di Power BI tidak didukung untuk model dengan grup perhitungan. Saat ini, jika properti DiscourageImplicitMeasures diatur ke false (default), opsi agregasi muncul, namun tidak dapat diterapkan. Jika DiscourageImplicitMeasures diatur ke true, opsi agregasi tidak muncul.

Saat membuat laporan Power BI menggunakan LiveConnection, string format Dinamis tidak diterapkan ke pengukuran tingkat laporan.

Lihat juga

DAX dalam model tabular
Referensi DAX