Bagikan melalui


Kelompok Perhitungan

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

Grup perhitungan dapat secara signifikan mengurangi jumlah tindakan redundan dengan memiliki pola ekspresi pengukuran umum sebagai item perhitungan. Grup perhitungan didukung dalam model tabular pada tingkat kompatibilitas 1500 dan yang lebih tinggi. Ini termasuk semua model semantik Power BI.

Misalnya, jika Anda memiliki 5 pengukuran dan ingin membuat versi tahun sebelumnya untuk setiap Anda menggunakan pola yang sama untuk masing-masing dengan fungsi DAX yang sama.

[Measure 1 Prior Year] = CALCULATE([Measure 1], PARALLELPERIOD('Date'[Date], -1, YEAR))

[Measure 2 Prior Year] = CALCULATE([Measure 2], PARALLELPERIOD('Date'[Date], -1, YEAR))

[Measure 3 Prior Year] = CALCULATE([Measure 3], PARALLELPERIOD('Date'[Date], -1, YEAR))

[Measure 4 Prior Year] = CALCULATE([Measure 4], PARALLELPERIOD('Date'[Date], -1, YEAR))

[Measure 5 Prior Year] = CALCULATE([Measure 5], PARALLELPERIOD('Date'[Date], -1, YEAR))

Alih-alih membuat 5 ukuran tambahan, Anda dapat menggunakan pola dalam item perhitungan dengan placeholder, SELECTEDMEASURE, yang menerapkan ekspresi pada ukuran mana pun.

CALCULATE(SELECTEDMEASURE(), PARALLELPERIOD('Date'[Date], -1, YEAR))

Item perhitungan diterapkan saat Anda memilih item perhitungan dalam filter atau pemotong, atau menggunakannya untuk mengelompokkan nilai dalam visual.

Menerapkan item grup kalkulasi dalam laporan Power BI

Membuat grup penghitungan

Grup penghitungan dapat dibuat dalam banyak cara.

Untuk membuat grup penghitungan dengan menggunakan tampilan model Power BI

Anda bisa membuat grup perhitungan dalam tampilan model Power BI Desktop atau saat mengedit model semantik Power BI di browser.

  1. Mengedit model semantik
  2. Pilih tombol pita grup perhitungan .
  3. Elemen perhitungan pertama dibuat untuk Anda.
  4. Ganti nama dan sesuaikan ekspresi.

Anda dapat mengurutkan dan membuat item perhitungan lainnya dengan memilih simpul Item perhitungan dan menggunakan panel Properti. Menu konteks dari grup perhitungan atau node item perhitungan dapat digunakan untuk membuat grup penghitungan baru. Menu konteks dari setiap item perhitungan juga memiliki opsi untuk mengurutkannya kembali.

Untuk informasi selengkapnya, lihat Membuat grup penghitungan di Power BI.

Untuk membuat grup penghitungan dengan menggunakan tampilan Power BI TMDL

Anda bisa membuat grup penghitungan di Bahasa Definisi Model Tabular atau tampilan TMDL Power BI Desktop. Edit model semantik dan gunakan skrip TMDL ini.

createOrReplace

	table 'Calculation group'

		calculationGroup
			precedence: 1

			calculationItem 'Calculation item' = SELECTEDMEASURE()

		column 'Calculation group column'
			dataType: string
			summarizeBy: none
			sourceColumn: Name
			sortByColumn: Ordinal

			annotation SummarizationSetBy = Automatic

		column Ordinal
			dataType: int64
			formatString: 0
			summarizeBy: sum
			sourceColumn: Ordinal

			annotation SummarizationSetBy = Automatic

Untuk membuat grup penghitungan dengan menggunakan Visual Studio

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

  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 perhitungan lainnya, klik kanan Item Penghitungan, lalu klik Item Penghitungan Baru.

