an

 

DimPeriod =
DATATABLE (
    "Period", STRING,
    "Description", STRING,
    {
        { "Dün",      "Bugünden bir önceki günün verilerini gösterir. (Pazartesi günü ise Cuma gününü gösterir)" },
        { "Haftalık", "Bugünün içinde bulunduğu haftayı (Pzt–Paz) kapsar." },
        { "Aylık",    "Bugünün içinde bulunduğu ayı kapsar." },
        { "Yıllık",   "Bulunulan takvim yılının tamamını kapsar." },
        { "Tümü",     "Veri setindeki tüm tarihleri kapsar." }
    }
)


DimDate =
VAR MinDate = MIN ( factAntizanDetay[Date] )
VAR MaxDate = MAX ( factAntizanDetay[Date] )
RETURN
ADDCOLUMNS (
    CALENDAR ( MinDate, MaxDate ),
    "Year", YEAR ( [Date] ),
    "MonthNo", MONTH ( [Date] ),
    "MonthName", FORMAT ( [Date], "MMMM" ),
    "YearMonth", FORMAT ( [Date], "yyyy-MM" ),
    "WeekNo", WEEKNUM ( [Date], 2 ),
    "DayOrder", WEEKDAY ( [Date], 2 ),
    "DayName", FORMAT ( [Date], "dddd" ),
    "IsWorkingDay", WEEKDAY ( [Date], 2 ) < 6,
    "IsWeekend", WEEKDAY ( [Date], 2 ) >= 6
)
______________________________________________________________________________________
İŞ,ÖZEL, DİĞER SÜRE / PERSONEL SAYISI

Başlık:
Departman Süre Oranları

Alt Başlık:
İş, Özel ve Diğer Sürelerinin Toplam Süre İçindeki Payı
(İlk 10 Departman, Kişi Başına İş Süresine Göre Sıralı)


En aktif Departmanın kendi içindeki oranı n filitreye toplam süre koy.
SÜRE/TOPLM SÜRE


Başlık:
Kişi Başına İş Süresi

Alt Başlık:
Toplam İş Süresinin Departman Personel Sayısına Oranı

_Personel Sayısı =
DISTINCTCOUNT(PersonelListesi[PersonelID])

Antizan_OrtalamaİşSüresi =
DIVIDE(
    [_İş],
    [_Personel Sayısı]
)
______________________________________________________________________________________
_Seçili Periyot =
SELECTEDVALUE('Antizan DimPeriod'[Period], "Aylık")
______________________________________________________________________________________
İş için çalışanların süresi

