Memfilter kolom terhitung produk Cartesian di DAX

Saya memerlukan alat pengiris untuk mencentang hanya Produk dan Wilayah yang memiliki Target yang dianggarkan. masukkan deskripsi gambar di sini

Model data saya sedikit rumit daripada yang saya tunjukkan di sini. Dalam tabel skenario saya yang sebenarnya, Anggaran tidak ada dan nilai Target harus dihitung dari tabel lain dengan rincian yang berbeda-beda. Mari kita asumsikan kita tidak bisa menggunakan kolom terhitung pada tabel Anggaran.

Di sini tabel hijau adalah jembatan satu kolom-semua-nilai-dimensi. Tabel berwarna merah merupakan produk Cartesian dari Produk dan Merek dengan Target yang telah dihitung.

masukkan deskripsi gambar di sini

Berikut adalah kode DAX untuk tabel merah yang saya masak untuk mengatasi masalah tersebut.

#Brand x Region =
ADDCOLUMNS (
    CROSSJOIN ( '#product', '#region' ),
    "Target", CALCULATE ( SUM ( Budget[target] ) ),
    "IsTarget", IF ( CALCULATE ( SUM ( Budget[target] ) ) > 0, "Yes", "No" )
)

Tabelnya terlihat seperti ini: masukkan deskripsi gambar di sini

Tapi kolom IsTarget yang diperoleh dengan cerdik tidak mempengaruhi visual saya melalui alat pengiris. Bagaimana memperbaikinya.

File PBIX di sini.

Edit setelah komentar. masukkan deskripsi gambar di sini Alexis, apakah itu yang Anda maksud? Saya menambahkan kolom P@R yang merupakan gabungan Produk dan Wilayah. Tampaknya berhasil :-)


person Przemyslaw Remin    schedule 30.10.2019    source sumber
comment
Apakah mungkin dalam skenario Anda yang sebenarnya untuk membuat satu kolom indeks wilayah produk untuk membuat hubungan alih-alih memerlukan hubungan untuk masing-masing kolom?   -  person Alexis Olson    schedule 30.10.2019
comment
Jadi Anda mengusulkan Cartesian Produk x Merek sebagai jembatan, bukan Produk tunggal dan Merek tunggal. Tetapi bagaimana cara menghubungkan Cartesian tersebut ke FactTable atau tabel lain jika hanya ada satu relasi kolom yang diperbolehkan?   -  person Przemyslaw Remin    schedule 30.10.2019
comment
Anda harus menambahkan indeks itu ke tabel yang ingin Anda jadikan hubungan. Itu sebabnya saya bertanya apakah itu mungkin dalam kasus Anda. Hal ini tentu dapat dilakukan dalam contoh Anda tetapi bertentangan dengan asumsi yang Anda nyatakan pada Budget.   -  person Alexis Olson    schedule 30.10.2019
comment
Terima kasih. Bisakah Anda melihat pendekatan yang saya sarankan dalam jawaban saya setelah komentar Anda?   -  person Przemyslaw Remin    schedule 30.10.2019
comment
Konsepnya sangat mirip dan penggabungannya adalah jalan pintas yang bagus daripada membuat indeks bilangan bulat. Jika Anda menyembunyikan tabel wilayah dan produk untuk mengurangi kebingungan (gunakan saja tabel silang), ini adalah solusi yang tepat.   -  person Alexis Olson    schedule 30.10.2019


Jawaban (1)


Inilah yang saya sarankan, di mana hubungan terbawah ada di kolom Index.

Diagram Hubungan

Untuk melakukan ini, tabel #Brand x Region saya adalah ini:

#Brand x Region = 
VAR CrossProduct =
    ADDCOLUMNS (
        CROSSJOIN ( '#product', '#region' ),
        "Target",
        CALCULATE (
            SUM ( Budget[target] ),
            FILTER (
                Budget,
                Budget[product] = EARLIER ( '#product'[product] ) &&
                Budget[region] = EARLIER ( '#region'[region] )
            )
        )
    )
RETURN
    ADDCOLUMNS(
        CrossProduct,
        "IsTarget", IF ( [Target] > 0, "Yes", "No" ),
        "Index", RANKX(CrossProduct, '#product'[product] & '#region'[region])
    )

(Catatan: Pemfilteran harus eksplisit karena saya tidak menggunakan hubungan yang Anda miliki sebelumnya.)

Dari sana saya menepi indeks ke FactTableSales dan Budget dengan pencarian:

Index =
LOOKUPVALUE (
    '#Brand x Region'[Index],
    '#Brand x Region'[product], [product],
    '#Brand x Region'[region], [region]
)

Perhatikan bahwa membuat kolom indeks sering kali lebih mudah di editor kueri daripada mencoba melakukannya di DAX, namun Anda tidak bisa mengubah tabel terhitung di editor kueri.

person Alexis Olson    schedule 30.10.2019
comment
Terima kasih untuk itu. Rasanya berat. Tidak tahu kalau ini akan menjadi rumit. - person Przemyslaw Remin; 30.10.2019