Untuk mengurutkan item penghitungan

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

  2. Beri nama kolom Ordinal (atau 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 perhitungan dengan -1 default tidak disertakan dalam pengurutan, tetapi muncul sebelum item yang diurutkan dalam laporan.

Keuntungan

Grup perhitungan mengatasi masalah dalam model kompleks di mana mungkin ada proliferasi tindakan 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), kuartal hingga saat ini (QTD), tahun ke tanggal (YTD), pesanan tahun ke tanggal untuk tahun sebelumnya (PY), dan sebagainya. Pemodel data harus membuat pengukuran terpisah untuk setiap perhitungan, yang dapat menyebabkan puluhan pengukuran. Bagi pengguna, hasilnya adalah harus menyusun sejumlah tindakan yang sama banyaknya dan menerapkannya satu per satu pada laporan mereka.

Mari kita lihat terlebih dahulu bagaimana grup penghitungan muncul kepada 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 Anda 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 ukuran kecerdasan waktu secara 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 berfungsi dengan ukuran DAX eksplisit. Dalam contoh ini, Penjualan adalah ukuran eksplisit yang sudah dibuat dalam model. Grup perhitungan tidak berfungsi dengan ukuran DAX implisit. Misalnya, dalam Power BI, pengukuran implisit dibuat saat pengguna menyeret kolom ke visual untuk menampilkan nilai agregat, tanpa membuat ukuran eksplisit. Saat ini, Power BI menghasilkan DAX untuk pengukuran implisit yang ditulis sebagai perhitungan DAX sebaris - yang berarti tindakan implisit tidak dapat berfungsi dengan grup perhitungan. Properti model baru yang dapat diakses di Model Objek Tabular (TOM), yaitu DiscourageImplicitMeasures, telah diperkenalkan. Saat ini, untuk membuat grup perhitungan properti ini harus diatur ke true. Saat diatur ke true, Power BI Desktop dalam mode Live Connect menonaktifkan pembuatan pengukuran implisit.

Grup perhitungan juga mendukung kueri Ekspresi Data Multidmensional (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 ini dibuat.

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

SELECTEDMEASURE - Digunakan oleh ekspresi untuk item kalkulasi untuk referensi terhadap metrik dalam konteks saat ini. Dalam contoh ini, pengukuran Penjualan.

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

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

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

Contoh Inteligensi Waktu

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

Item Perhitungan Kecerdasan 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"
    )
)

Kueri Analisis Waktu

Untuk menguji grup perhitungan ini, jalankan kueri DAX berikut. Catatan: MTD, YOY, dan YOY% dihilangkan dari contoh kueri ini. Di Power BI, gunakan tampilan kueri DAX untuk menjalankan kueri.

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

Format string dinamis

Format string dinamis dengan grup perhitungan memungkinkan penerapan bersyarat format string terhadap pengukuran tanpa harus memaksa mereka mengembalikan string.

Model tabular mendukung pemformatan pengukuran dinamis dengan menggunakan fungsi FORMAT DAX. Namun, fungsi FORMAT memiliki kelemahan yaitu mengembalikan string, yang memaksa ukuran yang seharusnya numerik juga harus 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 bersyarat ke pengukuran tertentu tanpa harus memaksanya mengembalikan string dan tanpa menggunakan grup perhitungan. Untuk mempelajari selengkapnya, lihat String format dinamis untuk pengukuran.

String format dinamis untuk analisis 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 basis ukuran penjualan harus berupa 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 lebih lanjut tentang properti ekspresi string format, lihat Properti Sel MDX - FORMAT STRING Konten.

Dalam visual matriks ini di Power BI, Anda melihat Penjualan Saat Ini/YOY dan Pesanan Saat Ini/YOY mempertahankan string format pengukuran dasar masing-masing. Sales YOY% dan Orders YOY% menggantikan string format yang sudah ditentukan 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.

Kurs mata uang dalam model tabular

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

Memformat 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 Penghitungan untuk Konversi Mata Uang

Tidak Ada Konversi

SELECTEDMEASURE()

Mata Uang yang Dikonversi

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 string

SELECTEDVALUE(
    DimCurrency[FormatString],
    SELECTEDMEASUREFORMATSTRING()
)

Nota

Ekspresi pilihan untuk grup perhitungan 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 pengukuran 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 untuk konversi mata uang diterapkan

Ekspresi pilihan

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

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

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