_İş = CALCULATE(
[_DönemselSwitchSüre],
factAntizanDetay[Tür] = "İş"


İş için çalışanların formatı
Antizan_DönemselİşSüre =
VAR Saniye = [_İş]
VAR Saat = INT(Saniye / 3600)
VAR Dakika = INT( (Saniye - Saat * 3600) / 60 )
RETURN
FORMAT(Saat, "00") & ":" & FORMAT(Dakika, "00")


Antizan_DönemselToplamSüre =
VAR Saniye = CALCULATE(
    [_DönemselSwitchSüre]
)
VAR Saat = INT(Saniye / 3600)
VAR Dakika = INT( (Saniye - Saat * 3600) / 60 )
RETURN
FORMAT(Saat, "00") & ":" & FORMAT(Dakika, "00")
___________
Kullanım Süre Dağılımı
Cart sütun grafiğine

Kullanım Süre Payları
Pasta grafiğine

______________________________________________________________________________________
Antizan_DönemselİşSüre =
VAR Saniye = [_İş]
VAR Saat = INT(Saniye / 3600)
VAR Dakika = INT( (Saniye - Saat * 3600) / 60 )
RETURN
FORMAT(Saat, "00") & ":" & FORMAT(Dakika, "00")
_DönemselSwitchSüre =
VAR _Period = [_Seçili Periyot]
VAR _LastDate = MAX(factAntizanDetay[Date])
RETURN
SWITCH(
    TRUE(),

    _Period = "Dün",
        CALCULATE(
            SUM(factAntizanDetay[Süre]),
            AntizanDimDate[Date] = _LastDate - 1
        ),

    _Period = "Haftalık",
        CALCULATE(
            SUM(factAntizanDetay[Süre]),
            DATESINPERIOD(AntizanDimDate[Date], _LastDate, -7, DAY)
        ),

    _Period = "Aylık",
        CALCULATE(
            SUM(factAntizanDetay[Süre]),
            FILTER(
                ALL(AntizanDimDate),
                AntizanDimDate[Date] <= _LastDate &&
                YEAR(AntizanDimDate[Date]) = YEAR(_LastDate) &&
                MONTH(AntizanDimDate[Date]) = MONTH(_LastDate)
            )
        ),

    _Period = "Yıllık",
        CALCULATE(
            SUM(factAntizanDetay[Süre]),
            FILTER(
                ALL(AntizanDimDate),
                AntizanDimDate[Date] <= _LastDate &&
                YEAR(AntizanDimDate[Date]) = YEAR(_LastDate)
            )
        ),

    _Period = "Tümü",
        CALCULATE(
            SUM(factAntizanDetay[Süre]),
            ALL(AntizanDimDate)
        ),

    -- Default
    SUM(factAntizanDetay[Süre])
)

*******
Ortalama Süre (Dün Saat:Dakika - Text) =
VAR OrtalamaSaniye =
CALCULATE(
DIVIDE(
SUM( factAntizanDetay[Süre] ),
COUNT( factAntizanDetay[Süre] )
),
factAntizanDetay[Tür] = "İş",
factAntizanDetay[Date] = TODAY() - 1
)
VAR Saat = INT( OrtalamaSaniye / 3600 )
VAR Dakika = INT( MOD(OrtalamaSaniye, 3600) / 60 )
RETURN
FORMAT(Saat, "00") & ":" & FORMAT(Dakika, "00")
______________________________________________________________________________________ Toplam / İş 1 birim iş için kaç birim toplam zaman harcanmış:
1 saatlik iş için kaç saat toplam zaman harcandığını verir. 8 / 5 = 1,6 İş/Toplam Süre Toplam zamanın ne kadarının işe gittiğini verir.
İş Yoğunluk Oranı =
DIVIDE ( CALCULATE ( [Toplam Süre (Saat)],  ( factAntizanDetay[Tür] = "İş" ) ),
 [Toplam Süre (Saat)] )
5 / 8 = 0,625 → %62,5 “Bu kişi/departman zamanının %62,5’ini işe ayırmış.”
______________________________________________________________________________________ ______________________________________________________________________________________ Debug
Seçili Periyot Test =
[_Seçili Periyot]
Son Tarih DimDate =
MAX(AntizanDimDate[Date])
Son Tarih Fact =
MAX(factAntizanDetay[Date])
Toplam Süre =
SUM(factAntizanDetay[Süre])







______________________________________________________________________
<!DOCTYPE html> <html lang="tr"> <head> <meta charset="UTF-8"> <title>Sokak Hayvanlarına Bağış Formu</title> <style> body { font-family: Arial, sans-serif; background-color: #f4f9f8; display: flex; justify-content: center; align-items: center; height: 100vh; } .donation-box { position: relative; background: white; padding: 40px 50px 80px; border-radius: 14px; text-align: center; box-shadow: 0 15px 30px rgba(0,0,0,0.1); overflow: hidden; animation: fadeUp 1.2s ease-out; } /* ÜST ÇİZGİ – yeşil, sabit */ .donation-box::before { content: ""; position: absolute; top: 26px; left: -10%; width: 120%; height: 2px; background-color: #2ecc71; opacity: 0.6; } h1 { position: relative; font-size: 28px; color: #1f6f78; margin: 0; z-index: 2; } p { margin-top: 12px; font-size: 14px; color: #555; position: relative; z-index: 2; animation: fadeIn 2s ease; } /* DALGA ALANI */ .waves { position: absolute; bottom: 18px; left: 0; width: 100%; height: 55px; z-index: 1; } .wave1 { animation: waveMove 16s ease-in-out infinite alternate; opacity: 0.55; /* ÜST DALGA BİRAZ SOLGUN */ } .wave2 { animation: waveMoveReverse 22s ease-in-out infinite alternate; opacity: 1; /* ALT DALGA BELİRGİN */ } @keyframes waveMove { from { transform: translateX(0); } to { transform: translateX(-120px); } } @keyframes waveMoveReverse { from { transform: translateX(0); } to { transform: translateX(120px); } } @keyframes fadeUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } </style> </head> <body> <div class="donation-box"> <h1>Sokak Hayvanlarına Bağış Formu</h1> <p>Yapacağınız her bağış, sokaktaki bir canın hayatına dokunur.</p> <!-- ALT DALGALAR --> <svg class="waves" viewBox="0 0 600 55" preserveAspectRatio="none"> <!-- ÜST DALGA – DAHA SOLGUN --> <path class="wave1" d="M0 16 Q 30 6 60 16 T 120 16 T 180 16 T 240 16 T 300 16 T 360 16 T 420 16 T 480 16 T 540 16 T 600 16" fill="none" stroke="#2bb0ed" stroke-width="2"/> <!-- ALT DALGA – BELİRGİN --> <path class="wave2" d="M0 34 Q 40 44 80 34 T 160 34 T 240 34 T 320 34 T 400 34 T 480 34 T 560 34 T 640 34" fill="none" stroke="#2bb0ed" stroke-width="2"/> </svg> </div> </body> </html>

Comments

  1. PersonUID =
    VAR Isim =
    UPPER (
    TRIM ( Personel[isim] )
    )

    VAR TC =
    IF (
    NOT ISBLANK ( Personel[tc] ),
    TRIM ( Personel[tc] ),
    "NTC"
    )

    VAR Dogum =
    IF (
    NOT ISBLANK ( Personel[dogum_tarihi] ),
    FORMAT ( Personel[dogum_tarihi], "yyyymmdd" ),
    "NDOG"
    )

    RETURN
    Isim & "|" & TC & "|" & Dogum



    ReplyDelete

Post a Comment