Singkatnya, pada grup perhitungan, yang berikut ini dapat didefinisikan, misalnya menggunakan TMDL:

...
table Scenarios
	calculationGroup
		...
    multipleOrEmptySelectionExpression = "replace with the DAX formula"
        formatStringDefinition = "replace with the DAX formula"
    noSelectionExpression= "replace with the DAX formula"
        formatStringDefinition = "replace with the DAX formula"
...

Nota

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 Seleksi diterapkan Seleksi diterapkan
Beberapa pilihan Grup perhitungan tidak disaring. Mengembalikan hasil evaluasi multipleOrEmptySelectionExpression
Pilihan kosong Grup perhitungan tidak disaring. Mengembalikan hasil evaluasi multipleOrEmptySelectionExpression
Tidak ada pilihan Grup perhitungan tidak disaring. Mengembalikan hasil evaluasi noSelectionExpression

Nota

Gunakan pengaturan selectionExpressionBehavior dari model untuk lebih memengaruhi apa yang dikembalikan grup kalkulasi saat ekspresi pilihan tidak ditentukan.

Pengaturan model SelectionExpressionBehavior

Model memiliki pengaturan selectionExpressionBehavior yang memungkinkan kontrol lebih lanjut atas bagaimana grup perhitungan dalam model tersebut berperilaku. Pengaturan ini menerima tiga nilai berikut:

  • Otomatis Ini adalah nilai default dan sama dengan nonvisual. Ini memastikan bahwa model Anda yang ada tidak mengubah perilaku. Model di atas tingkat kompatibilitas mendatang yang diatur ke otomatis akan menggunakan visual sebagai gantinya. Akan ada pengumuman pada saat itu.
  • Nonvisual. Jika grup perhitungan tidak menentukan ekspresi multipleOrEmptySelection , grup penghitungan mengembalikan SELECTEDMEASURE() dan ketika ukuran dikelompokkan menurut grup perhitungan, nilai subtotal disembunyikan.
  • Visual. Jika grup perhitungan tidak menentukan ekspresi multipleOrEmptySelection , grup perhitungan mengembalikan BLANK(). Saat mengelompokkan menurut grup perhitungan, nilai subtotal ditentukan dengan mengevaluasi pengukuran yang dipilih dalam konteks grup perhitungan.

Gunakan TMDL untuk mengatur properti pada model Anda:

createOrReplace
    model Model
        ...
        selectionExpressionBehavior: automatic | nonvisual | visual
...

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 perhitungan akan mengembalikan hasil berikut jika pengaturan selectionExpressionBehavior model diatur ke otomatis atau nonvisual:

SELECTEDMEASURE()

Jika pengaturan model selectionExpressionBehavior diatur ke visual, maka grup perhitungan akan mengembalikan:

BLANK()

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, kami 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, ikuti 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 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.

Didahulukan

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 pendahuluan

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 item perhitungan dari kedua grup ke metrik. 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 kita 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"
          }
        }
      ]
    }
  }
}

Di Power BI Desktop, kami memiliki visual kartu yang memperlihatkan pengukuran 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, elemen perhitungan dengan prioritas tertinggi pada ekspresi DAX kami adalah:

SELECTEDMEASURE() * 2 

Dan ekspresi DAX untuk item perhitungan dengan prioritas tertinggi kedua 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, kita lanjutkan sampai kita mencapai ukuran dasar. Hanya ada dua grup perhitungan dalam model ini, jadi kami sekarang mengganti SELECTEDMEASURE() dengan ukuran itu sendiri, seperti ini:

( ( [Measure] ) + 2 ) * 2

Karena ukurannya adalah Measure = 10, ini sama dengan:

( ( 10 ) + 2 ) * 2

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

( ( 10 ) + 2 ) * 2 = 24

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

Mengukur ekspresi gabungan grup.

Tetapi perlu diingat, kombinasi disusun sedemikian rupa sehingga output 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 ditambahkan 2, lalu dikalikan dengan 2. Di DAX, ada fungsi seperti CALCULATE yang menerapkan filter atau perubahan konteks pada 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 ukuran. String format dinamis dari grup perhitungan dengan prioritas tertinggi adalah satu-satunya yang diterapkan. Jika ukuran itu sendiri memiliki string format dinamis, itu dianggap sebagai 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 intelijen waktu tradisional, yang tidak mengubah konteks filter tanggal tetapi hanya menerapkan perhitungan rata-rata dalam konteks tersebut.

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 dalam 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.
Prioritasnya adalah 10.

Elemen perhitungan untuk rata-rata

Tidak Ada Nilai Rata-Rata

SELECTEDMEASURE()

Rata-rata Harian

DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))

Berikut adalah contoh kueri DAX dan tabel pengembalian:

Pertanyaan 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 Kalkulasi
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 Data Tahun Hingga Maret 2012 dibagi dengan jumlah hari di Januari, Februari, dan Maret
= 1.375.841 / (31 + 29 + 31)

Berikut definisi item perhitungan YTD, diterapkan dengan prioritas 20.

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

Berikut adalah Rata-Rata Harian, diterapkan dengan prioritas 10.

DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))

Karena prioritas grup penghitungan Kecerdasan Waktu lebih tinggi dari grup penghitungan Rata-rata, grup penghitungan diterapkan seluas mungkin. Perhitungan Rata-Rata Harian YTD menerapkan YTD untuk pembilang dan penyebut dari hitungan rata-rata harian (jumlah hari).

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 merujuk ke item lain 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 hitung yang berbeda. Jenis rekursi lainnya tidak didukung.

Satu item perhitungan 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.

Pemesanan

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

Untuk menentukan properti ordinal untuk item perhitungan, Anda harus menambahkan kolom kedua ke grup perhitungan. Tidak seperti kolom default tempat Tipe Data adalah Teks, kolom kedua yang digunakan untuk mengurutkan item perhitungan 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, sebaiknya atur 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 informasi lebih lanjut, lihat Memesan Item Perhitungan.

Pertimbangan

Model mengukur perubahan pada jenis data varian

Segera setelah grup perhitungan ditambahkan ke model semantik, laporan Power BI akan menggunakan jenis data varian untuk semua pengukuran. Jika setelahnya, semua grup perhitungan dihapus dari model, pengukuran akan dikembalikan ke jenis data aslinya lagi.

Ini dapat menyebabkan string format dinamis untuk pengukuran menggunakan ukuran untuk digunakan kembali untuk menunjukkan kesalahan. Gunakan fungsi FORMAT DAX untuk memaksa pengukuran varian dikenali sebagai jenis data string lagi.

FORMAT([Dynamic format string], "")

Atau, Anda dapat menggunakan kembali ekspresi Anda untuk string format dinamis dengan fungsi yang ditentukan pengguna DAX sebagai gantinya.

Kesalahan visual saat item perhitungan menerapkan operasi matematika pada ukuran non-numerik

Ukuran non-numerik umumnya digunakan untuk judul dinamis dalam visual dan dalam string format dinamis untuk pengukuran. Kesalahan Tidak dapat mengonversi nilai ... dari tipe Teks ke tipe Numerik muncul pada visual yang terpengaruh. Ekspresi item perhitungan dapat menghindari hal ini dengan menambahkan pemeriksaan untuk melihat apakah ukurannya numerik sebelum menerapkan operasi matematika. Gunakan ISNUMERIC dalam item perhitungan.

Calculation item safe = 
    IF ( 
        // Check the measure is numeric
        ISNUMERIC( SELECTEDMEASURE() ),
            SELECTEDMEASURE() * 2,
            // Don't apply the calculation on a non-numeric measure
            SELECTEDMEASURE()
        )

Keterbatasan

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.

Visual narasi cerdas di Power BI tidak didukung dengan kelompok kalkulasi.

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 Koneksi Langsung, string format dinamis tidak diterapkan ke pengukuran tingkat laporan.

Lihat juga

Membuat grup penghitungan dalam tampilan Power BITMDLtampilan kueri DAXString format dinamis untuk mengukurPenjelajah model dalam tampilan model Power BIDAX dalam model tabular
Referensi DAX